php执行exec没成功,请问怎么解决

代码只有一行,如下,IP是我瞎写的,为了看生效没有

var_dump(exec(sprintf('/usr/sbin/iptables -I INPUT -s %s -j DROP', '43.1.1.1')));

① 浏览器里访问,没有生效

写好,在浏览器里反馈是空的,本来也是空的,iptables本身不返回任何数据,然后检查并没有生效

iptables -L

② 手动输入是没问题的

如果是手动输入shell是没问题的

iptables -I INPUT -s 43.1.1.1 -j DROP

③ php也没有禁用函数

在php-cli中执行是OK的,或者用php去执行文件也是OK的,只有在浏览器里操作不执行,是不是因为权限问题?请问怎么解决?

阅读 4.8k
3 个回答

运行php-fpm进程的用户是什么?

是的,权限问题。我用其他命令试验了下。

[root@localhost public]# cat test.php
<?php
echo exec("/command"),PHP_EOL;

[root@localhost public]# php test.php
helloworld
[root@localhost public]# ll /command
-rwx------+ 1 root root 16 Oct 18 17:00 /command
[root@localhost public]# curl http://localhost/test.php

此时没有任何输出。然后给权限 setfacl -m u:apache:rwx /command

[root@localhost public]# curl http://localhost/test.php
helloworld

此时程序被成功执行。

我也试过按这种方法给执行 iptables 的权限,但失败了。原因有空再排查吧。
  • iptables一般都是root执行的。我想你的php-fpm/apache应该不是root运行worker进程吧?所以权限肯定是一个问题
  • 还有就是看看浏览器模式下的php执行shell的环境变量是否是对的
这两个排查一下应该就能解决了。
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题