-
PHP 透過 Sudo 執行 root 指令
Posted on January 24th, 2007 5 comments一直以來要用 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,包括開啟、停止及重新啟動:
PHP:-
<?php
-
// 開啟 named
-
echo $output;
-
?>
上面的 /usr/bin/sudo 是 sudo 的可執行檔,需要根據自己的安裝目錄進行修改。以上只是個簡單的例子,你可以根據你的需要執行其他管理動作,但如果 web server 是多人共用,那麼在使用 Sudo 時要加倍小心。
5 responses to “PHP 透過 Sudo 執行 root 指令”
-
moyoshi August 18th, 2007 at 15:25
版主提供的內容都很有深度,除了這篇以外”讓 crontab 自動排程執行 php”
也是我想要解決php轉檔的其中一個方法,不過我還是選擇了這篇的做法。
感謝版主的分享^_^ -
引用啦
By SIKO
-
b-shell December 4th, 2007 at 19:42
我是用CENTOS 5的, 正好需要用web interface 給不懂CLI 的同事處理日常系統維護, 看到你這篇教學, 就按你的方法去做. 但發現不成功, 而在 httpd 的error log會出現以下error:
sudo: sorry, you must have a tty to run sudo
我在網上找到解決方法, 就是在visudo 內, 找出下面這行:
Defaults requiretty
注解掉再執行就成功了. 希望其他遇到相同問題的人可以作為參考.
-
我的系统是fedora9,用上面方法都不行,原来罪魁祸首是selinux,必须把selinux的策略改了或关了SELinux才行。
-
請問,如果是要讓test這個使用者,使用sudo這個指令都不用在輸入密碼是不是
在最後面加入
test ALL=(ALL) ALL
就可以了呢??
Leave a reply
-
