14.9.文件系统访问控制表

访问控制列表(ACL)以 POSIX®.1e 兼容的方式扩展了标准 UNIX® 权限模型。这使得管理员可以利用更细化的权限模型。

FreeBSD GENERIC 内核为 UFS 文件系统提供了 ACL 支持。喜欢编译定制内核的用户必须在他们的定制内核配置文件中加入下列选项:

  1. options UFS_ACL

如果未编译此选项,则在尝试挂载支持 ACL 的文件系统时将显示一条警告消息。ACL 依赖于 UFS2 中本机支持的扩展属性。

本章介绍如何启用 ACL 支持,并提供一些使用示例。

14.9.1. 启用 ACL 支持

ACL 是由挂载时管理标志 acls 启用的,它可以被添加到 /etc/fstab 中。挂载时标志也可以通过 tunefs(8) 修改文件系统头中的超级块 ACL 标志,以一种持久的方式自动设置。一般来说,出于几个原因,最好使用超级块标志。

  • 超级块标志不能被使用 mount -u 的重新挂载所改变,因为它需要一个完整的 umount 和重新挂载。这意味着启动后不能在根文件系统上启用 ACL。这也意味着文件系统上的 ACL 支持在系统使用时不能被改变。
  • 设置超级块标志会导致文件系统始终在启用 ACL 的情况下挂载,即使没有 fstab 条目或设备重新排序也是如此。这可以防止在没有 ACL 支持的情况下意外挂载文件系统。
注意
阻止在没有启用 ACL 的情况下意外挂载是可取的,因为如果 ACL 被启用,然后被禁用,然后在没有刷新扩展属性的情况下重新启用,就会发生令人讨厌的事情。一般来说,一旦在文件系统上启用了 ACL,就不应该被禁用,因为所产生的文件保护可能与系统用户所期望的不一致,而且重新启用 ACL 可能会将以前的 ACL 重新附加到权限已经改变的文件上,导致不可预测的行为。

启用了 ACL 的文件系统将在其权限设置中显示加号(+) 号:

  1. drwx------ 2 robert robert 512 Dec 27 11:54 private
  2. drwxrwx---+ 2 robert robert 512 Dec 23 10:57 directory1
  3. drwxrwx---+ 2 robert robert 512 Dec 22 10:20 directory2
  4. drwxrwx---+ 2 robert robert 512 Dec 27 11:57 directory3
  5. drwxr-xr-x 2 robert robert 512 Nov 10 11:54 public_html

在此示例中,directory1directory2directory3 都利用了 ACL,而 privatepublic_html 则没有。

14.9.2. 使用 ACL

文件系统的 ACL 可以用 getfacl 查看。例如,要查看 test 中的 ACL 设置。

  1. % getfacl test
  2. #file:test
  3. #owner:1001
  4. #group:1001
  5. user::rw-
  6. group::r--
  7. other::r--

要改变这个文件的 ACL 设置,使用 setfacl。要从一个文件或文件系统中删除所有当前定义的 ACL,请使用 -k。然而,首选方法是使用 -b,因为它留下了 ACL 工作所需的基本字段。

  1. % setfacl -k test

要修改默认 ACL 条目,请使用 -m

  1. % setfacl -m u:trhodes:rwx,group:web:r--,o::--- test

在这个例子中,没有预定义的条目,因为它们已经被前一条命令删除了。这条命令恢复了默认选项,并分配了所列的选项。如果添加的用户或组在系统中不存在,将显示一个无效的参数错误。

有关这些命令的可用选项的更多信息,请参阅 getfacl(1)setfacl(1)