pkexec
Debian
不同于runuser
其他,它默认并未安装。
到目前为止我一直在使用,pkexec
但发现还有runuser
,并且 sincerunuser
似乎更高级(查看man
条目中的选项,我不完全理解并且还没有使用该命令)所以这让我思考安装pkexec
since是否runuser
已经存在有什么好处。
runuser
和相比 有哪些优缺点pkexec
?
pkexec
Debian
不同于runuser
其他,它默认并未安装。
到目前为止我一直在使用,pkexec
但发现还有runuser
,并且 sincerunuser
似乎更高级(查看man
条目中的选项,我不完全理解并且还没有使用该命令)所以这让我思考安装pkexec
since是否runuser
已经存在有什么好处。
runuser
和相比 有哪些优缺点pkexec
?
这两个工具非常不同,以至于在大多数情况下它们实际上不能互换,因此对它们进行“vs”比较几乎没有意义。(比较 pkexec 与 sudo、su 与 runuser 或 pkexec 与 run0 更有意义。)
从代码角度来看,runuser 实际上是 util-linux 的 su 的副本,只是略作修改,使其更适合用于通常以 root 身份运行但需要以其他用户身份调用某些特定命令的脚本。(例如,runuser 使用与 su 不同的一组 PAM 配置,使其不受 systemd-logind 之类的限制,这些限制通常是交互式 su 所需要的,但对于脚本式 su 来说却极其适得其反。)
这两个命令之间最明显的区别是,pkexec 通常以“setuid root”的方式安装(就像 sudo 或 su 一样),这意味着它可以在从普通用户帐户运行时运行 - 但 runuser 通常不以这种方式安装,并且事实上,当由非 root 用户运行时,它特别拒绝工作。
这实际上将 runuser 与 pkexec 置于对立面,因为后者几乎专门用于将权限提升到 root,而 runuser 只能从root 降低权限。
类似地,pkexec 几乎专门设计用于交互式桌面使用(PolicyKit 提示用户进行管理员身份验证),而 runuser 专为 root 批量使用而设计(可免于此类身份验证),因此甚至没有提示此类身份验证的能力。
它们之间唯一的重叠之处在于,root 可以调用
pkexec --user XYZ
哪个来切换到该用户而不进行 PolicyKit 检查(尽管仍联系 polkitd),在这种情况下它几乎没有比 runuser 有什么优势。