2

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

我尝试在 shell 脚本中对 rysnc 命令执行 sudo 操作...

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

并通过将以下内容添加到 sudoers 文件中来允许 apache 运行 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

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

谢谢!

4

2 回答 2

2

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

如何结合 ssh 'hostname' 命令在 php 中使用 exec()?

祝你好运

于 2012-02-20T15:36:49.987 回答
1

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

现在回想起来似乎很简单。

于 2012-02-22T14:13:07.577 回答