【发布时间】:2010-12-30 12:44:46
【问题描述】:
是否可以使用 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。
(我很惊讶这还不是很明显;这似乎是一件很平常的事情,而且似乎不是一个安全漏洞,允许在进程中升级而不是升级一个新的过程。)
【问题讨论】:
-
如果 sudo 适合你,那么 su 呢?
-
AFAIK,su 会给我一个子外壳来工作。这对于交互式使用来说很好。但我想提升当前运行进程的权限,而不是shell子进程。
-
这不是一个真正的答案,但我喜欢将 OpenSSH 源代码视为权限操作和分离的模型。但是,与您的 cae 不同,我认为 ssh 守护程序以提升的特权开始,然后选择性地分叉特权较低的孩子。
-
我认为要做的主要选择是您是想在程序内部还是外部处理这个问题。在第一种情况下,您应该考虑像 PolicyKit 这样的 API,而在第二种情况下,您应该将问题转移给超级用户并考虑使用 sudo 规则或其他类型的操作系统工具。