SUID 位不起作用,mate-screensaver-dialog

SUID bit doesn't work, mate-screensaver-dialog

我有一个 st运行ge 问题,正在尝试 运行 使用 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 位不适用于这种情况?我很乐意提供任何建议。

使用 OS:红色OS 7.3,x64

浏览 github 上的源代码我发现 this 评论:

Initializations that potentially take place as a priveleged user: If the executable is setuid root, then these initializations are run as root, before discarding privileges.

此评论涉及的功能:

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

从主函数中调用here。 除此之外,privileged_initialization 函数调用 setuid.h header in the same directory 中的另一个函数 hack_uid,上面有类似的注释:

If we've been run as setuid or setgid to someone else (most likely root) turn off the extra permissions so that random user-specified programs don't get special privileges.

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

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