我正在编写一个使用一些 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),还在于以特定用户身份运行它。
这样做有什么提示或技巧吗?
最佳答案
1) ## Heading ##This 与 PHP 无关,但与 unix 相关,因此它可能应该移动到其他一些 stackexchange 服务器。
此外,您提到的日志行还准确地告诉了您问题出在哪里。 Sudo 不允许您从脚本向它传递密码,它需要一个终端 (tty) 以便它可以关闭本地回显(这样您就不会输入您输入的字母作为密码)。您可以在 sudoers 文件中覆盖它。但是您可能应该以完全不同的方式解决它,要么使用无密码的私有(private) key 使用 SSH 以不同用户身份登录,要么允许“sudo”一个没有密码的命令。两者都在这里提到:
2) 他们已经解决了这个问题: https://serverfault.com/questions/160524/using-su-inside-of-a-shell-script
关于php - 在特定目录中从 PHP 以另一个用户身份调用 shell 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10411792/