在arch linux中以root用户身份在php中执行命令

时间:2012-03-31 19:53:16

标签: php apache archlinux

我正在使用arch linux。我想执行更改系统IP的php文件。我做了

ifconfig eth0 192.168.163.137
在终端

它工作正常。我尝试用

做同样的事情
shell_exec('ifconfig eth0 192.168.163.137');

在一个php文件中,尝试从另一台通过路由器连接的PC上的远程Web浏览器打开页面。页面没有显示任何内容,代码也没有执行。我猜它是用户执行it.apache正在执行它的问题。所以我希望它由root运行。任何人请指导我执行我的代码。我甚至安装了sudo,只是把

shell_exec('sudo ifconfig......');

它也没有执行...请帮助...谢谢.. :)

3 个答案:

答案 0 :(得分:3)

Sudo通常需要交互式shell来输入您的密码。这显然不会发生在PHP脚本中。如果您确定自己知道自己在做什么并且已经解决了安全问题,请尝试允许Apache用户在没有密码的情况下运行sudo,但仅限于某些命令。

例如,在sudoers文件中添加以下行将允许Apache在没有密码的情况下运行sudo,仅用于ifconfig命令。

apache ALL=NOPASSWD: /sbin/ifconfig

调整路径并添加任何参数以满足您的需求。

<强>注意:

  • 由于PHP调用shell命令的方式,可能仍会出现复杂情况。
  • 请记住,允许Web服务器以root身份运行命令是非常危险的!

可能是更好的选择:

  • 使用suid位编写一个shell脚本,使其无论是谁调用它都以root身份运行。

答案 1 :(得分:0)

<强>了shell_exec

  

当PHP以安全模式运行时,此功能被禁用。

文档:http://php.net/manual/en/function.shell-exec.php

那么,也许可以尝试调整你的php.ini文件?

答案 2 :(得分:0)

将命令写入队列并让cron接收它们,验证它们(仅允许已知的好请求)并运行它们,然后用日期和结果标记该队列。

然后,您的最终用户可以使用ajax单击/等待更新。