2011-05-25 63 views
1

我必須開發一個用CGI編寫的網站。如何在Linux中使用root權限運行腳本

我想知道如何從CGI運行具有root權限的腳本。

假設腳本名稱爲hello,我從CGI運行它,如system(「pathToTheFile/hello」)

現在我想以root身份運行這個hello文件;有人可以幫助我嗎?

+2

有什麼好的理由呢? – 2011-05-25 03:36:11

+0

現在我必須使用腳本在我的系統中編寫一個文件,但我需要root權限來編寫文件。 – kevin 2011-05-25 03:37:31

+4

順便說一句,你應該考慮允許網頁獲得root權限的分歧。 – 2011-05-25 03:39:26

回答

1

正常的方法是將用戶擁有的可執行文件歸您所有,然後設置SUID位。

使用sudo的方法通常需要用戶輸入密碼(這裏有解決方法,但它們非常複雜)。

我想我不需要提到設置SUID位是非常危險的事情,是的?如果有任何其他方式來做你想要的,你應該使用它。你可能要考慮


一件事是提出這個問題不是你需要的解決方案方面,而且在你要解決的問題是什麼。以root身份運行的是解決方案,並不一定是好的。 Post 什麼你試圖實現,而不是如何,,我們可以幫助你在一個非常危險的方式。

2

通常最安全的方法是使用類似UNIX的操作系統的功能setuid。如果設置了hello程序的所有者是root,然後設置setuid位:

chmod u+s hello 

那麼無論誰執行的程序,它會執行爲根。這適用於本機可執行文件,但不適用於解釋腳本。如果「你好」必須是腳本,那麼這對你不起作用。

現在,我不得不說,一般來說,setuid root程序並不是一個好主意。通常,您可以創建一個特殊用戶來擁有該腳本,併爲該用戶提供一些所需的有限權限,然後將腳本setuid設置爲該用戶。

+2

不,這不適用於腳本。只有二​​進制文件。此外,*你*無法設置,這將是一個很大的安全漏洞。現有的root帳戶必須設置該帳戶。但是,這可能是你。 – Keith 2011-05-25 03:41:38

+0

@Keith,你應該有一個腳本,它運行經過特殊修改的setuid shell(一個「真實」可執行文件),並傳遞另一個腳本作爲參數。這會解決這個問題。答案是肯定的,但大多數問題都有解決方法。 – paxdiablo 2011-05-25 03:44:32

+0

@pax,true,但你仍然需要在某處設置一些二進制文件。這篇文章沒有提到額外的步驟,所以我想我會的。另外,我不同意這是最安全的方式,因爲「無論誰執行」它都會獲得更高的權限。 'sudo'更安全,因爲您可以定義對誰可以執行的更細粒度的控制(例如,僅限Web服務器的UID)。 – Keith 2011-05-25 03:50:19

1

一個更安全的做法是將網頁中的程序執行從網頁中斷開連接。相反,使用Unix本地套接字,命名管道或排隊作業目錄。

該目錄可能是最容易處理的。設置您的網頁可以寫入文件的目錄。當你的頁面需要完成時,寫一個描述作業的文件。然後你有一個以root身份運行的程序,等待新的工作。如果需要快速響應,它可以連續運行,也可以使用crontab條目每分鐘或每幾分鐘運行一次。

相關問題