3

我正在使用拱 linux。我想执行改变系统ip的php文件。我做了

ifconfig eth0 192.168.163.137

在终端中,它工作正常。我也试过这样做

shell_exec('ifconfig eth0 192.168.163.137');

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

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

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

4

3 回答 3

3

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

例如,在 sudoers 文件中添加以下行将允许 Apache 无需密码即可运行 sudo,仅适用于 ifconfig 命令。

apache ALL=NOPASSWD: /sbin/ifconfig

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

警告:

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

可能是更好的选择:

  • 编写一个带有 suid 位的 shell 脚本,使其以 root 身份运行,无论谁调用它。
于 2012-03-31T20:33:20.030 回答
0

shell_exec

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

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

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

于 2012-03-31T20:26:52.110 回答
0

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

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

于 2012-06-19T14:23:56.983 回答