从图中可以看出,testdir 目录不仅继承了 tester 的访问权限,还继承了父目录上的 default 权限。也就是说我们通过这种方式设置在目录上的权限可以被子目录递归的继承下去。
更改 ACL 权限-m 选项其实是在更改文件和目录的 ACL 权限
当一个用户或组的 ACL 权限不存在时,-m 选项执行的是添加操作,
如果一个用户或组的 ACL 权限已经存在时,-m 选项执行的是更新操作。
我们重新创建一个 aclfile 文件,通过下面的命令设置 tester 用户对它的访问权限:
$ setfacl -m u:tester:rwx aclfile
这时 -m 选项是在添加 ACL 权限。然后我们修改 tester 用户的权限,移除其对 aclfile 的执行权限:
$ setfacl -m u:tester:rw aclfile
这时 -m 选项是在更改现有的 ACL 权限。接下来再让我们试一下为不同的用户或组设置 ACL 权限:
$ setfacl -m g:tester1:rwx aclfile
这次是新添加了 group tester1 的权限,并且没有影响 tester 用户的权限。
--set 选项会先清除掉原有的 ACL 权限,然后添加新的权限
我们接着设置 aclfile 文件的 ACL 权限:
$ setfacl --set u::rw,u:tester2:rwx,g::r,o::- aclfile
需要注意的是一定要包含 UGO 权限的设置,不能象 -m 一样只包含 ACL 权限。o::- 是另一个需要注意的地方,其完整的写法是 other::-,就像 u::rw 的完整写法是 user::rw- 一样。通常我们可以把 "-" 省略,但是当权限位只包含 "-" 时,就至少要保留一个。如果写成了o::,就会报错。
删除 ACL 权限有添加就有删除,我们可以通过 setfacl 命令��� -x 选项来删除指定用户或组的 ACL 权限,还可以通过 -b 选项来清除文件和目录上所有的 ACL 权限。
我们创建一个新的测试文件 aclfile,并设置下面的 ACL 权限:
$ setfacl -m u:tester:rwx,u:tester1:rw,g:tester2:rwx aclfile
下面通过 -x 选项删除 group tester2 的 ACL 权限(注意命令中只指定了组的名称而没有指定权限信息):
$ setfacl -x g:tester2 aclfile
查看一下结果,发现下图中已经没有 group:tester2 的权限信息了:
下面通过 -b 选项一次性删除 aclfile 上所有的 ACL 权限:
$ setfacl -b aclfile
-b 选项直接清除了文件上的所有 ACL 权限。这个行为对于目录来说也是一样的,这里就不再演示了。
备份和恢复 ACL 权限常见的文件操作命令 cp 和 mv 等都支持 ACL 权限,只是 cp 命令需要加上 -p 参数。但是 tar 等常见的备份工具不会保留目录和文件的 ACL 权限信息。如果希望备份和恢复带有 ACL 权限的文件和目录,可以先把 ACL 权限信息备份到一个文件里,然后再用 -restore 选项来恢复这些信息。下面演示 ACL 权限的保存和恢复。我们先创建下面的目录结构:
并分别为 acldir 目录和 aclfile 文件设置 ACL 权限:
然后使用下面的命令导出 acldir 目录的 ACL 权限信息并保存到文件 acldir.acl 文件中:
$ getfacl -R acldir > acldir.acl
接下来删除掉 acldir 目录的 ACL 权限:
$ setfacl -R -b acldir
现在 acldir 目录及其子文件上的 ACL 权限都被删除掉了。最后我们再通过下面的命令把它们的 ACL 权限都恢复回来:
$ setfacl --restore acldir.acl
之前删除的 ACL 权限全都恢复回来了!
Linux公社的RSS地址:https://www.linuxidc.com/rssFeed.aspx