在特定目录中从另一个用户调用shell脚本

时间:2012-05-02 10:19:25

标签: php linux shell

我正在编写一个使用一些shell脚本的PHP前端。但是,问题是我必须将脚本作为特定用户在一个非常特定的目录(可访问但不是由www-data拥有)中调用。

$command = './myscript.py 2>&1 |  tee /tmp/outputfile.txt';       // set the command
$cwd = 'cd /home/secondUser/myscript';                                // set current working directory
$wrapper = 'echo "Password" | sudo -u secondUser bash -c';        // add extra wrappers
$fullCommand = $cwd.';'.$wrapper.' "'.$command.'"';             // combine subcommands
$output = system($fullCommand);

我正在尝试不同的执行命令(shell_exec,exec ...)。但是,我总是在日志中发现以下错误:

sudo: no tty present and no askpass program specified

问题不仅在于运行shell脚本(例如通过编辑sudoers),而且还要将其作为特定的ruser运行。

这样做的任何提示或技巧?

1 个答案:

答案 0 :(得分:0)

1)## Heading ##这与PHP无关,但与unix有关,所以它应该可以移到其他一些stackexchange服务器上。

你提到的日志行也正在告诉你究竟是什么问题。 Sudo不允许你从脚本中传递密码,它需要一个终端(tty),以便它可以关闭本地回声(因此你不会输入你输入的密码作为密码)。您可以在sudoers文件中覆盖它。但是你可能应该完全不同地解决它,或者使用私有的无密码密钥以使用SSH作为不同的用户登录,或者允许在没有密码的情况下“sudo”命令。两者都在这里提到:

2)他们已经解决了这个问题: https://serverfault.com/questions/160524/using-su-inside-of-a-shell-script