Linux 技术手札

PHP 透过 Sudo 执行 root 指令

一直以来要用 PHP 以 root 身份执行系统管理工作的问题,就是 PHP 会以 apache 的身份执行,解决方法有安装 suPHP 或 super 这类工具,但个人认为还是 Sudo 较为安全。首先要安装 Sudo,据我所知 RHEL, Ubuntu 已经内置,Debian 只要用 apt-get 安装就可以,以下是 FreeBSD 的安装方法:

FreeBSD 安装 Sudo
# cd /usr/ports/security/sudo
# make && make install

当系统有 Sudo 后,基于安全理由,不要直接编辑组态档 /etc/sudoers,改用 visudo 来做编辑。visudo 为防止多个使用者同时修改,它会先锁住 /etc/sudoers,并且确保组态档的文法正确,一旦发现错误会拒绝储存动作。

假如你的 Apache 的执行身份为 apache,而想透过 PHP 重新启动 DNS server,用 root 输入指令 visudo,便会用 vi 开启 /etc/sudoers,在档案最底加上以下一行:

apache ALL=NOPASSWD:/etc/rc.d/init.d/named

储存后可以在 PHP 以 root 身份执行 /etc/rc.d/init.d/named,包括开启、停止及重新启动:

上面的 /usr/bin/sudo 是 sudo 的可执行档,需要根据自己的安装目录进行修改。以上只是个简单的例子,你可以根据你的需要执行其他管理动作,但如果 web server 是多人共用,那么在使用 Sudo 时要加倍小心。

Exit mobile version