通过PHP执行系统命令

PS.这几天用PHP写了一个小工具,因为要部署在Linux,又要暂时使用sudo执行一些Shell命令,网上也有很多资料,但是有的要么就直接把Web服务器用户直接提升权限,要么就使用密码存文件方式,安全性都不是特别好,好在搜索到在Wordpress上一位外国友人的文章,很实用,安全性也不错,就把它翻译过来和大家分享一下,下面是正文部分。


  许多时候我们需要在Linux系统上执行系统命令--比如来删除一个目录或者重启服务。但是,因为Apache并不是以root权限运行的,这样使用PHP的exec()、system()或者passthru()函数来实现以上功能就变得不太可能。

  解决这个问题的方案是非常简单的,特别是在Ubuntu上。Apache的用户www-data需要获得权限来使用sudo执行一些应用。

  1、执行命令

     

command sudo visudo

  2、在文件末尾,增加如下内容

   

www-data ALL=NOPASSWD: /sbin/iptables, /usr/bin/du

  假设你希望使用超级用户(root)权限运行iptables和du命令。但是,如果你想使用超级用户权限运行每一个应用,添加以下命令来代替上面的命令。  

   

www-data ALL=NOPASSWD: ALL

  3、就是这样,现在像下面这种方式在你的php脚本中使用exec()函数

      

exec("sudo iptables -P FORWARD ACCEPT");
  这使我能够在服务器上执行脚本,这个脚本我早先不得不使用setuid和联合是否为cron的方式。但是现在,PHP使这变得方便。

PS.

1、修改sudoers还有另外一种方式,使用 vi /etc/sudoers,在此之前要 sudo chmod u+w /etc/sudoers,获取权限。

2、如果要让PHP运行我们自己写的脚本,我在Google上看到用这个方法也是可以的。例如:www-data ALL=NOPASSWD: /tmp/script.sh

     要写明sh文件的具体位置

原文地址:https://exain.wordpress.com/2007/11/24/execute-system-commands-via-php/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章