Linux权限控制列表 ACL修改
0X00 ACL是什么
ACL的全称是Access Control List
访问控制列表。在Linux中可以给文件设置权限,-rwx-rw-rw
这样,但是这里并不能细分,只能分到用户、组、其他用户。如果我想给某个单独的用户设置权限的话是做不到的。所以有了ACL的出现。通过ACL可以给Linux下的文件提供详细的访问控制,比如我们在设置了基本的rwx
权限之后,可以通过ACL在细分用户对文件的权限。
0X01 查看文件的ACL
使用getfacl
命令可以查看文件的ACL和详细的权限设置。
1 | [root@iZ28jaak5nnZ ~]# ls -l |
这里显示了文件名、所属用户、所属组、还有相对应的权限。
0X02 创建测试用户/组/文件
先创建测试用户、测试组、测试文件。创建了xiaoming
和xiaohong
两个用户,在china
组,创建了一个jack
用户在usa
组。然后用root用户在/tmp/
目录下创建了一个acltest目录,用来做测试,因为这个目录是任何人都可以访问的,但是由于是root用户创建的子目录,所以要给这个目录777
的权限,让其他用户可以在里面测试。现在里面又创建了一些目录和文件,但是全部都是root用户的,文件权限是644
,目录权限是755
。
1 | [root@iZ28jaak5nnZ ~]# groupadd china |
0X03 设置文件的ACL
使用setfacl
命令可以设置文件ACL。这个命令有下面这几个常用参数
setfacl 各个参数
- 所谓的后续ACL就是在默认ACL的基础上添加的新的规则。
-m 设置后续ACL
对某一个文件/目录设置某一个用户的访问权限, u表示用户 冒号后面是用户名 再一个冒号后面是权限 最后接文件/目录[root@iZ28jaak5nnZ acltest]# setfacl -m u:user_1:rwx file_1
对某一个文件/目录设置某一个用户组的访问权限,u表示组 冒号后面是组名 再一个冒号后面是权限 最后接文件/目录[root@iZ28jaak5nnZ acltest]# setfacl -m g:group_1:rwx file_1
-x 删除后续ACL
删除之前添加的ACL项,指定用户或者指定组都是可以的,语法和上面差不多。这里删除的是一条ACL数据,下面说的-b参数是删除所有的ACL数据
1 | [root@iZ28jaak5nnZ acltest]# setfacl -x u:xiaoming file_1 |
-b 删除所有后续ACL
这里是删除之前创建的所有ACL,包括下面会说的默认ACL
1 | [root@iZ28jaak5nnZ acltest]# getfacl file_1 |
-d 设置默认ACL
设置默认ACL只能为目录设置,为目录设置了ACL之后里面新建的目录和文件都是使用这个默认的ACL
1 | [root@iZ28jaak5nnZ acltest]# getfacl dir_1 |
-k 删除默认ACL
这里可以删除之前设置的默认ACL,只限默认ACL
1 | [root@iZ28jaak5nnZ acltest]# getfacl dir_3 # 查看ACL,这里显示有默认的ACL |
-R 递归设置ACL
给某一个目录设置递归的ACL之后这个目录和这个目录里的文件和子目录全部都会应用这个ACL,也就是说是相当于应用到了这个目录下的所有文件和目录
1 | # 首先创建一下测试用的目录结构 |