[UOS] 【1060a系列】权限管理
Tofloor
poster avatar
废物头子
deepin
2023-11-06 19:08
Author

【1060a系列】权限管理

  • 【1060a系列】权限管理
    • 一、ls -l内容解释
    • 二、基础权限
      • (1)权限对目录和文件的作用
      • (2)判断是否拥有权限
      • (3)权限修改
        • 修改权限:chmod
          • 字符式修改
          • 数字式修改
          • 递归设置权限
      • 修改拥有人和所属组
    • 三、特殊权限
      • (1)三种特殊权限
        • SUID
        • SGID
        • sticky(sbit)
      • (2)特殊权限管理
    • 四、隐藏权限
      • (1)两种常见隐藏权限
      • (2)隐藏权限管理
    • 五、ACL权限
      • 访问控制列表
      • 查看和解释ACL权限
        • 查看文件ACL
        • 查看目录ACL
      • ACL权限优先级
      • ACL权限设置

一、ls -l内容解释

[root@1060a ~]# ls -l
总用量 8
-rw------- 1 root root 1206 11月  2 19:40 anaconda-ks.cfg
drwxr-xr-x 2 root root   59 11月  2 19:42 Desktop
drwxr-xr-x 2 root root    6 11月  2 19:37 Documents
drwxr-xr-x 2 root root    6 11月  2 19:37 Downloads
-rw------- 1 root root 1483 11月  2 19:41 initial-setup-ks.cfg
drwxr-xr-x 2 root root   32 11月  2 19:37 Music
drwxr-xr-x 3 root root   24 11月  2 19:37 Pictures
drwxr-xr-x 2 root root    6 11月  2 19:37 Videos

第一行:总用量(total)表示当前显示的文件和目录的大小总和。
之后的每一行可以分为8个字段
-|rw------- | 1 | root | root | 1206 | 11月 2 19:40 | anaconda-ks.cfg
(1)文件类型。-表示这是一个普通文件。
d		目录
l		链接文件
b		块设备文件
(2)权限,每三位一组,分别对应拥有人,所属组和其他用户。当文件存在ACL权限时,在最后会添加一个'+'号。
(3)对目录而言:该字段表示目录下子目录的数量,该位置最小值为2。因为所有目录下都会存在'.'和'..',表示当前目录和上一级目录。
	对文件而言:该字段表示文件的硬链接数量。
(4)文件拥有人。
(5)文件所属组。
(6)文件大小。
(7)文件内容最后一次修改时间。
	每一个文件存在四个时间戳,可以使用stat命令进行查看
	[root@1060a ~]# stat anaconda-ks.cfg 
  文件:anaconda-ks.cfg
  大小:1206            块:8          IO 块:4096   普通文件
  设备:fd00h/64768d      Inode:201333825   硬链接:1
  权限:(0600/-rw-------)  Uid:(    0/    root)   Gid:(    0/    root)
  最近访问:2023-11-06 10:33:19.462014094 +0800		//最后一次查看文件内容的时间
  最近更改:2023-11-02 19:40:42.632018072 +0800		//最后一次修改文件内容的时间
  最近改动:2023-11-06 10:34:14.722133463 +0800		//最后一次修改文件属性的时间
  创建时间:2023-11-02 19:40:42.592018070 +0800		//文件被创建的时间
(8)文件名。

二、基础权限

权限规定系统中用户可以对文件进行什么操作。

Linux中基础权限一个有三个:r(read)——读,w(write)——写,x(execute)——执行。

(1)权限对目录和文件的作用

权限对文件的作用:

  • r:可以读取文件的内容
  • w:可以修改文件的内容
  • x:文件可以被执行(文件可以作为命令被执行)

权限对目录的作用:

  • r:可以读取到目录的内容
  • w:可以修改目录内容
  • x:可以进入这个目录

注:

  • 能否对文件进行操作取决于文件所在目录的权限。
  • 能否对文件的内容进行操作取决于文件本身的权限
  • 一个文件如果要想具有意义,那么至少需要rx权限,也就是可以进入目录并看到目录的内容。

(2)判断是否拥有权限

