2011-03-07 184 views
16

我正在Python中的系統級別的Linux中執行一個項目。 因此,我想知道如果我以普通用戶身份運行我的代碼,並且如果我正在訪問系統文件,那麼它應該擁有它的根權限, 那麼我如何提示輸入root密碼並運行其他代碼爲超級用戶。 我想知道,如何以超級用戶的身份運行python腳本並提示密碼提示。python腳本中的身份驗證以root用戶身份運行

任何幫助將不勝感激。 預先感謝您..使用sudo

回答

26

其他的事情你可以做是有你的腳本自動調用sudo的,如果它不是root執行:

import os 
import sys 

euid = os.geteuid() 
if euid != 0: 
    print "Script not started as root. Running sudo.." 
    args = ['sudo', sys.executable] + sys.argv + [os.environ] 
    # the next line replaces the currently-running process with the sudo 
    os.execlpe('sudo', *args) 

print 'Running. Your euid is', euid 

輸出:

Script not started as root. Running sudo.. 
[sudo] password for bob: 
Running. Your euid is 0 

使用sudo -k進行測試,以清除sudo時間戳,因此下次腳本運行時將需要再次輸入密碼。

+0

如果應用程序具有GUI(我假設這麼多,因爲問題用pygtk標記),gksudo應該可以用來代替。但是,對於支持它的操作系統來說,更好的選擇是使用[PolicyKit](http://en.wikipedia.org/wiki/PolicyKit)。 – 2011-03-07 17:51:25

+1

我更喜歡這種海拔戰術的原始異常。 – 2011-03-07 19:38:45

+1

我認爲這種技術在正確的情況下是可以的。如果他創建的基於GUI的安裝程序需要root權限才能執行某些操作,則可以啓動相應的對話框以通知用戶並獲得root權限。以Mac OS爲例,其中軟件安裝主要由GUI驅動,大多數用戶可能不知道CLI存在。在這種情況下提出例外不是一種選擇。 – samplebias 2011-03-07 20:03:15

5
import os 
euid = os.geteuid() 
if euid != 0: 
    raise EnvironmentError, "need to be root" 
    exit() 

這不會在腳本中提示,而寧願迫使用戶重新運行或根

+1

我更喜歡這個答案。 – 2011-03-07 19:38:32

+0

好吧,我知道了,但是如果我想認證用戶以超級用戶身份運行,我該怎麼辦呢?我不想給他SU權限,只能給它提供密碼。它可以使用上面的代碼提示輸入密碼,但是如何我可以識別給定的密碼是否正確,如果正確,我如何才能以SU作爲我的進一步代碼。請考慮到這一點,我想在運行時爲普通用戶做到這一點。 – 2011-03-08 14:27:46

+0

讓sudo/su處理gettign密碼,檢查EUID是否爲0,然後你就會知道它的工作。 @samplebias演示瞭如何在繼續執行相同程序時執行此操作,我的答案強制用戶以root身份重新調用腳本 – loosecannon 2011-03-09 17:10:11