【问题标题】:Sudo invoked in a python program doesn't work在 python 程序中调用的 Sudo 不起作用
【发布时间】:2013-04-10 09:25:13
【问题描述】:

这是一个非常具体的问题。在我的程序中,我使用一个特定的文件来运行一个 sudo 命令,我称之为 CHOWN.sh :

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

当我使用参数“usb”调用命令 /path/to/the/file/CHOWN.sh 时,它会更改我的 usb-key 的所有权,我将其挂载为 /mnt/usb。但是,此文件应以 root 身份运行。这就是我在 /etc/sudoers 中输入这一行的原因:

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

这样,我可以使用“sudo”命令运行它。

假设 /mnt/usb 的所有权是 root:root:

$ 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 .

所以命令按预期工作。请注意,用户 'user' 是组 'hmis' 的一部分。 但是,当我在 python 文件中使用此命令时,它将不起作用:

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

在程序的stdout-stderr中,我得到:

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

有没有人知道问题出在哪里?

谢谢,

莎拉

【问题讨论】:

  • 我是bash 编程的业余爱好者,所以这个建议可能完全不合时宜,但最近我也遇到了一个脚本问题,它必须以编程方式使用sudo。解决方案是将Defaults !requiretty 添加到我的sudoers 文件中——通常sudo 仅在从终端调用时才有效,但这一行使其在没有终端的情况下也可以工作。
  • 感谢这个有趣的评论。但是,我尝试了,但没有帮助。实际上我是从终端运行我的程序(我调用命令:uxterm -e python ...),所以我认为问题出在其他地方

标签: python bash chown sudoers


【解决方案1】:

你需要给你的python脚本更多的权限。

在控制台,使用命令sudo myProgram.py打开它,然后它应该可以工作了。

【讨论】:

  • 感谢您的回答。但是,我不想给我的整个程序 root 访问权限。我只是希望它能够以 root 身份运行一些特定的命令。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-12
  • 1970-01-01
  • 2014-10-14
  • 1970-01-01
  • 2013-12-23
  • 1970-01-01
相关资源
最近更新 更多