当用户运行一个命令时,会产生一个对于的进程,该进程UID和GID将继承用户的UID和GID。

  • a.当进程UID和文件的UID匹配时,以文件拥有人(user)身份访问文件
  • b.当进程GID和文件的GID匹配时,以文件所属组(group)身份访问文件
  • c.当两者均不匹配时,以其他人身份访问文件(other)

权限优先级:user>group>other

(3)权限修改

修改权限:chmod

字符式修改
chmod [-R] u/g/o/a +/-/=  filename(dirname)
u:表示文件拥有人
g:文件拥有组
o:其他人
u+g+o=a(所用人)
+:在原有权限上增加权限
-:在原有权限上减掉权限
=:覆盖原来的权限

直接赋权
chmod u=rwx,g=rwx,o=rwx file/dir
chmod ugo=rwx file/dir
chmod a=rwx fiel/dir

加减赋权
chmod u+rw,g+r,o+x file/dir
chmod u-w,g-r,o-x file/dir
数字式修改
chmod [-R] 权限数	filename(dirname)
权限数有三位,从第一位开始分别表示所有人,所属组,其他人权限如755表示该文字所用人拥有rwx权限,所属组和其他用户拥有rw权限。
eg:
chmod 777 file1 					赋予所有用户rwx权限
chmod 651 fiel1 					赋予拥有人rw权限,所属组rx权限,其他用户x权限

注:字符式的直接赋权和数字式修改均会直接覆盖之前的权限,生产环境中建议使用加减赋权。

递归设置权限
chmod -R 777 dir 	将目录权限以及目录下所有文件和目录的权限设置为777。

修改拥有人和所属组

chown [-R] [OWNER][:[GROUP]] FILE...
将file1的所属人修改为admin
#chown admin file1
将file1的所属组修改为admin
#chown :admin file1
将file1的所属人修改为user1,所属组修改为user1
#chown user1:user1 file1

除了root用户之外,文件的拥有人同样可以修改该文件的权限和所属组。

文件的拥有人:文件的拥有人可以修改文件的权限

  • 普通用户可以修改自己文件的权限(仅可以改权限),而root用户可以修改所有文件的权限
  • 普通用户不能修改文件的拥有人

文件的拥有人只有两种来源:

  • 第一种是该文件是谁创建,那么谁就是拥有人;
  • 第二种是root用户指定文件的拥有人

文件的所属组:

修改文件的所属组,该用户必须是该组的成员,组可以是附加组或者私有组;
文件拥有组的来源:

  • 第一种是该文件创建用户的私有组
  • 第二种是root指定
文件拥有人修改权限
[user1@rhce text]$ ll
total 0
-rw-r--r--. 1 user1 it 0 Sep 13 14:25 file1
[user1@rhce text]$ chmod 666 file1 
[user1@rhce text]$ ll
total 0
-rw-rw-rw-. 1 user1 it 0 Sep 13 14:25 file1

文件拥有人修改所属组
修改所属组需要注意,修改文件的所属组,该组必须是用户人的主要组或附属组
[user1@rhce text]$ id 
uid=1001(user1) gid=1004(it) groups=1004(it),1002(user2) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[user1@rhce text]$ ll
total 0
-rw-rw-rw-. 1 user1 it 0 Sep 13 14:25 file1
[user1@rhce text]$ chown :user2 file1 
[user1@rhce text]$ ll
total 0
-rw-rw-rw-. 1 user1 user2 0 Sep 13 14:25 file1
[user1@rhce text]$ chown :user1 file1 
chown: changing group of 'file1': Operation not permitted

三、特殊权限

(1)三种特殊权限

SUID

只要用户对设有 SUID 的文件有执行权限,那么当用户执行此文件时,会以文件所有者的身份去执行此文件(该权限位于拥有人的x权限上)

  • 该权限只作用于可执行程序文件中
  • 在默认情况下,用户发起一个进程,该进程的属主是发起者,如果给可执行程序文件添加suid权限后,用户发一个进程,该进程的属主为程序文件所属的属主,而非发起者。用户对该可执行程序文件必须要有x权限,suid仅在执行该文件时有效。

