推荐给好友 上一篇 | 下一篇

PHP 透過 Sudo 執行 root 指令

一直以來要用 PHProot 身份執行系統管理工作的問題,就是 PHP 會以 apache 的身份執行,解決方法有安裝 suPHP 或 super 這類工具,但個人認為還是 Sudo 較為安全。首先要安裝 Sudo,據我所知 RHEL, Ubuntu 已經內置,Debian 只要用 apt-get 安裝就可以,以下是 FreeBSD 的安裝方法:BSD爱好者乐园Epuw^a
BSD爱好者乐园J4E I_UQ/^
FreeBSD 安裝 SudoBSD爱好者乐园xl1l;t`
# cd /usr/ports/security/sudo
iLI ` b# make && make install
9Tzh(S-nSlcd7MyBSD爱好者乐园1ShIpprI*LN
當系統有 Sudo 後,基於安全理由,不要直接編輯組態檔 /etc/sudoers,改用 visudo 來做編輯。visudo 為防止多個使用者同時修改,它會先鎖住 /etc/sudoers,並且確保組態檔的文法正確,一旦發現錯誤會拒絕儲存動作。BSD爱好者乐园] e@,P:uN

uJMO8n/M.G5|,S假如你的 Apache 的執行身份為 apache,而想透過 PHP 重新啟動 DNS server,用 root 輸入指令 visudo,便會用 vi 開啟 /etc/sudoers,在檔案最底加上以下一行:
,TX$j0e2p8G RUi^0uBSD爱好者乐园V/N7R]|t:d
apache ALL=NOPASSWD:/etc/rc.d/init.d/named
SNU_.r$k;EHBSD爱好者乐园4ckLm Dl`
儲存後可以在 PHP 以 root 身份執行 /etc/rc.d/init.d/named,包括開啟、停止及重新啟動:
3[*abRZ*Bc
0a,h0D!Q\ WTPHP:
N~2wb r z S(g<?php
)K^ E5FYZ+i'?!bM8[// 開啟 namedBSD爱好者乐园g(jQ _ VIM8J
$output = shell_exec("/usr/bin/sudo /etc/rc.d/init.d/named start");
Q+y?O'Y T"\echo $output;BSD爱好者乐园ngk|po!cR
?>
1E m0a;C(@"t上面的 /usr/bin/sudo 是 sudo 的可執行檔,需要根據自己的安裝目錄進行修改。以上只是個簡單的例子,你可以根據你的需要執行其他管理動作,但如果 web server 是多人共用,那麼在使用 Sudo 時要加倍小心。
[重要提醒]对本篇资料有疑问,请到论坛讨论,尽量使文章准确无误>>>
[版权声明]BSD爱好者乐园站内文章,如来源不是互联网,则均系原创或翻译之作,可随意转载,或以此为基础进行演译,但务必以链接形式注明原始出处和作者信息,否则属于侵权行为。另对本站转载他处文章,俱有说明,如有侵权请联系本人,本人将会在第一时间删除侵权文章。
TAG: php sudo root
 

评分:0

我来说两句

seccode