为目录创建默认ACL
在日常的使用过程中,经常是通过对目录来设定ACL权限来满足应用的需求,而很少仅仅通过设置特定的文件来实现,因为这样做比较繁琐和低效。因此,下面就介绍如何来为目录创建默认的ACL。
如果希望在一个目录中新建的文件和目录都使用同一个预定的ACL,那么我们可以使用默认ACL(DefaultACL)。在对一个目录设置了默认的ACL以后,每个在目录中创建的文件都会自动继承目录的默认ACL作为自己的ACL。
具体的设置命令为: setfacl -d [目录名]。
下面的例子对新建的test目录进行ACL权限设置,并在其中新建了test1和test2文件,来看看默认ACL的设置情况。
首先,对文件夹test进行ACL权限查看如下:
$ getfacl test
# file: test
# owner: gavin
# group: gavin
user::rwx
group::rwx
other::r-x
接着,对其进行权限设置如下:
$ setfacl -d -m g:test:r test
$ getfacl test
# file: test
# owner: gavin
# group: gavin
user::rwx
group::rwx
other::r-x
default:user::rwx
default:group::rwx
default:group:test:r--
default:mask::rwx
default:other::r-x
可以看到,经过setfacl设置后,该文件夹的权限增加了以default开始的几项,表明设置成功。
然后,建立两个新的文件,然后查看他们的ACL权限信息如下:
$ touch test1 test2
$ getfacl test1
# file: test1
# owner: gavin
# group: gavin
user::rw-
group::rwx #effective:rw-
group:test:r--
mask::rw-
other::r--
$ getfacl test2
# file: test2
# owner: gavin
# group: gavin
user::rw-
group::rwx #effective:rw-
group:test:r--
mask::rw-
other::r--
可以清楚地看到:文件test1和test2自动继承了test设置的ACL。
备份和恢复ACL
目前,Linux系统中的主要的文件操作命令,如cp、mv、ls等都支持ACL。因此,在基本的文件/目录操作中可以很好地保持文件/目录的ACL权限。然而,有一些其它的命令,比如tar(文件归档)等常见的备份工具是不会保留目录和文件的ACL信息的。因此,如果希望备份和恢复带有ACL的文件和目录,那么可以先把ACL备份到一个文件里,待操作完成以后,则可以使用--restore选项来恢复这个文件/目录中保存的ACL信息。
下面给出一个具体的例子来进行说明。
(1)获取文件acl_test的ACL权限
$ getfacl acl_test
# file: acl_test
# owner: gavin
# group: gavin
user::rwx
user:test:r--
group::---
mask::r--
other::---
(2)将该文件的ACL权限保存至acl_test.acl文件中并进行查看
$ getfacl acl_test > acl_test.acl
$ cat acl_test.acl
# file: acl_test
# owner: gavin
# group: gavin
user::rwx
user:test:r--
group::---
mask::r--
other::---
(3)使用tar命令进行文件操作,并查看生成文件acl.tar的ACL权限,发现其并不具备ACL权限
$ tar czvf acl.tar acl_test
acl_test
$ getfacl acl.tar
# file: acl.tar
# owner: gavin
# group: gavin
user::rw-
group::rw-
other::r--
(4)删除acl_test文件,并释放acl.tar,查看其ACL权限,发现经过tar命令后,acl_test文件不在具备第(1)步显示的任何ACL权限,表明tar命令不能保持文件的ACL权限
$ rm -rf acl_test
$ tar -xzvf acl.tar
acl_test
$ getfacl acl_test
# file: acl_test
# owner: gavin
# group: gavin
user::rwx
group::r--
other::---
(5)使用命令从文件恢复acl_test的ACL权限,进行查看,表明成功恢复。
$ setfacl --restore acl_test.acl
$ getfacl acl_test
# file: acl_test
# owner: gavin
# group: gavin
user::rwx
user:test:r--
group::---
mask::r--
other::---