灵活运用Linux中的文件/目录访问控制机制(3)

为目录创建默认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::---

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/22232.html