【问题标题】:Allow www-data to execute rsync under other user (php)允许 www-data 在其他用户下执行 rsync (php)
【发布时间】:2016-08-29 02:13:43
【问题描述】:

我想允许 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 配置是否设置正确?

【问题讨论】:

    标签: php linux rsync sudo sudoers


    【解决方案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

    如果有帮助的话……

    【讨论】:

      猜你喜欢
      • 2017-12-12
      • 2013-11-20
      • 2015-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多