linux用户用户组与ACL

使用者ID:UID与GID

在使用Linux的过程中,经常会遇到各种用户ID(user identifier, UID)和组ID(group identifier, GID),Linux也是通过对这些ID的管理实现的自主访问控制(discretionary access control, DAC)。

用户ID(英语:user identifier,一般缩写为User ID或UID),全称用户标识符,在类UNIX系统中是内核用来辨识用户的一个无符号整型数值,亦是UNIX文件系统与进程的必要组成部分之一。

虽然我们登录Linux主机时使用的是账户,但是对于Linux系统而言,它只认识ID。而ID与账户的对应就记录在/etc/passwd文件中。可以通过命令id查看各个id与账户名的对应关系:

image_192

从上图中我们可以看到,我的用户名是wang,它的UID是1000,GID也是1000。

UID范围

在不同系统中,UID值范围也有所不同,但一般来说UID是由一个16bit的无符号整数表示的,其范围在0-65535之间。

UID 账户
0   root,超级用户的UID总为0  
65535   nobody,总是UID的最大值  
1~999   一般约定是系统保留范围,由系统使用  
1000~65534   一般用户UID  
UID与GID分类

值得注意的是,以下的分类都是针对进程而言的,只有进程才会有下述几种ID。

中文 英文 解释
有效用户ID与有效组ID   Effective UID, EUID, Effective GID, GID   在创建和访问文件时发挥作用。具体来说,创建文件时,系统内核将根据创建文件的进程的EUID与EGID设定文件的所有者/组属性,而在访问文件时,内核亦根据访问进程的EUID与EGID决定其能否访问文件。  
真实用户ID与真实用户组   Real UID, RUID, Real GID, RGID   用于辨识进程的真正所有者,且会影响到进程发送信号的权限。  
暂存用户ID   Saved UID, SUID   特权权限运行的进程暂时需要做一些不需特权的操作时使用,这种情况下进程会暂时将自己的有效用户ID从特权用户(常为root)对应的UID变为某个非特权用户对应的UID,而后将原有的特权用户UID复制为SUID暂存;之后当进程完成不需特权的操作后,进程使用SUID的值重置EUID以重新获得特权。  
文件系统用户ID   File System UID, FSUID   在Linux中使用,且只用于对文件系统的访问权限控制,在没有明确设定的情况下与EUID相同(若FSUID为root的UID,则SUID、RUID与EUID必至少有一亦为root的UID),且EUID改变也会影响到FSUID。设立FSUID是为了允许程序(如NFS服务器)在不需获取向给定UID账户发送信号的情况下以给定UID的权限来限定自己的文件系统权限。  
访问文件

举例而言,假设我要执行以下命令,sudo vim /etc/apt/sources.list,我当前的用户是wang,那么这个这个进程的RUID就是1000(对应wang这个账户),而sudo指使使用root权限,因此该进程的EUID就是0(root账户)。我们查看/etc/apt/sources.list文件的所有者和所有组,它的所有者是root,组是root。因此我们必须使用sudo进行提权,也即是修改进程的EUID为0,这样才能够访问/etc/apt/sources.list文件,但是RUID依然是1000。

创建文件

再举例创建文件。如下图所示:

image_193


文件的所有组和所有者依然与进程的EUID和EGID指定,而非RUID和RGID。

父子进程

子进程继承了父进程所有的各种UID和GID。

权限控制

这里描述的权限控制是指Linux中基于用户和用户组以及r\w\x权限的控制,其中r表示可读,w表示可写,x表示可执行。

Linux一般把文件存取的身份分为三个类别:owner/group/others,且三种身份都各有read/write/execute权限。

查看/etc/shadow的详细信息如下图所示:

image_194


分析如下:

权限 链接数 所有者 所有组 文件大小 文件最后被修改的时间 文件名
-rw-r-----   1   root   shadow   1.6K   May 9 2021   /etc/shadow  

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzwxwz.html