我正在考慮製作一個基於網絡的小型Linux控制面板(只是爲了好玩)。從PHP執行根命令...有沒有安全的方法?
我想到的第一個潛在問題是,我需要爲Apache的用戶提供root權限才能運行這些命令,這會危及整個系統的安全。
爲系統安裝專用Web服務器並不是真正的選擇。
也許我可以運行第二個Apache實例(爲常規用戶保留第一個實例),但如果可能的話,甚至不能確定。
那麼,你們覺得呢? 這裏我最好的選擇是什麼?
在此先感謝您的任何意見。
編輯:好的傢伙謝謝所有的建議,我會記住他們。
我正在考慮製作一個基於網絡的小型Linux控制面板(只是爲了好玩)。從PHP執行根命令...有沒有安全的方法?
我想到的第一個潛在問題是,我需要爲Apache的用戶提供root權限才能運行這些命令,這會危及整個系統的安全。
爲系統安裝專用Web服務器並不是真正的選擇。
也許我可以運行第二個Apache實例(爲常規用戶保留第一個實例),但如果可能的話,甚至不能確定。
那麼,你們覺得呢? 這裏我最好的選擇是什麼?
在此先感謝您的任何意見。
編輯:好的傢伙謝謝所有的建議,我會記住他們。
編寫可作爲root運行的特定腳本,並使用setuid位執行此操作,以便Apache可以僅以root身份運行這些腳本。 IE
#! /usr/bin/php (or wherever your php binary is)
<?php
// Some PHP code that takes in very limited user input,
// validates it carefully, and does a sequence of actions
// that you need to run as root.
// This could easily be a shell script (or whatever else you want)
// instead of PHP. That might be preferable in many situations.
?>
然後確保該腳本由root擁有和運行Apache用戶group'd爲:
chown root:www-data myscript.php
然後使其運行作爲所有者:
chmod u+s myscript.php
並確保Apache可以執行它:
chmod g+x myscript.php
使用setuid運行PHP,這只是潛在的安全問題,但是,這就是OP想要的:) – Tibor
Linux忽略解釋語言上的setuid位,因爲它被認爲是非常不安全的。 http://unix.stackexchange.com/questions/364/allow-setuid-on-shell-scripts/2910#2910 –
通過網絡服務器執行根命令對我來說似乎是一個瘋狂的想法,但無論如何。
您可以使用sudo
這將確保您不會運行任何不需要的命令。從here採取
小例子,sudo的配置:
peter, %operator ALL= /sbin/, /usr/sbin, /usr/local/apps/check.pl
而且在PHP中:
exec('sudo /usr/local/apps/check.pl ...');
請務必正確等逃避所有參數。
或者你可以建立,而db表是這樣的:
commands (
action,
serialized_parameters.
result,
return_code
)
使用PHP命令插入到這個表,這將在cron由不同的用戶運行的另一個腳本。你不會有實時的結果(但你可以讓他們有30秒的時間),但apache用戶將不能直接使用任何命令(當然你可以在讀取記錄時輕鬆限制動作)。
我最近發佈了一個項目,它允許PHP獲得真正的Bash shell並與其進行交互(如果需要的話,以root身份),它解決了exec()和shell_exec()的限制。在這裏獲得:https://github.com/merlinthemagic/MTS
下載您只需使用下面的代碼後:
$shell = \MTS\Factories::getDevices()->getLocalHost()->getShell('bash', true);
$return1 = $shell->exeCmd('yourFirstCommand');
//the return will be a string containing the return of the command
echo $return1;
在安全性方面它遠遠比運行Apache作爲根更好。但讓PHP靠近根目錄總是很棘手。
我建造這個項目實現了2種方式之一根的bash shell:
1)您允許Apache在sudo的蟒蛇的權利。
OR
2)您傳遞根證書對象每次你需要以root設置shell的時候。
挑你的毒藥。 :)閱讀文檔。
您需要考慮的安全功能,迴避或克服的方法很多。除非您對Linux系統安全性有深入的瞭解,否則不要考慮嘗試此操作。 –
任何時候你都想做**這樣的事情**,爲什麼不問Plesk的人是多麼有趣[做一個「安全的」基於網絡的系統管理面板](http://arstechnica.com/企業/新聞/ 2012/02 /的Plesk控制面板的錯誤 - 左 - FTC的網站,和成千上萬,更暴露到anon.ars)。 – rdlowrey
我在考慮製作一個基於網絡的小型Linux控制面板(只是爲了好玩) - 我想你應該多出去一些,但是我又應該對失眠做點事情! –