eg:当我使用tester用户去修改密码的过程

  1. tester 用户对于 /usr/bin/passwd 这个程序具有执行权限,因此可以执行 passwd 程序
  2. passwd 程序的所有者为 root
  3. tester 用户执行 passwd 程序的过程中会暂时获得 root 权限
  4. 因此 tester 用户在执行 passwd 程序的过程中可以修改 /etc/shadow 文件
SGID

作用于文件:效果于SUID权限相似,当用户对设有SGID权限的文件拥有执行权限,那么当用户执行文件时,会以文件所属组的身份去执行此文件。

作用于目录:当一个目录被赋予SGID权限后,所有用户在创建文件和目录时,该文件或目录的所属组将继承目录的所属组。也就是,只有用户对设用SGID的目录拥有rwx权限时,SGID的功能才能完全发挥。

sticky(sbit)

粘滞位,防删除位。如果一个目录有该权限,即在该目录内,只用文件或者目录的所有人和root用户可以删除目录和文件。(该权限位于其他用户的x权限上)

注:该权限只对目录有效,对文件无效。

(2)特殊权限管理

特殊权限表示方式

权限 字符 对应数字
suid s 4
sgid S 2
sticky T 1

特殊权限设置

设置suid		chmod u+s filename
设置sgid		chmod g+s filename/dirname
设置sticky	chmod o+t dirname

也可通过数字来设置
设置suid		chmod 4xxx filename
设置sgid		chmod 2xxx filename/dirname
设置sticky	chmod 1xxx dirname

四、隐藏权限

隐藏权限是为了给文件加上一层防护,防止root用户的误操作。

(1)两种常见隐藏权限

i权限:只可以查看文件内容,不能删除和修改文件内容。

a权限:可以查看和追加文件内容,不能删除文件和文件之前的内容。

(2)隐藏权限管理

设置隐藏权限:chattr

语法:

chattr +/- 权限	文件名

eg:给文件添加/去掉i权限
chattr +/-i file

查看隐藏权限:lsattr

语法:

lsattr 文件名

eg:查看文件的隐藏权限
[root@localhost ~]# lsattr text 
-----a---------------- text

五、ACL权限

访问控制列表

当文件仅由单个所有者和指定的一组人使用时,标准 Linux文件权限即可满足要求。但是,有些用例要求多个指定的用户和组以不同的文件权限集来访问文件。 访问控制列表(ACL)便提供了这一功能。

借助ACL,可以使用与常规文件权限相同的权限标志 (读取、写入和执行)向由用户名、组名、UID 或 GID 标识的多个用户和组授予权限。除了文件所有者和文件的组从属关系之外,这些额外的用户和组分别被称为指定用户和指定组,因为它们不是在长列表中指定的,而是在ACL中指定的。

查看和解释ACL权限

当一个文件设置了ACL权限后。ls -l命令查询的是最少的ACL设置。

[root@1060a opt]# ll file 
-rw-rw-r--+ 1 root root 0 11月  6 10:59 file

10个权限字符,末尾的加号表示该文件存在若干条目的ACL权限
用户:显示用户ACL设置,与标准的文件设置相同
组:显示当前ACL掩码设置,而不是所属组权限
其他:显示其他ACL设置,与标准的文件设置相同。

当文件设置ACL权限后,使用chmod修改该文件的所属组权限,修改的不是组权限而是更改ACL掩码。如果需要设置所属组权限,则需要使用设置ACL权限的命令。

查看ACL权限的命令:getfacl

查看文件ACL

要显示文件上的ACL设置,使用 getfacl file

[root@1060a opt]# getfacl file 
# file: file
# owner: root
# group: root
user::rw-
user:admin:rwx                  #effective:rw-
group::r--
mask::rw-
other::r--

注释条目:
# file: file			该文件用户名		
# owner: root			该文件的拥有人
# group: root			该文件的所属组

用户条目
user::rw-
user:admin:rwx                  #effective:rw-   
第一行文件拥有人权限。user的权限为rw-
第二行指定用户权限。用户admin权限为rwx,但是掩码将有效权限控制为rw

组条目
group::r--			组所有者权限。

掩码条目
mask::rw-
掩码设置显示可能为所有指定用户和组,提供的最大权限。

其他条目
other::r--
其他用户权限。
查看目录ACL

