这个问题真的没有一个正确的答案。这是安全性和可用性之间的权衡。
每次使用 pkexec 运行命令(为了用户体验,我有点想避免);
如果目标受众没有“CLIphobia”,sudo如果“每次”在 15 分钟内,这里可能会非常棒。
但从安全的角度来看,我建议使用 pkexec。我认为它可以被信任,因为它预先安装在发行版中,不像一些快速破解的 setuid 包装器或守护程序。
由于指标在 python 中,我可以有一个用 C 编写的 setuid 位设置的二进制文件。但是,有人告诉我这种方法不受欢迎;
我听说过setuid 包装器的唯一问题是,如果它们被利用,它们可以用木马覆盖自己,但这与 setuid-to-/root/ 二进制文件无关,因为以 root 身份运行的进程上的任何利用都意味着你反正搞砸了。
我遇到的唯一问题也不适用于 setuid-to-/root/ 二进制文件,这是因为我不了解所有的 unix 用户 ID,忘记设置真实用户 ID、保存的用户 ID 及其组 ID 等价物,这意味着 /drops/ 特权的程序仍然可以重新获得它们。
不赞成 setuid 包装器可能还有其他原因,但我还没有听说过。如果没有其他人可以找到不赞成 setuid 包装器的原因,那么 setuid 包装器将是一个非常好的选择。
启动一个“代理”,它将作为 root 运行并且只执行一个特定的任务,指示器将与那个“代理”通信
如果您创建一个守护进程来执行该任务,请使其尽可能简单,并确保未经授权的用户无法与其通信。
我可以想到两种选择:(1)使用授权客户端知道的密码,守护进程知道,而未经授权的客户端不知道。密码必须存储在 chmod 为 400 的文件中并由 root 拥有。
(2) 在套接字上使用 unix 权限,以防止任何其他本地用户甚至尝试(ab)使用守护程序。
https://stackoverflow.com/questions/20171747/how-to-create-unix-domain-socket-with-a-specific-permissions
选项二在 UX 中被认为不太安全且更加不一致。用户可能不明白为什么当他们以不同的用户身份登录时它不会工作,当它发生时真的很糟糕。