2012-10-14 68 views
0

我正在尋找從PHP動態編寫自定義nginx指令。然而我擔心安全問題。 PHP運行在用戶/組php:php下,nginx配置文件歸root:root所有。從PHP動態編寫nginx配置

要使PHP能夠打開並寫入nginx配置文件,該文件需要由用戶和組php:php擁有。

這樣做的最好方法是什麼?我想,我可以用另一種語言或PHP來實現輔助進程,它可以讀取和寫入配置文件,而PHP只是與輔助進程進行通信。

回答

0

這真的取決於什麼樣的PHP文件生成nginx。如果這是一個小型的獨立腳本,我將不會有任何問題以root身份運行它。現在我假設它是一個需要生成並寫入這個nginx文件的php網站。

如果實際創建和寫入文件的部分仍然是自包含和簡單的,我會讓它成爲一個獨立的可執行文件(在PHP或其他),從PHP獲取一些命令行參數網站,然後setuid這個可執行文件(雖然它由root擁有)。但請注意,此可執行文件應該是安全的:http://en.wikipedia.org/wiki/Setuid#Security

另一種方法是讓php寫入nginx.conf(通過使文件具有世界可寫性,使其成爲可寫入組,併爲其提供一組php用戶所在的組,或者通過一個單獨的進程從一些php文件複製文件)。這是非常可怕的,因爲我確信你的nginx.conf文件可以包含執行的命令(例如,用於身份驗證或者cgi),並且它們可能會以root身份執行(如果相同的配置文件如此命令) 。所以用這種方法你基本上打開了php用戶以root身份運行任意命令的大門......

另一件可能工作的東西(我不確定它是可能的):你可能只想調整一個或配置文件中的兩個參數。看看是否有可能從其他位置讀取這些一個或兩個參數(即php可寫)。