权限管理之ACL
# ACL引入
UGO中的O即其他人, 涵盖了非常大的范围, 我们使用
setfacl
可以将用户对文件的权限进行进一步细化!
数据准备
## -- 在/opt目录下创建文件a.txt
[root@localhost opt]# echo 111 > a.txt
[root@localhost opt]# chmod o=- a.txt
## -- 不管是哪个用户,在操作a.txt文件之前,需要保证沿途目录/与/opt的其他人有x执行权限
[root@localhost opt]# ll -d /
dr-xr-xr-x. 17 root root 244 8月 1 13:50 /
[root@localhost opt]# ll -d /opt
drwxr-xr-x. 2 root root 19 8月 4 18:48 /opt
[root@localhost opt]# ll a.txt
-rw-r----- 1 root root 4 8月 4 18:48 a.txt
## -- 查看未设置ACL时文件的权限状态
[root@localhost opt]# getfacl a.txt
# file: a.txt
# owner: root
# group: root
user::rw-
group::r--
other::---
[root@localhost opt]# useradd egon01
[root@localhost opt]# useradd egon02
[root@localhost opt]# groupadd IT
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
实验目的:
让用户egon01对a.txt文件只有读权限; egon02对a.txt文件只有写权限; IT组对a.txt文件只有读权限.
[root@localhost opt]# setfacl -m u:egon01:r a.txt
[root@localhost opt]# setfacl -m u:egon02:w a.txt
[root@localhost opt]# setfacl -m g:IT:r /opt/a.txt
"""
文件一旦设置了acl权限后, ls查看文件的信息会出现一个 加号!
"""
[root@localhost opt]# ll a.txt
-rw-rw----+ 1 root root 12 8月 8 01:35 a.txt
"""
查看文件ACL状态,与未设置ACL时相比:
1> 多了对用户egon01和egon02以及IT组对a.txt权限的设置
2> 仔细观察信息中出现了mask关键字,具体说明如下:
mask代表文件的最高权限(除了owner和other都要受其影响)..
本质原理是将权限与mask值进行按位与运算
通俗点,mask像是一个筛子.文件属主和其他人之外的所有权限都需要被它筛一遍..
若mask是rw,则代表该筛子只放行r和w权限..
举个栗子:
lili权限 r--
mask权限 rw-
lili最终权限 r--
Ps:我们一般不更改mask值.
只要赋予mask最大权限(也就是rwx),则给用户或群组设定的ACL权限本身就是有效的..怎么筛都能通过.
"""
[root@localhost opt]# getfacl a.txt
# file: a.txt
# owner: root
# group: root
user::rw-
user:egon01:r--
user:egon02:-w-
group::r--
group:IT:r--
mask::rw-
other::---
## -- 进行验证
[root@localhost opt]# su - egon01 -c "cat /opt/a.txt"
111
[root@localhost opt]# su - egon01 -c "echo 222 >> /opt/a.txt"
-bash: /opt/a.txt: 权限不够
[root@localhost opt]# su - egon02 -c "echo 222 >> /opt/a.txt"
[root@localhost opt]# su - egon02 -c "cat /opt/a.txt"
cat: /opt/a.txt: 权限不够
[root@localhost opt]# cat a.txt
111
111
222
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# ACL查改删继承
查看文件的权限 getacl a.txt
修改文件u属主的权限 setfacl -m u::权限 a.txt
修改文件g属组的权限 setfacl -m g::权限 a.txt
修改文件o其他人的权限 setfacl -m o::权限 a.txt
修改文件具体某一个 用户 的权限 setfacl -m u:用户名:权限 a.txt
修改文件具体某一个 组 的权限 setfacl -m g:组名:权限 a.txt
组必须事先存在
删除文件具体某一个用户的权限 setfacl -x u:用户名 a.txt
删除文件具体某一个组的权限 setfacl -x g:组名 a.txt
删除文件所有ACL权限 setfacl -b a.txt
文件权限的+号也就消失啦
更改文件mask的值 setfacl -m m:权限 a.txt
一般不会更改mask权限的值
让具体某一个用户对该目录以及往后在该目录下 新建 的文件和目录都拥有相同的权限
setfacl -m d:u:用户名:权限 /opt/test
注意: 若继承的权限设置为rwx,该目录下新建文件默认的mask值可能会对文件最终生效的权限产生影响..
对目录ACL权限的设置同理..
使用ACL后,修改权限就不要再用chmod啦!!以免产生不必要的麻烦..
[root@localhost opt]# getfacl a.txt
# file: a.txt
# owner: root
# group: root
user::rw-
user:egon01:r--
user:egon02:-w-
group::r--
group:IT:r--
mask::rw-
other::---
"""
改变属组权限的正确做法: `setfacl -m g::- a.txt`
"""
[root@localhost opt]# chmod g=- /opt/a.txt
"""
使用ACL后,再使用chmod修改权限生成的新的mask值,会将权限筛选一遍,达不到我们想要的效果..
可以看到,mask::--- user:egon01:r-- r过不了. 所以用户egon01生效的权限是---
"""
[root@localhost opt]# getfacl a.txt
# file: a.txt
# owner: root
# group: root
user::rw-
user:egon01:r-- #effective:---
user:egon02:-w- #effective:---
group::r-- #effective:---
group:IT:r-- #effective:---
mask::---
other::---
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
当前用户如果检索不到对应的acl权限或者检索到后发现权限为空,都会对应到other权限上..
也就是说,当前用户属于文件权限other其他人那一栏,当前用户对此文件生效的acl权限是高于other权限的..
setfacl -b b.txt # 可以先清理掉所有的acl权限,保证实验环境干净
● 应用场景一: 其他人对文件没有任何权限,然后单独设置其他人里的egon01对文件有r权限、egon02对文件有w权限
"""
egon01对b.txt的权限为r--; egon02对b.txt的权限为-w-
剩余的其他人中,例如egon03对b.txt的权限为---
"""
setfacl -m o::- b.txt
setfacl -m u:egon01:r b.txt
setfacl -m u:egon02:w b.txt
● 应用场景二: 其他人对文件有rw权限,然后单独设置其他人里的egon01对文件有r权限、egon02对文件有w权限
"""
egon01对b.txt的权限为r--; egon02对b.txt的权限为-w-
剩余的其他人中,例如egon03对b.txt的权限为rw-
"""
setfacl -m o::rw b.txt
setfacl -m u:egon01:r b.txt
setfacl -m u:egon02:w b.txt
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 文件的a、i、A特殊属性
"""
lsattr 查看文件的特殊属性
"""
[root@localhost opt]# touch /opt/{1..3}.txt
[root@localhost opt]# ll /opt/
总用量 0
-rw-r--r-- 1 root root 0 8月 8 06:19 1.txt
-rw-r--r-- 1 root root 0 8月 8 06:19 2.txt
-rw-r--r-- 1 root root 0 8月 8 06:19 3.txt
[root@localhost opt]# lsattr /opt/
---------------- /opt/1.txt
---------------- /opt/2.txt
---------------- /opt/3.txt
"""
chattr 设置文件的特殊属性
+a 让某个文件只能往里面追加数据,但不能删除,适用于各种日志文件.
+i 禁止任何修改,有些病毒程序会对文件加上该权限;防止系统中某个关键文件被修改 TnT
+A 不能更改文件访问时间
-a -i -A 删除属性
Ps: 这些文件属性设置对root管理员也生效,但root可以更改这些特殊属性啊!!
"""
[root@localhost opt]# chattr +a /opt/1.txt
[root@localhost opt]# chattr +i /opt/2.txt
[root@localhost opt]# chattr +A /opt/3.txt
[root@localhost opt]# lsattr /opt/
-----a---------- /opt/1.txt
----i----------- /opt/2.txt
-------A-------- /opt/3.txt
[root@localhost opt]# ll /opt/
总用量 0
-rw-r--r-- 1 root root 0 8月 8 06:19 1.txt
-rw-r--r-- 1 root root 0 8月 8 06:19 2.txt
-rw-r--r-- 1 root root 0 8月 8 06:19 3.txt
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36