在Python中运行需要root权限的命令
最近我在玩一个叫做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权限运行哪些命令。