这是一个相当具体的问题。在我的计划中,我使用一个特定的文件用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
没有人有一个线索问题是什么?
感谢,
萨拉
我是'bash'编程的业余爱好者,所以这个建议可能完全脱离基础,但是最近我也遇到了一个脚本问题,它必须以编程方式使用'sudo'。解决的办法是在我的sudoers文件中添加'Defaults!requiretty' - 通常'sudo'只有在从终端调用时才起作用,但是这行也使得它没有一个工作。 – 2013-04-10 09:33:22
感谢这个有趣的评论。但是,我尝试了,但没有帮助。其实我从终端运行我的程序(我称之为命令:uxterm -e python ...),所以我认为问题在别处 – 2013-04-10 10:47:36