我必須開發一個用CGI編寫的網站。如何在Linux中使用root權限運行腳本
我想知道如何從CGI運行具有root權限的腳本。
假設腳本名稱爲hello
,我從CGI運行它,如system(「pathToTheFile/hello」)。
現在我想以root身份運行這個hello文件;有人可以幫助我嗎?
我必須開發一個用CGI編寫的網站。如何在Linux中使用root權限運行腳本
我想知道如何從CGI運行具有root權限的腳本。
假設腳本名稱爲hello
,我從CGI運行它,如system(「pathToTheFile/hello」)。
現在我想以root身份運行這個hello文件;有人可以幫助我嗎?
正常的方法是將用戶擁有的可執行文件歸您所有,然後設置SUID位。
使用sudo
的方法通常需要用戶輸入密碼(這裏有解決方法,但它們非常複雜)。
我想我不需要提到設置SUID位是非常危險的事情,是的?如果有任何其他方式來做你想要的,你應該使用它。你可能要考慮
一件事是提出這個問題不是你需要的解決方案方面,而且在你要解決的問題是什麼。以root身份運行的是解決方案,並不一定是好的。 Post 什麼你試圖實現,而不是如何,,我們可以幫助你在一個非常危險的方式。
通常最安全的方法是使用類似UNIX的操作系統的功能setuid。如果設置了hello
程序的所有者是root
,然後設置setuid位:
chmod u+s hello
那麼無論誰執行的程序,它會執行爲根。這適用於本機可執行文件,但不適用於解釋腳本。如果「你好」必須是腳本,那麼這對你不起作用。
現在,我不得不說,一般來說,setuid root程序並不是一個好主意。通常,您可以創建一個特殊用戶來擁有該腳本,併爲該用戶提供一些所需的有限權限,然後將腳本setuid設置爲該用戶。
不,這不適用於腳本。只有二進制文件。此外,*你*無法設置,這將是一個很大的安全漏洞。現有的root帳戶必須設置該帳戶。但是,這可能是你。 – Keith 2011-05-25 03:41:38
@Keith,你應該有一個腳本,它運行經過特殊修改的setuid shell(一個「真實」可執行文件),並傳遞另一個腳本作爲參數。這會解決這個問題。答案是肯定的,但大多數問題都有解決方法。 – paxdiablo 2011-05-25 03:44:32
@pax,true,但你仍然需要在某處設置一些二進制文件。這篇文章沒有提到額外的步驟,所以我想我會的。另外,我不同意這是最安全的方式,因爲「無論誰執行」它都會獲得更高的權限。 'sudo'更安全,因爲您可以定義對誰可以執行的更細粒度的控制(例如,僅限Web服務器的UID)。 – Keith 2011-05-25 03:50:19
一個更安全的做法是將網頁中的程序執行從網頁中斷開連接。相反,使用Unix本地套接字,命名管道或排隊作業目錄。
該目錄可能是最容易處理的。設置您的網頁可以寫入文件的目錄。當你的頁面需要完成時,寫一個描述作業的文件。然後你有一個以root身份運行的程序,等待新的工作。如果需要快速響應,它可以連續運行,也可以使用crontab條目每分鐘或每幾分鐘運行一次。
有什麼好的理由呢? – 2011-05-25 03:36:11
現在我必須使用腳本在我的系統中編寫一個文件,但我需要root權限來編寫文件。 – kevin 2011-05-25 03:37:31
順便說一句,你應該考慮允許網頁獲得root權限的分歧。 – 2011-05-25 03:39:26