PHP Exec Sudo / Exim命令

时间:2014-04-04 18:05:03

标签: php linux shell

我试图从PHP中执行sudo命令。为简单起见,我使用包含在预标签中的passthru。长话短说,我想得到一些exim统计数据。

我在CentOS盒子上。

通过shell登录后,我通过visudo添加了以下行。

myuser      ALL = NOPASSWD: /usr/sbin/exiwhat

我可以在炮击时使用以下任一命令成功执行exiwhat命令。

sudo -u myuser -H /usr/sbin/exiwhat
sudo -u myuser -H exiwhat

我甚至尝试通过su成为用户,但仍然成功。

su myuser
sudo /usr/sbin/exiwhat
-or-
sudo exiwhat

我的php脚本看起来有点像这样。

<?php
echo '<pre>';
passthru('whoami');
echo "\n1)";
passthru('sudo exiwhat');
echo "\n2)";
passthru('sudo /usr/sbin/exiwhat');
echo "\n3)";
passthru('exiwhat');
echo "\n4)";
passthru('/usr/sbin/exiwhat');
echo "\n";
echo '</pre>';

我得到的全部是:

myuser

1)
2)
3)
4)No exim process data

我已经尝试过

exec('exiwhat',$output);

但输出返回为空数组。

我可以得到简单的东西,例如&#34; ps aux&#34;或者&#34; dir&#34;工作得很好。请帮忙。

可能重复:How to call shell script from php that requires SUDO?

注意:我可以通过命令行运行exiwhat并获得一大块输出。我们在任何时间都有数百封电子邮件在队列中。

更新: 另一个线程,我添加了&#34; 2 - ;&安培; 1&#34;每个命令都得到以下

myuser

1)sudo: sorry, you must have a tty to run sudo

2)sudo: sorry, you must have a tty to run sudo

3)sh: exiwhat: command not found

4)/bin/rm: cannot remove `/var/spool/exim/exim-process.info': Permission denied
exim(770): Operation not permitted
exim(8016): Operation not permitted
exim(15618): Operation not permitted
exim(15626): Operation not permitted
exim(16751): Operation not permitted
exim(16765): Operation not permitted
exim(32207): Operation not permitted
exim: no process killed
No exim process data

更新: 我通过visudo添加了以下行,我的sudo命令现在正常工作

Defaults:myuser !requiretty

虽然这样可以节省吗?

1 个答案:

答案 0 :(得分:2)

编辑/ etc / sudoers文件并删除有关Default requiretty的行。

**更新我猜这个选项默认启用,所以添加如下内容:

Defaults:myuser        !requiretty