[ Content contribution] Linux的权限管理
Tofloor
poster avatar
废物头子
deepin
2023-11-01 23:14
Author

权限管理

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

一、ls -l内容解释

当我们执行 ls -l命令查看文件的详细信息的时候,可以得到以下信息。

[root@localhost ~]# ls -l
total 4
-rw-------. 1 root root 1012 Jul 24 14:22 anaconda-ks.cfg
drwxr-xr-x. 2 root root    6 Jul 27 20:13 下载
drwxr-xr-x. 2 root root    6 Jul 27 20:13 公共
drwxr-xr-x. 2 root root    6 Jul 27 20:13 图片
drwxr-xr-x. 2 root root    6 Jul 27 20:13 文档
drwxr-xr-x. 2 root root    6 Jul 27 20:13 桌面
drwxr-xr-x. 2 root root    6 Jul 27 20:13 模板
drwxr-xr-x. 2 root root    6 Jul 27 20:13 视频
drwxr-xr-x. 2 root root    6 Jul 27 20:13 音乐

第一行:total当前文件夹下所有文件大小和,只计算当前文件内,不计算子文件夹内文件。
第二行:可以分为以下八个字段
-|rw-------.| 1 | root | root | 1012 | Jul 24 14:22 | anaconda-ks.cfg
(1)文件属性,-表示这个一个普通文件。另外
d		目录
l		链接文件
b		块设备文件
c		字符设备文件
(2)权限,三位一组,分别对应拥有人,所属组和其他用户,最后一个".”表示该文件存在selinux的安全标签。当文件存在ACL权限时,该位置会显示'+'。
(3)对文件而言,该字段表示该文件的硬链接个数;对目录而言,该字段表示该目录下的第一级子目录个数。
在Linux中我们将链接分为软连接和硬链接。
硬链接:只能对已存在的文件进行创建,修改然后一个文件,所有链接文件都会被修改。
软链接:可以对不存在的目录和文件创建软连接,软链接的文件修改不会影响到其他链接文件。
使用ln来创建链接,默认常见的硬链接,使用-s选项创建软连接。
(4)拥有人
(5)所属组
(6)对文件而言,该字段表示文件的大小。对目录而言,该字段表示目录本身的大小,不是目录所有文件的大小之和。默认单位是字节。
(7)文件最后一次修改时间
(8)文件名

二、基本权限

(1)权限的作用

在操作系统中权限是规定用户对一个文件和目录可以进行什么操作。

当用户在运行一个程序的时候,程序会继承用户的UID和GID,当程序在访问文件的时候会得到三类权限

  • 当程序的UID和文件的UID一致,以文件拥有人(user)的身份访问文件。
  • 当程序的GID和文件的GID一致,以文件所属组(group)的身份访问文件。
  • 程序的UID和GID都不一致的时候,以其他人(other)身份访问文件。

权限优先级:user>group>other

权限表示方式

可读 r 4
可写 w 2
可执行 x 1

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

权限对文件的意义:

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

权限对目录的意义:

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

注:

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

(3)权限管理

修改权限:chmod

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

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

修改文件拥有人和所属组:chown

语法:

chown [-R] [OWNER][:[GROUP]] FILE...
只有文件或目录的所属人和root用户可以修改文件或目录的所属组(注:使用所属人修改所属组时,所属人必须在组内)
将file1的所属人修改为admin
#chown admin file1
将file1的所属组修改为admin
#chown :admin file1
将file1的所属人修改为user1,所属组修改为user1
#chown user1:user1 file1

除了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

粘滞位,防删除位。如果一个目录有该权限,即在该目录内,只用文件或者目录的所有人和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@localhost tmp]# ll 123 
-rwxrw-r--+ 1 user1 it 21 Aug  4 15:16 123

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

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

查看ACL权限的命令:getfacl

查看文件ACL

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

[root@localhost tmp]# getfacl 123
# file: 123		
# owner: user1
# group: it
user::rwx
user:admin:rwx                  #effective:rw-
group::r--
mask::rw-
other::r--

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

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

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

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

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

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

[root@localhost 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权限。

注意:
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权限设置

命令: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
yanjuner
Super Moderator
2023-11-01 23:15
#1

好牛,为什么不放到优质内容投稿版块啊

还有机会获奖

Reply View the author
阿尼樱奈奈
Moderator
2023-11-01 23:20
#2

like

Reply View the author
wlly-lzh
deepin
2023-11-01 23:51
#3

进收藏夹吃灰了。

Reply View the author
Lwh2008--听话模式
deepin
2023-11-02 00:21
#4

建议把权限的字母、数字表示法放一起方便新人参考

加油!kissing_heart

Reply View the author
蓝鲸
deepin
2023-11-02 00:39
#5

写的非常详细,已收藏!kissing_heart

Reply View the author
deepin_xiaoqian
deepin testing team
2023-11-02 01:38
#6

感谢分享,已收藏like

Reply View the author
中国新蔡
deepin
2023-11-03 16:29
#7

很6,非常好,期待分享更多Linux知识!agree

Reply View the author
vIann
deepin
2023-11-03 17:41
#8
感谢分享!先进收藏夹
Reply View the author
废物头子
deepin
2023-11-06 19:10
#9

纠错:ls -l显示内容的第一行total显示的大小为显示的文件和目录大小总和。没有显示的文件不计算在内。

Reply View the author
静夜思001
deepin
2023-11-08 01:32
#10

好好好,已收藏tail

Reply View the author
Dewave
deepin
2023-12-07 01:45
#11

感谢分享。

Reply View the author