2011-06-03 98 views
5

我一直在玩最近的子進程。隨着我越來越多,我發現自己需要root權限。我想知道是否有一種簡單的方法來輸入需要使用子進程模塊的命令的root密碼。所以當我提示輸入密碼我的腳本並提供它並運行命令。我知道這是不好的做法,代碼運行的地方是沙箱,並與系統其餘部分分開;我也不想以root身份運行。從python內部運行需要root權限的命令

如果可能的話,我真的很感激小例子。我知道你可以預期做到這一點,但我正在尋找更多以python爲中心的東西。我知道pexpect exsists但它對這個簡單的任務有點矯枉過正。

謝謝。

+0

我真的不明白這句話「所以當我被提示輸入密碼時,我的腳本就提供並運行命令。」你想讓用戶輸入root密碼,還是要在代碼中對root密碼進行硬編碼? (我希望這不是後者!) – 2011-06-03 15:47:46

+0

@Sven我想做的兩個;我知道後者不好。我只是想知道這是否可能。 – myusuf3 2011-06-03 15:49:18

+0

如果可能,我們將很感激您嘗試過的一個小例子。 – 2011-06-03 15:50:57

回答

8

對於運行Python程序的用戶來說,最好將sudo用作槓桿。您可以指定特定的命令和參數,可以從sudo運行而不需要密碼。這裏是一個例子:

有很多方法,但我更喜歡將命令集分配給組。假設我們想創建一個組,允許用戶以root身份運行'tcpdump'。所以我們稱這個組爲tcpdumpers

首先,您將創建一個名爲tcpdumpers的組。然後修改/etc/sudoers

# Command alias for tcpdump 
Cmnd_Alias  TCPDUMP = /usr/sbin/tcpdump 

# This is the group that is allowed to run tcpdump as root with no password prompt 
%tcpdumpers  ALL=(ALL) NOPASSWD: TCPDUMP 

現在加入tcpdumpers組的任何用戶將能夠像這樣運行的tcpdump:

% sudo tcpdump 

從那裏,你可以很容易地運行這個命令的子進程。

這消除了將root密碼硬編碼到程序代碼中的必要,它可以精確控制誰可以在您的系統上以root權限運行。

+0

我最近不得不爲splunk警報腳本做類似的事情。 sudo真的是這個。 – Ori 2011-06-03 16:01:21

+1

請注意,編輯sudoers文件應該用'visudo'完成,而不是任何其他任意編輯器 - 否則它可能會導致類似http://unix.stackexchange.com/questions/138237/i-changed-etc- sudoers文件,和現在-I-着運行-AS-須藤 – godlygeek 2014-06-20 11:46:28