我正在编写一个使用一些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运行。
这样做的任何提示或技巧?
答案 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