php通过sudo执行root权限的程序

来自http://tunps.com/php-sudo-root-privilege-program

最近公司需要通过web界面修改squid.conf,然后保存配置文件的同时重启动squid,web服务器是nginx+php,文件用户和组都是www。
首先编辑 /etc/sudoers 使用 visudo来编辑
/etc/sudoers的权限是440:
-r–r—– 1 root root 3248 Oct 18 23:47 /etc/sudoers
需要chmod u+w /etc/sudoers
修改完毕之后再chmod -w /etc/sudoers
因为如果/etc/sudoers的权限不是440,那么sudo会报错:
[root@hn ~]# sudo
sudo: /etc/sudoers is mode 0640, should be 0440
sudo: no valid sudoers sources found, quitting

在最下面添加一行

nobody ALL=NOPASSWD:/usr/local/squid/sbin/squid -k reconfigure

然后注释掉文件中的Defaults requiretty这行
否则会出现sudo: sorry, you must have a tty to run sudo的错误
保存退出即可
测试
写一个php文件,内容如下

<?php
$output = shell_exec("/usr/bin/sudo /usr/local/squid/sbin/squid -k reconfigure");
echo $output;
?>

About tunpishuang

just 4 fun·····
This entry was posted in 未分类 and tagged . Bookmark the permalink.

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>