PHP执行Ping命令

我曾经问过这个问题,但没有太多成功。 我想我很困惑,没有妥善处理我的问题。 所以在这里再次。

我开始之前的几点:

  1. 我在跑FC 14
  2. 我没有手动安装Apache …使用百胜
  3. PHP中的安全模式被closures

基本上我想执行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以允许它从任何用户执行。