2013-04-10 48 views
0

這是一個相當具體的問題。在我的計劃中,我使用一個特定的文件用sudo的命令運行,這就是我稱之爲CHOWN.sh:Sudo在python程序中調用不起作用

#!/bin/bash 
if [ "$1" = "usb"] #first argument is usb 
then 
    chown eng:eng /mnt/usb 
else 
    ... 

當我的命令調用/path/to/the/file/CHOWN.sh參數「usb」,它改變了我掛載爲/ mnt/usb的usb-key的所有權。但是,這個文件應該以root身份運行。這就是爲什麼我進入這一行的/ etc/sudoers文件:

%hmis ALL=NOPASSWD: /path/to/the/file/CHOWN.sh 

這樣一來,我可以用「命令」命令來運行它。

比方說,到/ mnt/USB的所有權是根:根:

$ ls -als /mnt/usb 
4 drwxr-xr-x 2 root root 4096 Feb 13 10:50 . 
4 drwxr-xr-x 4 root root 4096 Mar 15 2012 .. 

當我運行使用sudo命令我得到:

$ whoami 
user 
$ sudo /path/to/the/file/CHOWN.sh usb 
$ ls -als /mnt/usb 
4 drwxr-xr-x 2 eng eng 4096 Feb 13 10:50 . 
4 drwxr-xr-x 4 root root 4096 Mar 15 2012 . 

,從而有望命令的工作。請注意,用戶'用戶'是組'hmis'的一部分。 然而,當我使用Python文件中這個命令,它不會工作:

#!/usr/bin/python 
... 
subprocess.call(["whoami"]) 
subprocess.call(["sudo","/path/to/the/file/CHOWN.sh","usb"]) 
... 

在程序的標準輸出,標準錯誤,我得到:

user 
chown: changing ownership of '/mnt/usb' : Operation not permitted 

沒有人有一個線索問題是什麼?

感謝,

薩拉

+1

我是'bash'編程的業餘愛好者,所以這個建議可能完全脫離基礎,但是最近我也遇到了一個腳本問題,它必須以編程方式使用'sudo'。解決的辦法是在我的sudoers文件中添加'Defaults!requiretty' - 通常'sudo'只有在從終端調用時才起作用,但是這行也使得它沒有一個工作。 – 2013-04-10 09:33:22

+0

感謝這個有趣的評論。但是,我嘗試了,但沒有幫助。其實我從終端運行我的程序(我稱之爲命令:uxterm -e python ...),所以我認爲問題在別處 – 2013-04-10 10:47:36

回答

0

你需要給你的Python腳本更多的權限。

在控制檯,用命令sudo myProgram.py打開它,那麼它應該工作。

+0

感謝您的回答。但是,我不想給我的整個程序根權限。我只是希望它能夠以root身份運行一些特定的命令。 – 2013-04-10 10:48:59