在Php来操作linux系统,下达一些shell让php执行的时候,我们会因为权限的问题搞的焦头烂额。下面有一个好方法,几乎可以让php有root的权限。
比如我们要让php来执行重启网络服务,那么我们可能就会用
exec("/etc/init.d/network restart")来执行,但是因为php没有足够的权限,实际上这样的操作是执行不了的。
我们可以配置sudo,php就能顺利的执行重启网络服务了。
终端下输入 visudo
Defaults requiretty 前加注释符# 将这行注释掉
然后我们在最后追加
apache ALL=NOPASSWD:/etc/init.d/network
注意大小写
最后Php中的exec函数稍作修改
exec("/usr/bin/sudo /etc/init.d/network restart")
OK,大功告成。
我们还可以在sudo中加入更多,比如可以加入
apache ALL=NOPASSWD:/bin/sh
这样php就可以执行shell脚本,我们完全可以把service network restart直接丢到shell脚本里,让Php去执行这个shell,尽管php没有权限重启网络服务,但是经过我们的配置它可以执行shell了,而shell是有权限来执行service network restart
我们编辑一个shell脚本
#! /bin/bash
service network restart
保存到/root/netrestart文件。
php执行exec("/usr/bin/sudo /bin/sh /root/netrestart")
同样可以达到我们最终要的效果。
比如我们要让php来执行重启网络服务,那么我们可能就会用
exec("/etc/init.d/network restart")来执行,但是因为php没有足够的权限,实际上这样的操作是执行不了的。
我们可以配置sudo,php就能顺利的执行重启网络服务了。
终端下输入 visudo
Defaults requiretty 前加注释符# 将这行注释掉
然后我们在最后追加
apache ALL=NOPASSWD:/etc/init.d/network
注意大小写
最后Php中的exec函数稍作修改
exec("/usr/bin/sudo /etc/init.d/network restart")
OK,大功告成。
我们还可以在sudo中加入更多,比如可以加入
apache ALL=NOPASSWD:/bin/sh
这样php就可以执行shell脚本,我们完全可以把service network restart直接丢到shell脚本里,让Php去执行这个shell,尽管php没有权限重启网络服务,但是经过我们的配置它可以执行shell了,而shell是有权限来执行service network restart
我们编辑一个shell脚本
#! /bin/bash
service network restart
保存到/root/netrestart文件。
php执行exec("/usr/bin/sudo /bin/sh /root/netrestart")
同样可以达到我们最终要的效果。