Kra*_*n18 24 python security sudo
我有个问题.我正在编写一个软件,它需要执行一个操作,要求用户处于sudo模式.运行'sudo python filename.py'不是一个选项,这引出了我的问题.有没有办法在python脚本的一半更改为sudo,安全性不是问题,因为用户将通过以下方式知道程序应该运行的sudo密码来说明问题
我的问题在于第3步,你可以建议的任何指针或框架都会有很大的帮助.
干杯
克里斯
nea*_*mcb 18
最好使用提升的权限尽可能少地运行程序.您可以通过该subprocess.call()功能运行需要更多权限的小部分,例如
import subprocess
returncode = subprocess.call(["/usr/bin/sudo", "/usr/bin/id"])
Run Code Online (Sandbox Code Playgroud)
不要尝试让自己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")
Run Code Online (Sandbox Code Playgroud)
小智 5
我最近在制作系统安装脚本时处理了这个问题.要切换到超级用户权限,我使用subprocess.call()和'sudo':
#!/usr/bin/python
import subprocess
import shlex
import getpass
print "This script was called by: " + getpass.getuser()
print "Now do something as 'root'..."
subprocess.call(shlex.split('sudo id -nu'))
print "Now switch back to the calling user: " + getpass.getuser()
Run Code Online (Sandbox Code Playgroud)
请注意,您需要使用shlex.split()命令使其可用subprocess.call().如果要使用命令的输出,可以使用subprocess.check_output().还有一个名为'sh'的软件包(http://amoffat.github.com/sh/),您可以将其用于此目的.
使用Tcl和Expect,再加上subprocess来提升自己。所以基本上是这样的:
须藤.tcl
spawn sudo
expect {
"Password:" {
send "password"
}
}
Run Code Online (Sandbox Code Playgroud)
须藤.py
import subprocess
subprocess.call(['tclsh', 'sudo.tcl'])
Run Code Online (Sandbox Code Playgroud)
然后运行 sudo.py。