一、Linux权限管理

       Linux权限是操作系统用来限制对资源访问的机制,权限一般分为读、写、执行。系统中每个文件都拥有特定的权限、所属用户及所属组,通过这样的机制来限制哪些用户或用户组可以对特定文件进行相应的操作。

       Linux每个进程都是以某个用户身份运行,进程的权限与该用户的权限一样,用户的权限越大,则进程拥有的权限就越大。

Lnux中有的文件及文件夹都有至少权限三种权限,常见的权限如表所示:

权限

对文件的影响

对目录的影响

r(读取)

可读取文件内容

可列出目录内容

w(写入)

可修改文件内容

       可在目录中创建删除内容

x(执行)

可作为命令执行

可访问目录内容

目录必须拥有x权限,否则无法查看其内容

Linux 文件及文件及权限

Linux权限授权,默认是授权给三种角色,分别是user、group、other,Linux权限与用户之间的关联如下:

  1. U代表User,G代表Group,O代表Other;
  2. 每个文件的权限基于UGO进行设置;
  3. 权限三位一组(rwx),同时需授权给三种角色,UGO;
  4. 每个文件拥有一个所属用户和所属组,对应UGO,不属于该文件所属用户或所属组使用O来表示;

在Linux系统中,可以通过ls –l查看/data/test2目录的详细属性,如图所示:

drwxr-xr-x. 2 root root 22 Apr 10 11:00 test2

/data/test2目录属性参数详解如下:

  1. d 表示目录,同一位置如果为-则表示普通文件,l表示链接文件,b表示块设备文件,c表示字符设备文件;
  2. rwxr-xr-x 表示三种角色的权限,每三位为一种角色,依次为u,g,o权限,如上则表示user的权限为rwx,group的权限为r-x,other的权限为r-x;
  3. 2表示文件夹的链接数量,可理解为该目录下子目录的数量;
  4. 从左到右,第一个root表示该目录的属主,第二个root则为属组,其他人角色默认不显示;
  5. 22表示该文件夹占据的字节数;
  6. Apr 10 11:00 表示文件创建或者修改的时间;
  7. test2 为目录的名,或者文件名。

二、更改属主及属组

chown命令用于修改某个用户、组对文件夹的属主及属组。

1、修改/data/test2文件夹所属的用户为zhang,其中-R参数表示递归处理所有的文件及子目录。

chown -R zhang  /data/test2

2、修改/data/test2/文件夹所属的组为zhang。

chown -R :zhang  /data/test2

 

3、同时修改/data/test2文件夹的属主和属组都为root。

 

三、修改用户权限

       chmod可以用于修改某个用户、组对文件夹的权限,其中以代指ugoa,、+、-、=代表加入、删除和等于对应权限.

1、授予用户对/data/test2目录拥有rwx权限

 

2、授予组对/data/test2目录拥有rwx权限

 

3、授予用户、组、其他人对/data/test2目录拥有rwx权限

 

4、撤销用户对/data/test2目录拥有w权限

 

5、撤销用户、组、其他人对/data/test2目录拥有x权限

 

6、授予用户、组、其他人对/data/test2目录只有rx权限

四、修改用户权限(二进制方式)

       Linux权限默认使用rwx来表示,为了更简化在系统中对权限进行配置和修改,Linux权限引入二进制表示方法,如下代码:

Linux权限可以将rwx用二进制来表示,其中有权限用1表示,没有权限用0表示;

Linux权限用二进制显示如下:

rwx=111

r-x=101

rw-=110

r--=100

依次类推,转化为十进制,对应十进制结果显示如下:

rwx=111=4+2+1=7

r-x=101=4+0+1=5

rw-=110=4+4+0=6

r--=100=4+0+0=4

得出结论,用r=4,w=2,x=1来表示权限。

       如下使用二进制方式来修改权限,因为umask默认为022,故目录的默认权限是755,文件的默认权限是644

1、授予用户对test2目录拥有rwx权限

chmod  –R  755  test2

2、授予组对test2目录拥有rwx权限

chmod  –R  775 test2

3、授予用户、组、其他人对test2目录拥有rwx权限

chmod  –R  777  test2

4、撤销用户对test2目录拥有w权限

chmod  –R  555  test2

5、撤销用户、组、其他人对test2目录拥有x权限

chmod  –R  644  test2

6、授予用户、组、其他人对test2目录只有rx权限

chmod  –R  555  test2

五、Linux特殊权限及掩码

       Linux权限除了常见的rwx权限之外,还有一些特殊的权限。

      每个Linux终端都拥有一个umask属性,umask熟悉可以用来确定新建文件、目录的默认权限,默认系统权限掩码为022。在系统中每创建一个文件或者目录,文件默认权限是666,而目录权限则为777,权限对外开放比较大,所以设置了权限掩码之后,默认的文件和目录权限减去umask值才是真实的文件和目录的权限。

  1. 对应目录权限为:777-022=755;
  2. 对应文件权限为:666-022=644;
  3. 执行umask命令可以查看当前默认的掩码,umask -S 023可以设置默认的权限掩码。

如果要修改umask只针对某个用户生效,其他用户保持默认值可以进行如下修改

su - testuser2

cd /home/testuser2

umask 023 >> .bash_profile

source .bash_profile

在Linux权限中,除了普通权限外,还有如下表所示,三个特殊权限:

权限

对文件的影响

对目录的影响

Suid

以文件的所属用户身份执行,而非执行文件的用户

sgid

以文件所属组身份去执行

在该目录中创建任意新文件的所属组与该目录的所属组相同

sticky

对目录拥有写入权限的用户仅可以删除其拥有的文件,无法删除其他用户所拥有的文件

Linux中设置特殊权限方法如下:

  1. 设置suid: chmod u+s test2
  2. 设置sgid: chmod g+s test2
  3. 设置sticky: chmod o+t test2

特殊权限与设置普通权限一样,可以使用数字方式表示:

  1. SUID    = 4
  2. SGID    = 2
  3. Sticky = 1

可以通过chmod 4755 test2对该目录授予特殊权限为s的权限,Linux系统中s权限的应用常见包括:su、passwd、sudo,如图所示:

      当文件/目录有x权限,且拥有特殊权限时,显示为__s__s__t;如果没有x权限,但有特殊权限,显示为__S__S__T。

六、访问控制列表ACL

ACL允许我们为单个用户或用户组设置特定权限,突破了传统权限模型的限制。比如:

允许测试用户Alice只读访问日志文件
赋予开发用户Bob对配置文件的读写权限
给项目经理Carol完全控制项目目录的权限

 所有这些都可以在不改变文件所有者或主要用户组的情况下实现,通过ACL简化权限管理工作.

setfacl:用于设定文件访问控制列表。

用法:setfacl -m u:testuser2:rx file/directory   #-m:更改文件的访问控制列表。u:表示用户,也可为g:表示用户组

getfacl:获取文件访问控制列表

用法:getfacl  file/directory 

七、LINUX文件特殊属性

       传统的 chmod 权限模型控制的是用户对文件的访问能力(读、写、执行)。但在某些场景下,我们需要更底层的控制——不是“谁能写”,而是“能否被修改、删除、重命名,甚至是能否被追加数据”。

chattr +a file #只能追加不能覆盖

chattr +i  file #防止重要文件被误删

lsattr  file      #列出文件属性

如果需要移除属性执行chattr -i/a file即可。

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