Linux文件的ACL

文章目录
  1. 1. 相关命令
  2. 2. 操作实验
    1. 2.1. 用户权限配置
    2. 2.2. 组权限
  3. 3. 系统文件权限的备份与恢复
    1. 3.1. 实战篇

在Linux中,一般使用chmod命令对属主、用户组、其它用户为类别对文件权限进行控制,这种方式较为粗略,但也能满足日常需求。在一些特殊的场景中,如只允许某些用户能访问文件的场景,如果使用chmod命令进行配置,一般是将这部分用户加入到组中,然后配置组的权限。

在Linux中,还提供了一种精细化的文件权限控制方式,那就是ACL(Access Control List)

在没有ACL技术之前,Linux系统对文件的权限控制仅可划分文件的属主、用户组、其他用户三类,随着技术的发展,传统的文件权限控制已经无法适应复杂场景下的权限控制需求,比如说一个部门(即一个用户组group)存在有多名员工(即用户,user01、user02…),针对于部门内不同职责的员工,会为其赋予不同的权限,如为user01赋予可读写权限,为user02赋予只读权限,不为user03赋予任何权限,此时由于这些员工属于同一部门,就无法为这些不同的员工进行权限的细化。为此ACL(Access Control List)访问控制列表技术应运而生,使用ACL权限控制可以提供常见权限(如rwx、ugo)权限之外的权限设,置,可以针对单一用户或组来设置特定的权限。

使用ACL必须要有文件系统的支持,目前ext3/ext4/xfs/zfs都支持文件ACL。

相关命令

  • setfacl:设置文件的acl

  • getfacl:获取文件的acl

  • chacl:更改文件或目录的ACL

操作实验

用户权限配置

  • user01创建文件并配置600权限

1
2
3
4
5
6
7
8
9
10
11
[root@txy201-51 data]# su user01
[user01@txy201-51 data]$ echo 51yunwei.top > acltest
[user01@txy201-51 data]$ chmod 600 acltest
[user01@txy201-51 data]$ getfacl acltest
# file: acltest
# owner: user01
# group: user01
user::rw-
group::---
other::---

  • 测试user02有没有访问权限(无)

1
2
3
[root@txy201-51 data]# su user02
[user02@txy201-51 data]$ cat acltest
cat: acltest: 权限不够
  • 使用setfacl给user02配置权限

1
2
3
4
5
6
7
8
9
10
[user01@txy201-51 data]$ setfacl -m user02:r acltest
[user01@txy201-51 data]$ getfacl acltest
# file: acltest
# owner: user01
# group: user01
user::rw-
user:user02:r--
group::---
mask::r--
other::---
  • user02测试是否能读(可以)、写文件(不可以)

1
2
3
4
5
[root@txy201-51 data]# su user02
[user02@txy201-51 data]$ cat acltest
51yunwei.top
[user02@txy201-51 data]$ echo www.51yunwei.top >> acltest
bash: acltest: 权限不够
  • 修改user02的权限为读写

1
2
3
4
5
6
[root@txy201-51 data]# setfacl -m user02:rw acltest
[root@txy201-51 data]# su user02
[user02@txy201-51 data]$ echo www.51yunwei.top >> acltest
[user02@txy201-51 data]$ cat acltest
51yunwei.top
www.51yunwei.top
  • 删除权限

1
2
3
4
5
6
7
8
9
[root@txy201-51 data]# setfacl -x user02 acltest
[root@txy201-51 data]# getfacl acltest
# file: acltest
# owner: user01
# group: user01
user::rw-
group::---
mask::r--
other::---

组权限

setfacl默认对用户acl进行管理,如果要为组设置acl,只需要加上一个组的标识g:即可。

  • 当前user03没有访问权限

1
2
3
4
5
[root@txy201-51 data]# id user03
uid=1005(user03) gid=1006(user03) 组=1006(user03),1004(user01)
[root@txy201-51 data]# su user03
[user03@txy201-51 data]$ cat acltest
cat: acltest: 权限不够
  • 给user01组设置权限后,user03就能访问文件了(user03也在user01组)

1
2
3
4
5
[root@txy201-51 data]# setfacl -m g:user01:r acltest
[root@txy201-51 data]# su user03
[user03@txy201-51 data]$ cat acltest
51yunwei.top
www.51yunwei.top

系统文件权限的备份与恢复

在运维过程中,最怕误操作将全局的文件权限给修改了,比如执行了chmod 777 -R /chown -R user01:user01 /,那如果真的遇到了这种情况我们应该怎么做呢?在日常运维中,我们可以把系统权限信息进行备份,在必要时进行恢复。

  • 备份文件权限

1
getfacl -p > 备份文件
  • 恢复文件权限

1
setfacl --restore=备份的文件

实战篇

  • 实验目录/tmp/data,文件结构如下

1
2
3
4
5
6
7
8
9
10
11
12
[root@txy201-51 data]# ls -lR
.:
总用量 8
-rw-r-----+ 1 user01 user01 30 6月 20 16:13 acltest
drwxr-xr-x 2 root root 4096 6月 20 16:30 yunwei

./yunwei:
总用量 0
-rw-r--r-- 1 root root 0 6月 20 16:30 51yunwei
-rw-r--r-- 1 root root 0 6月 20 16:30 top
-rw-r--r-- 1 root root 0 6月 20 16:30 www
[root@txy201-51 data]#
  • 将目录的权限备份到tmp_data_acl.bak下

1
[root@txy201-51 data]# getfacl -R -p /tmp/data > tmp_data_acl.bak
  • 模拟误操作,修改目录下的所有权限和属主

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[root@txy201-51 data]# chown user01:user01 -R /tmp/data
[root@txy201-51 data]# chmod 400 -R /tmp/data
[root@txy201-51 data]# ls -lR
.:
总用量 12
-r--------+ 1 user01 user01 30 6月 20 16:13 acltest
-r-------- 1 user01 user01 670 6月 20 17:24 tmp_data_acl.bak
dr-------- 2 user01 user01 4096 6月 20 16:30 yunwei

./yunwei:
总用量 0
-r-------- 1 user01 user01 0 6月 20 16:30 51yunwei
-r-------- 1 user01 user01 0 6月 20 16:30 top
-r-------- 1 user01 user01 0 6月 20 16:30 www
[root@txy201-51 data]#
  • 恢复权限,可以看到权限已恢复正常。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@txy201-51 data]# setfacl --restore=tmp_data_acl.bak
[root@txy201-51 data]# ls -lR
.:
总用量 12
-rw-rw----+ 1 user01 user01 30 6月 20 16:13 acltest
-rw-r--r-- 1 root root 670 6月 20 17:24 tmp_data_acl.bak
drwxr-xr-x 2 root root 4096 6月 20 16:30 yunwei

./yunwei:
总用量 0
-rw-r--r-- 1 root root 0 6月 20 16:30 51yunwei
-rw-r--r-- 1 root root 0 6月 20 16:30 top
-rw-r--r-- 1 root root 0 6月 20 16:30 www
[root@txy201-51 data]#

如果没有提前备份的话,可以同其它相同系统做一次备份,将文件拷贝过来做恢复,对于没在备份中的文件,权限不会被修改。