php - 在特定目录中从 PHP 以另一个用户身份调用 shell 脚本

标签 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),还在于以特定用户身份运行它。

这样做有什么提示或技巧吗?

最佳答案

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/

相关文章:

Linux - openssl sha256 使用文件中的 key

linux - 为什么在 $() 中使用管道时 bash 会执行我的脚本的 2 个实例

php - 试图从命名空间 (...) 加载类 "ClassName"。即使命名空间被导入

PHP 正则表达式 "Unknown modifier p"

linux - mmap如何使大文件处理更快?

bash: ????: 找不到命令

php - Laravel 参数太多,调度时预期参数为 "command"

php - 我如何根据 Moodle 2.6.0 版本中的 $courseId 获取 $cm->id?

linux - 如何在 linux 中读取用户日期并在 svn 日志中使用该日期

linux - 制作安装和环境变量