要显示文件上的ACL设置,使用 getfacl directory

[root@1060a tmp]# getfacl dir
# file: dir
# owner: user
# group: operators
# flags:-S-
user::rwX
user:consultant3:---
user:1005:rwx
group::rwx
group:consultant1:r-x
group:2210:rwx
mask::rwx
other::---
default:user::rwx
default;user:consultant3:---
default:group::rwx
default:group:consultant1:r-x
default:mask::rwx
default:other::--

注释条目
# file: dir
# owner: user
# group: operators
# flags:-S-
前三行是注释,用于识别目录名,拥有人和所属组。如果存在特殊权限,则会出现在第四行注释来显示所设置的标志。这里表示设置了sgid。

标准ACL条目
user::rwX
user:consultant3:---
user:1005:rwx
group::rwx
group:consultant1:r-x
group:2210:rwx
mask::rwx
other::---

与上午中文件上的ACL中相同。

默认条目
default:user::rwx
default;user:consultant3:---
default:group::rwx
default:group:consultant1:r-x
default:mask::rwx
default:other::--

默认权限,在该目录下创建新文件或目录时,会自动获得这些ACL权限。
目录会完全继承所有默认权限。
文件同样会继承所有权限,但是会使用权限掩码将x权限移除。
[root@1060a tmp]# setfacl -m d:user:admin:rwx dir/
[root@1060a tmp]# getfacl dir/
# file: dir/
# owner: root
# group: root
user::rwx
group::r-x
other::r-x
default:user::rwx
default:user:admin:rwx
default:group::r-x
default:mask::rwx
default:other::r-x

[root@1060a tmp]# touch dir/file
[root@1060a tmp]# getfacl dir/file 
# file: dir/file
# owner: root
# group: root
user::rw-
user:admin:rwx                  #effective:rw-
group::r-x                      #effective:r--
mask::rw-
other::r--


注意:
getfacl命令的输出可以用作setfacl的输入,用来恢复ACL或者从源文件或目录负责ACL并将其保存到新文件中。
eg:
[root@localhost tmp]# getfacl 123 > 123-acl
[root@localhost tmp]# touch text
[root@localhost tmp]# setfacl --set-file=123-acl t

ACL权限优先级

在决定一个进程能否访问文件时,将按如下应用文件权限和ACL。

  • 如果以文件拥有人身份运行进程,则应用文件的用户ACL权限。
  • 如果以指定用户ACL条目中的用户身份运行进程,则应用指定用户ACL权限
  • 如果以文件的拥有组运行进程,则应用文件的所属组ACL权限。
  • 如果以指定组条目中的身份运行进程,则应用指定组ACL权限
  • 最后,都不匹配则应用其他ACL权限。

ACL权限设置

命令:setfacl

语法:

setfacl 选项 filename/dirname

常用选项:
-m			设当ACL权限
-x			删除指定的ACL权限
-b			删除所有ACL权限
-d			设置默认ACL权限
-k			删除默认权限
-R			递归设置ACL。

eg:
给用户st赋予ACL的只读权限
# setfacl -m u:st:r class

给用户组stg赋予ACL的读执行权限
#setfacl -m g:stg:rx class

删除用户组stg的ACL权限
#setfacl -x g:stg:	class

删除用户st的ACL权限
#setfacl -x g:st: class

清楚文件或目录的所有ACL权限
#setfacl -b class

设置目录的默认权限
#setfacl -dm u:user1:rwx,g:user1:rx dir
#setfacl -m  d:u:user1:rwx,d:g:user1:rx dir
Reply Favorite View the author
All Replies
废物头子
deepin
2023-11-06 19:09
#1

内容与之前的权限管理相差不大,该文档使用UOS-server-1060a系统测试,并补充了部分内容。

Reply View the author
废物头子
deepin
2023-11-06 19:17
#2

还要啥内容,各位大佬可以说一下,我去新建文件tail

Reply View the author
兆兆嘟嘟嘟
deepin
2023-11-06 21:25
#3

请问-rwxrwxrwx的第一位文件类型有没有修改方法?

Reply View the author
yanjuner
Super Moderator
2023-11-06 21:53
#4

专业

属实专业

Reply View the author