-2

我有一个奇怪的问题,尝试使用 SUID 位以 root 权限运行 mate-screensaver-dialog:

[root@localhost ~]# ls -l /usr/libexec/mate-screensaver-dialog 
-rwsr-s--t. 1 root root 72920 мар 22  2021 /usr/libexec/mate-screensaver-dialog

然后,启动它(从用户user)并寻找有效的 uid 为我提供了运行此可执行文件的用户的信息:

[root@localhost ~]# ps aux | grep screensaver-dialog
user        3673  0.6  0.4 894304 38504 pts/3    Sl+  19:29   0:00 /usr/libexec/mate-screensaver-dialog

当用户会话被屏幕保护程序超时锁定时,就会发生这种情况。那么任何人都可以帮助我,为什么 SUID 位不适用于这种情况?我很乐意提供任何建议。

使用操作系统:RedOS 7.3、x64

4

1 回答 1

1

浏览github上的源代码,我发现了这条评论:

可能以特权用户身份进行的初始化:如果可执行文件是 setuid root,则这些初始化在放弃特权之前以 root 身份运行。

此评论解决的功能:

static gboolean privileged_initialization(int* argc, char** argv)

从这里的主函数调用。除此之外,该privileged_initialization函数还调用同一目录中标题中hack_uid存在的另一个函数,该函数在其上方有类似的注释:setuid.h

如果我们以 setuid 或 setgid 的身份运行给其他人(很可能是 root),请关闭额外权限,以便随机用户指定的程序不会获得特殊权限。

基于此,我假设可执行文件遵循在运行实际功能之前放弃提升权限的常见做法。这是一种减少潜在安全漏洞影响的流行方法。

实际上,这意味着可执行文件可能开始以 root 身份运行,因为 SUID 位,执行任何实际需要 root 权限的任务,然后将权限降低到用户级别。

于 2021-12-21T16:48:33.183 回答