允许www-data在其他用户(php)下执行rsync

时间:2016-05-03 20:55:54

标签: php linux rsync sudo sudoers

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

如何使用sudo配置实现此目的?这就是我所做的:

在sudo configutaion(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配置是否设置正确?

1 个答案:

答案 0 :(得分:1)

我终于找到了如何使它发挥作用。

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-data不会将不需要的文件夹同步到远程主机。

这最终允许我在主服务器和从属服务器之间执行安全的资源同步:Safe way to synchronize ressources between servers through php / linux

如果这有帮助......