我需要通过 php (php5.xx) 和运行 apache2 (Ubuntu 10.04) 的服务器执行一个脚本。该脚本需要以另一个用户身份执行。
我在/etc/sudoers
文件中添加了以下几行:
Cmnd_Alias SECURE_SVN_UPDATE = /path_to_script/just_svn_update.sh
#www-data ALL=(ALL,!root,!#0) NOPASSWD: SECURE_SVN_UPDATE
www-data ALL=(ALL) NOPASSWD: SECURE_SVN_UPDATE
(我尝试了这两条线路)
在 PHP 中,我调用
exec("sudo -u theuser SECURE_SVN_UPDATE")
我得到了错误
sudo: no tty present and no askpass program specified
我尝试设置
Defaults visiblepw
在sudoers
文件中,但此后,从 PHP 运行命令会出现错误:
sudo: 3 incorrect password attempts
。
有人能告诉我如何修复这个问题吗?或者在不影响安全性的情况下实现它的方法。(我希望 apache 能够以另一个用户的身份执行该脚本,而不是其他任何脚本)。
答案1
与其尝试使用 sudo 执行文件,为什么不以您希望拥有更新尝试拉取的源代码的权限的用户身份为特定虚拟主机运行 apache?
此链接指的是设置用户的方式 http://httpd.apache.org/docs/current/mod/mpm_common.html#user
其次,如果我理解正确的话,您要做的事情是:您有一个远程 Web 服务器。您想登录并让它从 SVN 中提取更新的代码。通常,部署方法需要更实际的方法,例如 rsync、FTP 或 SFTP/SCP push 。