在Python中运行需要root权限的命令

6 投票
1 回答
6766 浏览
提问于 2025-04-16 18:54

最近我在玩一个叫做subprocess的东西。随着我使用得越来越多,我发现自己需要管理员权限。于是我在想,有没有简单的方法可以在需要管理员密码的命令中,使用subprocess模块自动输入密码?也就是说,当我的脚本被要求输入密码时,它能自动提供密码并执行命令。我知道这样做不太好,但我运行的代码是在一个隔离的环境中,不会影响到系统的其他部分;而且我也不想一直以管理员身份运行。

如果能给个简单的例子就太好了。我知道可以用expect来实现这个功能,但我想找一个更适合Python的方式。我知道有个叫pexpect的库,但对于这个简单的任务来说,它有点复杂。

谢谢!

1 个回答

10

最好是使用sudo来让运行Python程序的用户执行特定的命令。你可以指定一些命令和参数,这样在使用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权限运行哪些命令。

撰写回答