• Linux下文件权限(一)用户ID和用户组ID


    最近在读《unix环境高级编程》,看到文件权限这里比较糊涂,主要设计多个用户ID和用户组ID,包括下面两个:

    (1)实际用户ID和实际用户组ID:这一部分表示我们究竟是谁。这两个字段在登录时取自口令文件中的登录项。通常,在一个登录会话期间这些值并不改变,但是超级用户进程有办法改变他们。简单来说,实际用户ID是登录用户的uid,实际用户组Id是登录用户的gid。

    (2)有效用户ID和有效用户组ID:这一部分用于文件的权限检查。一般情况下,有效用户ID等于实际用户ID,有效用户组ID等于实际用户组ID。当设置用户ID位(SUID)被设置时,有效用户ID等于文件所有者的uid而不是实际用户组ID;当设置用户组ID(SGID)位,有效用户组ID等于文件所有者的gid,而不是实际用户组ID。

    下面在linux下测试上述结论:

    在root超级用户下新建test.c文件,并编译生成test程序

    #include "apue.h"
    
    int main()
    {
         printf("uid=%d,gid=%d,euid=%d,egid=%d
    ",getuid(),getgid(),geteuid(),getegid());
         exit(0);
    }
    

      查看文件属性

    通过id命令查看当前登录用户为root。程序进程并未设置SUID和SGID,执行程序可以看出,实际用户ID,实际用户组ID都是0,有效用户ID,有效用户组ID也是0(等于实际用户ID,实际用户组ID)

    下面修改test的用户和用户组,再看结果

    结果没有发生变化,仍然是有效用户ID等于实际用户ID,有效用户组ID等于实际用户组ID(这是因为设置用户ID位SUID,设置用户ID位SGID没有被设置)

    下面给test程序设置SUID

    发现设置SUID位之后,test进程有效用户ID(1000)不等于实际用户ID(0)了,而是等于文件所有者的uid(yangang的uid为1000)

    如果设置程序的SGID ,会出现类似的结果:

    SUID

    这样程序就只能访问只有yangang才能访问的资源

    若文件的所有者是超级用户,而且设置了该文件的设置用户ID位,那么当该程序文件的一个进程执行时,该进程拥有超级用户权限。不管执行此文件的进程的实际用户是什么。例如passwd 命令允许任一用户改变其口令,该程序是一个设置用户ID的程序,因此该程序能将用户新口令写入口令文件中(只有超级用户才具有对该文件的写权限)。

  • 相关阅读:
    JS高级程序设计 第三章笔记
    JS高级程序设计第二章
    JS高级程序设计 第一章读书笔记
    markdown 尝试
    实验九
    第六章总结
    实验五
    第五章总结
    实验四
    实验三
  • 原文地址:https://www.cnblogs.com/yangang92/p/5312906.html
Copyright © 2020-2023  润新知