在Python脚本中切换到sudo用户

29 投票
9 回答
59485 浏览
提问于 2025-04-16 12:59

我遇到了一个问题。我正在写一个软件,这个软件需要在用户处于sudo模式下执行某个操作。直接运行'sudo python filename.py'并不是一个选项,这让我想问一下,有没有办法在Python脚本执行到一半的时候切换到sudo模式。安全性不是问题,因为用户会知道sudo密码。程序应该按以下方式运行,以说明这个问题:

  1. 程序以普通用户身份运行
  2. ...... 执行操作
  3. 用户输入sudo密码
  4. 用户切换到sudo模式
  5. 运行需要sudo权限的子程序
  6. 在触发事件(子程序结束)后,用户再次变回普通用户
  7. ...... 执行操作

我的问题出在第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。

撰写回答