2009-07-06 100 views
4

我想構建一個簡單的Web應用程序,它管理服務器上的某個目錄。我想給人們使用chown和chmod的選項。允許PHP更改文件和目錄的所有權和權限

給PHP這個權限最安全的方法是什麼?最快的事情就是以root身份運行Apache和PHP,但這似乎並不是一個聰明的主意。

我想,是創造具有setuid root的一個單獨的腳本的另一件事..

謝謝!

+0

CHOWN需要根。 chmod需要root權限,或者作爲文件的所有者(或者可以在組中更改組權限/其他權限,但不能確定這個權限)。 – 2009-07-06 03:47:26

+0

是的..因此,我想使用一個單獨的setuid根腳本.. – Evert 2009-07-06 20:56:30

回答

6

那麼,這聽起來像是一個危險的想法開始,我寧願坐下來思考什麼是試圖實現的整個策略。

當然,危險是遠程用戶可修改或上載的可執行腳本的權限升級。 Web應用中的完整chown/chmod相當於在頁面上粘貼root密碼。

什麼是需要發生的事情?

如果chown需要出於某種原因而不是根(我們希望),那麼應該封裝這個功能。我會接受用戶的請求並將它們排隊,然後有一個單獨的進程(可以是shell,php,perl,任何東西)以cron的身份運行檢查此隊列,檢查請求是否符合允許的參數並進行更改。

+0

嗨德文,我想做一個Web界面,允許人們通過FTP或SSH以外的其他方式管理他們的public_html和homedirectory。我確實意識到了這些風險,但是我也從一個假設的角度好奇最合適的方法是什麼。 – Evert 2009-07-06 19:41:13

+0

與'適當'我其實是指最安全的解決方案:)。另一個用例是允許Web應用程序更改它自己的配置。在大多數情況下,人們只是將配置設置爲全局可寫或由www-data擁有,但這看起來並不是最好的想法。 – Evert 2009-07-06 19:43:35

0

一種方法是在你的機器上設置sudo(假設它是一個Linux機器)。 Sudo允許您運行提升的命令,並受sudoers.conf文件中規定的限制所控制。使用嚴格的規則將其用途限制在您的Web服務正在運行的用戶的特定目錄中(如www-data),然後從您的PHP腳本調用類似tis的命令shell:

shell_exec("sudo chmod 777 dirname"); 

請確保您的sudo配置非常緊密,以確保突破幾乎不可能。

0

也許你應該看看PHP命令命令:chmod,CHOWN,chgrp命令和fileperms

chmod

chmod("/somedir/somefile", 0600); 
相關問題