【问题标题】:Running commands from within python that need root access从需要 root 访问权限的 python 中运行命令
【发布时间】:2011-06-03 15:43:58
【问题描述】:

我最近一直在玩子进程。随着我做的越来越多;我发现自己需要 root 访问权限。我想知道是否有一种简单的方法可以为需要使用子进程模块的命令输入 root 密码。因此,当我被提示输入密码时,我的脚本并提供它并运行命令。我知道这是不好的做法,因为代码将在沙盒中运行并与系统的其余部分分开;我也不想以 root 身份运行。

如果可能的话,我真的很感激这个小例子。我知道你可以用expect做到这一点,但我正在寻找更以python为中心的东西。我知道pexpect 存在,但对于这个简单的任务来说它有点矫枉过正。

谢谢。

【问题讨论】:

  • 我不太明白“所以当我被提示输入密码我的脚本并提供它并运行命令时”这句话。您希望用户输入 root 密码,还是要在代码中硬编码 root 密码? (希望不是后者!)
  • @Sven 我想两者都做;我知道后者不好。我只是想知道这是否可能。
  • 如果可能的话,我们将不胜感激您所尝试的一个小例子。
  • 对于第二个选项,您最终会遇到与此处讨论的问题相同的问题:stackoverflow.com/questions/4144134/…

标签: python subprocess sudo


【解决方案1】:

对于运行 Python 程序的用户来说,最好利用 sudo。您可以指定无需密码即可从 sudo 运行的特定命令和参数。这是一个例子:

有很多方法,但我更喜欢将命令集分配给组的方法。因此,假设我们要创建一个组以允许人们以root 运行tcpdump。所以让我们打电话给那个组tcpdumpers

首先,您将创建一个名为 tcpdumpers 的组。然后修改/etc/sudoers(使用visudo命令):

# 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 

您可以从那里轻松地以subprocess 运行此命令。

这消除了将 root 密码硬编码到您的程序代码中的需要,并且可以精细控制谁可以在您的系统上以 root 权限运行什么。

【讨论】:

  • 我最近不得不为 splunk 警报脚本做类似的事情。 sudo 真的是为此而生的。
  • 请注意,编辑 sudoers 文件实际上应该使用 visudo 完成,而不是任何其他任意编辑器 - 否则可能会导致类似 unix.stackexchange.com/questions/138237/… 的事情
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-09-17
  • 1970-01-01
  • 1970-01-01
  • 2020-10-02
  • 2012-05-03
  • 2013-07-01
  • 2016-12-04
相关资源
最近更新 更多