以提升的权限运行函数

问题描述 投票:0回答:1

我想以普通用户身份启动我的 Rust 应用程序,即 ./myapp。 当用户启用某些功能时,我想以 root 身份运行 fn (我想将自签名证书添加到系统证书存储中)。 我的目标是尽可能避免以 root 身份启动我的应用程序

我想我需要启动一个子进程,对吗? 我也必须使用 nix crate 吗?将uid设置为0?

谢谢

ssl rust process ssl-certificate root
1个回答
0
投票

一般来说,如果没有某些外部工具的帮助,就不可能在同一进程中获得权限。从安全角度来看,这很有用,因为这意味着一旦进程永久删除了特权,它就不必担心利用漏洞导致其重新获得特权的可能性。

执行此操作的通常方法是实现某种 setuid-root 帮助程序进程。该进程只能由特殊组执行或者可以执行特殊检查以限制访问,然后可以执行安装证书的特权操作。然而,这需要一个单独的二进制文件。

您还可以以 root 或 setuid-root 身份启动应用程序,但随后立即使用

seteuid
setegid
将权限授予非特权用户,重新获得权限(再次使用
seteuid
setegid
)以执行特权操作,最后使用
setuid
setgid
,加上
setgroups
永久删除它们。但请注意,不太建议这样做,因为它会在永久删除可作为 root 的权限之前在您的程序中进行任何利用,您可能希望避免这种情况。

除了这两个选项,确实没有任何方法可以获得特权。请注意,sudo 的使用本质上是第一种情况:特权助手。

© www.soinside.com 2019 - 2024. All rights reserved.