【问题标题】:Problem with exec() in PHPPHP 中 exec() 的问题
【发布时间】:2011-05-30 01:06:33
【问题描述】:

嗯,我有这个程序,我需要通过任一功能运行,但它位于我的桌面(这个 ubuntu 11.04)。

我把它移到 /home/Username,但没有骰子。

我跑

$blah = exec('sudo | echo mypassword | /home/server1/program commandhere', $test); 
var_dump($test); 
var_dump($blah); ?>

输出什么都没有。

有人告诉我,如果我想通过 sudo 运行它,我需要将 www-data 的 Apache 用户添加到 sudoers 列表中,我添加了它,但又没有运气了。 基本上,我已经尝试了很多东西,它就是不会运行。为什么?

编辑: 如果我将其粘贴到终端中,它会很好用,只是不能使用 exec、system 或 passtrhu。

【问题讨论】:

  • 为什么要将sudo 的输出传送到echo
  • 因为当你执行 sudo 程序时它会要求你输入密码,所以你在执行 sudo 之前不要输入密码。
  • 你在那里调用sudo 的方式真的行不通。要测试,试试这个:sudo | echo mypassword | echo test > /test.txt。它将显示Permission denied 错误。确保您最近没有使用sudo,因为这会缓存您的凭据并改变测试结果。

标签: php linux ubuntu


【解决方案1】:

请改用echo mypassword | sudo -S

这还取决于哪个用户拥有sudo 权限。如果你想从apache 进程运行这个,你还需要给apache 用户sudo 权限。

另外,为了澄清,命令应该是:

echo mypassword | sudo -S /home/server1/program commandhere

【讨论】:

  • 即使这样,程序也不会执行..或者至少没有按应有的方式打印。还有相当多的数据要打印。
  • 对不起,它不起作用。该程序应该打印大量数据,并且根据 exec 它应该将打印的每一行存储在变量中,但那里什么也没有。所以我认为程序甚至从未被执行过。
  • 然后尝试调试问题。从运行一个简单的echo test >/tmp/a.txt 开始,看看/tmp/a.txt 是否包含文本。如果是这样,请进一步尝试运行需要 root 权限的命令,例如 echo mypassword | sudo -S umount /test 2>&1 >/tmp/a.txt,并查看这是否会用文本填充文件。如果没有,那是你调用 sudo 的方式有问题。
  • 另外,查看 什么用户正在运行sudo。它不会是你的用户。它将是运行 PHP 进程的用户。也许apachehttpd。如果是这样,那么您需要为该用户设置密码并允许其sudo 访问。
  • 当我运行该代码时,我得到了没有人的 [sudo] 密码:对不起,再试一次。创建了一个文件,但它是空的。
【解决方案2】:

查看您的安全日志。不确定这是在 Ubuntu 上的什么位置,可能是 /var/log/secure 或 /var/log/messages。我敢打赌,您会在那里找到类似于sudo requires a TTYsorry, you must have a TTY to run sudo 的消息,表明sudo 被配置为在没有真正的交互式shell 的情况下无法工作。也就是说,sudo 不允许您在脚本中使用它或被外部程序调用。

我最近在尝试将 Gnome 键盘快捷键绑定到 sudo 命令时自己处理了这个问题。

如果是这种情况,您需要注释掉/etc/sudoers中的以下行

#Defaults requiretty

【讨论】:

  • 不,我只有 env_reset 那里。它只是不起作用......程序没​​有被执行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-30
  • 1970-01-01
  • 1970-01-01
  • 2015-07-24
  • 1970-01-01
  • 2013-01-11
相关资源
最近更新 更多