在Python脚本中切换到sudo用户
我遇到了一个问题。我正在写一个软件,这个软件需要在用户处于sudo模式下执行某个操作。直接运行'sudo python filename.py'并不是一个选项,这让我想问一下,有没有办法在Python脚本执行到一半的时候切换到sudo模式。安全性不是问题,因为用户会知道sudo密码。程序应该按以下方式运行,以说明这个问题:
- 程序以普通用户身份运行
- ...... 执行操作
- 用户输入sudo密码
- 用户切换到sudo模式
- 运行需要sudo权限的子程序
- 在触发事件(子程序结束)后,用户再次变回普通用户
- ...... 执行操作
我的问题出在第3步,任何建议或框架都将非常有帮助。
谢谢
克里斯
9 个回答
10
别试着让自己变成超级用户(sudo),只要检查一下你是不是,如果不是就报个错。
class NotSudo(Exception):
pass
if os.getuid() != 0:
raise NotSudo("This program is not run as sudo or elevated this it will not work")
19
尽量让程序在高权限下运行的部分少一些是更好的做法。你可以通过 subprocess.call()
函数来运行只需要更高权限的小部分代码,比如:
import subprocess
returncode = subprocess.call(["/usr/bin/sudo", "/usr/bin/id"])
2
使用Tcl和Expect,再加上子进程来提升你的权限。简单来说,就是这样:
sudo.tcl
spawn sudo
expect {
"Password:" {
send "password"
}
}
sudo.py
import subprocess
subprocess.call(['tclsh', 'sudo.tcl'])
然后运行sudo.py。