我如何申请当前stream程?

是否有可能使用sudo前端(如gksudo)来提升当前进程的权限? 我知道我可以做到以下几点:

sudo cat /etc/passwd- 

但我有兴趣这样做:

 sudo-become-root # magic function/command cat /etc/passwd- 

我正在用Python编写。 我的用例是,我有一个程序作为用户运行,但可能会遇到文件读/写是根拥有的。 我想提示input密码,获得root权限,执行我所需要的操作,然后再select性地删除权限。

我知道我可以将pipe理逻辑和非pipe理逻辑分开到单独的进程中,然后以root身份运行pipe理进程(通过一些通信 – policykit / dbus在这里很合适)。 但是我希望有一个更简单的(尽pipe承认更危险)​​的解决scheme。

我想通过sudo运行Solaris的ppriv,然后修改当前进程的权限。 这似乎是一个hacky,但可行的往返。 但据我所知,linux不提供ppriv。

(我很惊讶这已经不是很明显了,这似乎是一个非常罕见的事情,似乎并不是一个安全漏洞,允许在新stream程升级的过程中升级。)

Solutions Collecting From Web of "我如何申请当前stream程?"

不幸的是,我不知道有什么办法可以干净地做你想做的事情。 我认为你最好的选择是将程序设置为setuid(或者在sudo下运行),然后执行你的肮脏的工作并删除权限,或者从一个进程中fork()和删除权限,并保持另一个进程的根源。

你正在寻找的是setuid(2)/ setreuid(2)/ setregid(2)/ setgroups(2)调用,但它们都是硬连线的,不允许你在调用中获得特权。 就我所知,你只能用它们“放弃”特权。

能力有一个“成为根”的选择。 你可能想看看作者在那里做了什么。

如果您想在程序内部干净地处理管理权限,则可能需要使用PolicyKit而不是sudo,具体取决于您计划运行程序的操作系统。

对于Python的PolicyKit,请参阅python-slip 。

否则,有两种方法可以调用sudo来成为root用户:

 sudo -s 

会让你根源并保持你当前的环境(相当于sudo su

 sudo -i 

会让你根源,也给你根源的环境(相当于sudo su -

处理这个问题的另一种方法是考虑你有你需要的权利,并让程序的用户选择如何赋予你程序的权限(使用sudo / setuid / unix groups /其他)。

另请参阅serverFault上的同一主题上的这个问题 。

你的魔法功能/命令可能是

 sudo su 
 echo 'echo tee; echo hee'|sudo -s 

输出是:

 tee hee 

我不喜欢能够以较低特权进程的root身份运行任意命令的想法。 但是,既然你需要它,想到的一个想法就是保留一个setuid 受限制的shell ,它只能执行你感兴趣的命令。 然后,您可以使用subprocess.Popen函数来运行您的命令使用这个限制的外壳,将提升特权运行它。

我想知道这是否会工作:

将另一个组添加到您的系统中,将脚本安装为根程序,并让sudoers文件包含一行允许脚本由该组执行的行。 最后将该组添加到需要运行该脚本的帐户列表中。

然后脚本只能在启动时提供帐号密码后才能由root或任何拥有该组中特殊组的帐号运行。

有关其他选项,请参阅Sudo手册 。

您想要使用PAM进行身份验证。 这里有一个例子 。