2011-09-04 51 views
0

我試圖在CENTOS中運行「useradd」命令,但我不能,因爲我需要root權限。如何從apache(centOS)以root身份運行cmd?

在我的php_info();我有'--disable-posix'。我試圖重新安裝我的PHP,並嘗試使用yum和更多選項啓用posix,但沒有運氣。

有人可以幫我做posix啓用或其他解決方案嗎?我注意到posix_getuid();正在工作,但posix_setuid();不是。

任何解決方案?

我需要通過「user click」將useradd插入到passwd(root)命令中。什麼是最好和最安全的方式來做到這一點?

非常感謝!

科倫或者

+12

你真的不應該這樣做,如果Apache允許root訪問,那麼即使是最小的錯誤/ bug也會讓攻擊者完全控制你的服務器。我不確定,但如果你絕對想要這樣做,我可能會建議寫入一個文件,然後從該文件讀取具有root訪問權限的另一個PHP守護進程,並將其更新爲passwd。但是,真的,你不應該。 – Andreas

+0

但仍然如果我給文件權限。那麼攻擊者也可以寫入文件給他的權限,在我的服務器中的所有目錄。而不是監獄或chroot。 – user692601

+0

確切地說,但是鑑於您將使用PHP獨立於Apache請求更新passwd/etc,現在由您來實施合理的安全措施,例如不允許root acccess,記錄更改,批准更改等等。但事實上,情況並沒有那麼糟糕,但仍然非常糟糕。 – Andreas

回答

0

你想要閱讀的文檔suEXEC的:http://httpd.apache.org/docs/2.2/suexec.html 然後重新思考你的應用程序的工作,並找出一個更好/更安全的方式。

+0

僅僅suEXEC就不會允許他以* root *身份運行。 suEXEC適用於以非root用戶身份運行網絡應用程序,彼此分離。 –

0

您可以使用sudo來做到這一點。 運行visudo,把類似

apache ALL = (ALL) NOPASSWD: /usr/sbin/useradd 

其實如果你已經SELINUX執行就不會工作,而不是使用useradd的我會推薦寫一個包裹腳本,正確設置環境和運行useradd的

之前做的完整性檢查
+2

這是一個可怕的建議:你不應該授予root用戶訪問網絡服務器 –

+0

認真你不想這樣做。 – 0xAli

+3

是的,但問題是:「我試圖在CENTOS中運行」useradd「命令。我的答案提供瞭解決方案。問題不在於「如何通過Web界面正確更新根密碼」,也不是「我如何成爲一名體面的網站管理員」,問題非常確切,我的回答也非常精確 – OlivierS

0

我會建議編寫一個shell腳本,它將通過sudo調用useradd。

Cmnd_Alias USERADD = /bin/sbin/useradd *

apache ALL=(USERADD) NOPASSWD:USERADD

調用useradd命令:

您可以爲特定用戶到/ etc/sudoers文件(由visudo命令編輯)

應該是這樣的添加特定的命令:

sudo /usr/sbin/useradd USERNAME

不要忘記在php腳本和shell腳本中驗證輸入。

+0

使用useradd命令後注意'*',它會允許你傳遞參數 –

+0

Sudo需要交互式運行(它需要一個密碼) –

+0

注意'NOPASSWD:'。這指示sudo不要爲特定的命令組請求密碼。 –

-3

須藤需要進行交互方式運行(預計密碼)

你不應該被授予以任何方式到Web服務器的root訪問權限。

的SuExec是一種選擇,但你也可以只具備web腳本寫一個文件,並有一個解析文件和處理命令

cron作業
+0

不一定。 –

+0

您可以將密碼保存爲明文並通過標準輸入傳遞,但需要您爲Web服務器用戶授予sudo訪問權限。 –

+0

不,您可以將sudo配置爲不需要特定用戶的密碼。但這仍然是一個糟糕的主意。 – IanNorton

0

須藤可能是一個快速的黑客攻擊,迅速實現這一點,但是很難保證,即使是經驗豐富的unix guru,也存在缺陷。

另一種方法是編寫自己的服務器守護程序,以root用戶身份運行,監聽本地unix域套接字或命名管道,或者僅查找某個受保護目錄中的文件。然後從你的php腳本中輸入用戶名來添加這個守護進程。在這個守護進程中只實現最低限度的應用程序功能,以及其他一切在php中。但是在你的守護進程中進行強大的輸入檢查,清理你的環境等,以確保它是php應用程序調用,而不是其他人。

相關問題