【问题标题】:shell_exec throws: sudo: no tty present and no askpass program specifiedshell_exec 抛出:sudo:不存在 tty,也没有指定 askpass 程序
【发布时间】:2015-02-21 23:14:41
【问题描述】:

我一直在尝试使用 php 中的 shell_exec() 函数执行脚本:

我写了以下几行代码:

$command = "bash /path/to/my/script/ funciton_name() 2>&1";
echo shell_exec($command);

在我正在执行的 shell 脚本中:

sudo rsync -avvc /source/path /destination/path

在浏览器上执行此操作时,我收到以下错误消息:

sudo: no tty present and no askpass program specified

当我在我的服务器上执行相同的 shell 脚本时,它执行得很好。

当我浏览了这个论坛上发布的类似问题时,我意识到我必须在我的服务器上添加 NOPASSWD 行,我发现它已经以以下格式添加:

User_Alias  NOBODY=nobody,apache
NOBODY  ALL=(ALL) NOPASSWD : /path/to/my/script

当我这样做时:

echo shell_exec("whois");

我得到的输出为:

apache

任何有助于克服这个问题的帮助都会有很大帮助。

【问题讨论】:

  • 更好的方法是在您尝试 rsync 的路径上授予适当的权限,而不是授予 Apache 和所有其他以“无人”身份运行的程序不受限制的 root 访问权限没有密码。您要求您的服务器受到威胁。这样做也可以解决您的 tty 问题。
  • @Cfreak - 我尝试更改我正在尝试 rsync 的特定目录的文件权限,但它似乎没有解决问题。

标签: php bash


【解决方案1】:

sudo 需要 TTY,即使您已将其设置为无密码,除非您 explicitly do not require it。但是作为@Cfreak pointed out,最好首先通过设置正确的access rights(在继续之前阅读它)来避免sudo(更简单safer)。

rsync 它自己 对配置合理的 *nix 安装不需要 root 权限。要验证这一点,您可以检查 type -a rsync 不会打印出像 rsync is aliased to `sudo rsync' 这样的奇怪内容,并且 ls -l $(which rsync) 会打印合理的权限(至少对每个人来说都是 rx)。

【讨论】:

  • 我尝试通过将所有者和组更改为 apache 并设置所需的权限来更改源文件夹和目标文件夹的权限。但是我服务器上的 rsync 需要 sudo 访问权限。你能帮忙解决这个问题吗?
猜你喜欢
  • 2015-11-06
  • 1970-01-01
  • 2022-11-10
  • 2014-11-18
  • 2021-10-26
  • 2016-10-02
  • 1970-01-01
  • 2015-02-01
相关资源
最近更新 更多