我曾经问过这个问题,但没有太多成功。 我想我很困惑,没有妥善处理我的问题。 所以在这里再次。
我开始之前的几点:
基本上我想执行ping命令并在PHP页面上显示结果。 我使用的代码是
<?php $who = shell_exec('whoami'); $result1 = shell_exec("/webserver_commands/ping -c 4 www.google.com"); exec("ping -c 4 www.google.com",$result2); echo $who; echo "<br/>".$result1; echo "<br/>".$result2; ?>
我得到的输出是
apache Array
所以我知道脚本正在作为用户'阿帕奇'
在Apache日志中,我看到以下几行
sh: /webserver_commands/ping: Permission denied ping: icmp open socket: Permission denied
我已经确定目录/ webserver_commands /和它的文件ping是属于组apache的用户apache
917506 drwxrwxrwx. 2 apache apache 4096 Feb 4 18:29 webserver_commands 917507 -rwxrwxrwx. 1 apache apache 43448 Feb 4 18:29 ping
任何想法在这里可能会出错?
谢谢你,开始吧
apache
用户没有足够的权限发送ICMP数据包,请考虑使用PEAR中的Net_Ping库。 如果您使用的是Debian,可以使用apt-get install php-net-ping
如果你想显示$ result2你需要崩溃。 exec()将其输出作为数组放入第二个参数中。 所以
打印(破灭( “点击”,$结果2));
或者回声,无论你的喜好
至于ping,它不工作,因为它复制时失去了setuid位。 你需要做的
chown root /webserver_commands/ping chmod u+s /webserver_commands/ping
一个潜在的原因是, ping
是通过devise一个纯根的命令,所以为了从非root用户执行它,很多发行版都将setuid位设置为'ping'; 然而,相反,许多人不会 – 这可能包括FC14
如果ping没有设置setuid位,并且如果你愿意打开这个潜在的 (但不太可能)的安全漏洞,你可以通过ping命令来修改chmod u+s
以允许它从任何用户执行。