PHP shell_exec - 使用RSYNC作为root而不使用密码

时间:2012-02-20 15:33:03

标签: php root rsync shell-exec sudoers

我正在尝试为staging->生产发布脚本创建PHP Web界面。 Web界面是安全的(Intranet,passworded等),所以我很高兴apache充当root用户来执行rsync。 root用户没有密码,密钥文件用于SSH访问。

我在shell脚本中试过sudo-ing rysnc命令......

sudo rsync --verbose --recursive --times --perms --links --delete /tmp/dir1/* /tmp/dir2/

允许apache通过将以下内容添加到sudoers文件来运行rsync ...

apache ALL=(ALL) NOPASSWD:/usr/bin/rsync

我使用PHP shell_exec来调用脚本......

$result = shell_exec('bash /tmp/syncscript.sh 2>&1');

我收到以下错误...

sorry, you must have a tty to run sudo

如何设置以便我可以运行rsync命令,就好像我是root用户一样?

谢谢!

2 个答案:

答案 0 :(得分:2)

如果你想从PHP使用SUDO,你可能想尝试我在这篇文章中写的内容。它解决了我所有的问题,我有一个类似的设置,我在内部有一个DEV服务器,但我希望它做只有root的东西......

How to use exec() in php in combination with ssh 'hostname' command?

祝你好运

答案 1 :(得分:1)

最终采用非sudo方法来解决这个问题。使用phpseclib作为可以执行我需要的操作(不是apache)的用户连接到框。然后确保此用户可以访问rsync操作中目标的目录/文件。

现在看起来很简单,我回头看看。