【问题标题】:Calling shell script as another user from PHP in specific directory从特定目录中的 PHP 以另一个用户身份调用 shell 脚本
【发布时间】:2012-05-02 10:19:24
【问题描述】:

我正在编写一个使用一些 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 运行。

有任何提示或技巧吗?

【问题讨论】:

  • 您为什么不直接将信息放入特定目录并通过 Cron Job 收集它,然后使用该信息从 cron 执行您的特定脚本?想象一下有人可以从网站直接 sudo 进入你的机器,这对我来说听起来不安全......

标签: php linux shell


【解决方案1】:

1) ## Heading ##这不是 PHP 相关的,而是 unix 相关的,所以它可能应该移动到其他一些 stackexchange 服务器。

您提到的日志行也可以准确地告诉您问题所在。 Sudo 不允许您从脚本中向其传递密码,它需要一个终端 (tty) 以便它可以关闭本地回显(因此您不会输入您输入的字母作为密码)。您可以在 sudoers 文件中覆盖它。但是您可能应该以完全不同的方式解决它,要么使用私人无密码密钥以使用 SSH 的不同用户身份登录,要么允许“sudo”没有密码的命令。两者都在这里提到:

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

【讨论】:

  • 感谢您的提示,但没有成功。我收到了同样的错误,并且返回了 sudo 的帮助。
猜你喜欢
  • 2018-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-11
  • 2011-03-10
  • 2014-11-24
  • 1970-01-01
相关资源
最近更新 更多