我最近一直在玩子进程。正如我做的越来越多;我发现自己需要root访问权限。我想知道是否有一种简单的方法来输入需要子进程模块的命令的root密码。所以当我提示输入密码我的脚本并提供它并运行命令。我知道这是一个不好的做法,代码将运行的地方是沙箱并与系统的其余部分分开;我也不想以root身份运行。
如果可能,我会非常感谢小例子。我知道你可以期待,但我正在寻找更多以python为中心的东西。我知道pexpect
存在但这对于这个简单的任务来说有点过分。
感谢。
答案 0 :(得分:9)
最好将sudo用于运行Python程序的用户。您可以指定可以从sudo运行的特定命令和参数,而无需密码。这是一个例子:
有很多方法,但我更喜欢将命令集分配给组的方法。因此,假设我们要创建一个组,以允许人们以root身份运行'tcpdump'。所以我们称之为tcpdumpers
组。
首先,您将创建一个名为tcpdumpers
的组。然后修改/etc/sudoers
:
# 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
从那里你可以轻松地将此命令作为子进程运行。
这消除了将root密码硬编码到程序代码中的需要,并且可以精确控制谁可以在系统上以root权限运行。