python脚本中的身份验证以root用户身份运行

问题描述:

我正在Python中的系统级别的Linux中执行一个项目。 因此,我想知道如果我以普通用户身份运行我的代码,并且如果我正在访问系统文件,那么它应该拥有它的根权限, 那么我如何提示输入root密码并运行其他代码为超级用户。 我想知道,如何以超级用户的身份运行python脚本并提示密码提示。python脚本中的身份验证以root用户身份运行

任何帮助将不胜感激。 预先感谢您..使用sudo

其他的事情你可以做是有你的脚本自动调用sudo的,如果它不是root执行:

import os 
import sys 

euid = os.geteuid() 
if euid != 0: 
    print "Script not started as root. Running sudo.." 
    args = ['sudo', sys.executable] + sys.argv + [os.environ] 
    # the next line replaces the currently-running process with the sudo 
    os.execlpe('sudo', *args) 

print 'Running. Your euid is', euid 

输出:

Script not started as root. Running sudo.. 
[sudo] password for bob: 
Running. Your euid is 0 

使用sudo -k进行测试,以清除sudo时间戳,因此下次脚本运行时将需要再次输入密码。

+0

如果应用程序具有GUI(我假设这么多,因为问题用pygtk标记),gksudo应该可以用来代替。但是,对于支持它的操作系统来说,更好的选择是使用[PolicyKit](http://en.wikipedia.org/wiki/PolicyKit)。 – 2011-03-07 17:51:25

+1

我更喜欢这种海拔战术的原始异常。 – 2011-03-07 19:38:45

+1

我认为这种技术在正确的情况下是可以的。如果他创建的基于GUI的安装程序需要root权限才能执行某些操作,则可以启动相应的对话框以通知用户并获得root权限。以Mac OS为例,其中软件安装主要由GUI驱动,大多数用户可能不知道CLI存在。在这种情况下提出例外不是一种选择。 – samplebias 2011-03-07 20:03:15

import os 
euid = os.geteuid() 
if euid != 0: 
    raise EnvironmentError, "need to be root" 
    exit() 

这不会在脚本中提示,而宁愿迫使用户重新运行或根

+1

我更喜欢这个答案。 – 2011-03-07 19:38:32

+0

好吧,我知道了,但是如果我想认证用户以超级用户身份运行,我该怎么办呢?我不想给他SU权限,只能给它提供密码。它可以使用上面的代码提示输入密码,但是如何我可以识别给定的密码是否正确,如果正确,我如何才能以SU作为我的进一步代码。请考虑到这一点,我想在运行时为普通用户做到这一点。 – 2011-03-08 14:27:46

+0

让sudo/su处理gettign密码,检查EUID是否为0,然后你就会知道它的工作。 @samplebias演示了如何在继续执行相同程序时执行此操作,我的答案强制用户以root身份重新调用脚本 – loosecannon 2011-03-09 17:10:11