如何对当前进程进行sudo处理?


问题内容

是否可以使用sudo前端(例如gksudo)来提升 当前 进程的特权?我知道我可以执行以下操作:

sudo cat /etc/passwd-

但我对此感兴趣:

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

我正在用Python编写。我的用例是,我有一个以用户身份运行的程序,但可能会遇到以root身份拥有的要读取/写入的文件。我想提示输入密码,获得root特权,执行我需要的操作,然后有选择地再次放弃特权。

我知道我可以将管理逻辑和非管理逻辑分离为单独的进程,然后仅以root身份运行管理进程(进行一些通信-Policykit /
dbus非常适合这里)。但是我希望有一个更简单(尽管风险更大)的解决方案。

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

(我很惊讶,这不是明摆着了;它似乎是想要一个不常见的事情,并不 似乎 是一个安全漏洞,允许在工艺升级上一个新的进程的升级。)


问题答案:

不幸的是,我不知道一种干净地做您想做的事情的方法。我认为您最好的选择是使程序setuid(或在sudo下运行),然后执行您的肮脏工作并删除权限,或者从一个进程中删除fork()并删除权限,并保留另一个进程来进行根工作。

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