2013-04-10 52 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