【问题标题】:/etc/shadow and suid dilemma/etc/shadow 和 suid 困境
【发布时间】:2015-04-14 06:50:47
【问题描述】:

我偶然发现了一个关于使用suid 可执行文件访问系统文件的问题。

我写了这个简短的 POC:

#include <unistd.h>
#include <stdio.h>

int main()
{
    if (access("/etc/shadow", W_OK) == 0)
        printf("shadow writable!\n");
    else
        printf("shadow not writable\n");

    return 0;
}

然后我用chown root:rootchmod u+s 编译并给它suid(由root 运行)

这是生成的可执行文件

-rwsrwxr-x  1 root root     4847 Apr 14 08:40 a.out

目标文件拥有这些权限

-rw------- 1 root root 1836 Oct  8  2014 /etc/shadow

当我运行程序时,它给出了以下输出:

[d.berra@srvr ~]$ ./a.out
shadow not writable

为什么会这样?我的意思是...我正在以rootroot CAN 的身份访问该文件!

注意:selinux 已禁用

想法?

【问题讨论】:

标签: linux shadow suid


【解决方案1】:

来自access

检查是使用调用进程的real UID 和 GID 完成的,而不是在实际尝试对文件进行操作(例如,open(2))时使用的有效 ID。这允许 set-user-ID 程序轻松确定调用用户的权限。

所以你可以成功打开这个文件进行写入,因为你的有效UID和文件系统UID现在都是0,但是访问仍然会返回错误。

正如@nos 所说,您忘记将可执行文件所有者更改为root

$ sudo chown root:root ./a.out

但即使你这样做,由于access 行为,你仍然会得到“不可写”:

$ ls -l ./a.out 
-rwsr-xr-x 1 root root 12651 Apr 14 09:53 ./a.out
$ ./a.out 
shadow not writable

【讨论】:

    【解决方案2】:

    您设置了 suid 位,这意味着可执行文件将以拥有该可执行文件的用户身份运行。可执行文件将以d.berra 运行,无法写入/etc/shadow

    如果您希望可执行文件以 root 身份运行而不考虑运行它的用户,那么除了设置 suid 位之外,可执行文件还应归 root 所有。

    【讨论】:

    • 即使您将用户更改为root,它仍然会打印shadow not writable!
    • suid 位的目的是作为有效用户以root 身份运行可执行文件。否则与没有设置 suid 位的可执行文件没有区别
    • @DavideBerra: suid 的目的是用可执行文件的 owner 替换有效 ID -- 它可能不是 root。
    • 我认为你应该强调“拥有”这个词。这就是 suid 的症结所在。
    • 是的,对不起...我忘了 chown root:root 执行...顺便说一句它不起作用
    【解决方案3】:

    试试这个:

    #include <unistd.h>
    #include <stdio.h>
    
    int main()
    {
        setuid(0);
    
        if (access("/etc/shadow", W_OK) == 0)
            printf("shadow writable!\n");
        else
            printf("shadow not writable\n");
    
        return 0;
    }
    

    它将用户 ID 设置为 root 以便能够访问该文件。 setuid(0) 仅适用于有效用户 ID 也为 0 的情况。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多