允许www数据在其他用户(php)下执行rsync


Allow www-data to execute rsync under other user (php)

我想允许php在其他用户的权限下执行rsync,比如说wwwsync用户。

如何使用sudo配置实现这一点?以下是我所做的:

在sudo配置(sudo visudo)中

www-data www-data-sync=(wwwsync) NOPASSWD: /usr/bin/rsync

当以wwwsync用户身份登录时,这一行可以正常工作

rsync -avz -e "ssh -i ~/.ssh/id_rsa -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null" --progress ~/some/path/ [remoteuser]@[remotehost]:~/some/path/

但是使用shell_exec()从php执行的这一行不适用于

sudo -u wwwsync rsync -avz -e "ssh -i ~/.ssh/id_rsa -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null" --progress ~/some/path/ [remoteuser]@[remotehost]:~/some/path/

这是在wwwsync用户下执行rsync的正确方式吗?sudo配置设置正确吗?

我终于找到了如何让它工作。

sudoer配置错误。别名必须为ALL,而不是随机别名。而且"rsync"必须设置"-H"选项,以便命令在执行命令时将目标主文件夹设置为主文件夹。

在sudo配置(sudo-visudo)中

www-data ALL=(wwwsync) NOPASSWD: /usr/bin/rsync

使用shell_exec()从php执行的这一行确实有效(为用户wwwsync和远程主机正确设置ssh密钥)

sudo -H -u wwwsync rsync -avz -e "ssh -i ~/.ssh/id_rsa -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null" --progress /some/path/ [remoteuser]@[remotehost]:~/some/path/

注意:必须仔细设置wwwsync rigths/perms,以便www数据不会将不需要的文件夹同步到远程主机。

这最终允许我在主服务器和从属服务器之间执行安全的资源同步:通过php/linux 在服务器之间同步资源的安全方法

如果能帮上忙的话。。。