16.8.文件系统访问控制列表

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

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

options UFS_ACL

如果未编译此选项,则在尝试挂载支持 ACL 的文件系统时将显示一条警告消息——ACLs rely on extended attributes which are natively supported in UFS2.(ACL 依赖于 UFS2 中原生支持的扩展属性)

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

16.8.1.启用 ACL 支持

ACL 是由挂载时的管理标签 acls 启用的,可以将其添加至 /etc/fstab。也可以用 tunefs(8) 来修改文件系统标签中的超级块 ACL 标签,以实现用持久化的方式自动设置挂载时的参数。一般来说,出于几个原因,最好使用超级块标签:

  • 超级块标签不会被 mount -u 的重新挂载所改变,因为它需要完整的 umount 和新的 mount。这意味着启动后不能在根文件系统上启用 ACL。这也意味着文件系统上的 ACL 支持在系统使用时不能被改变。

  • 设置超级块标签会强制始终在启用 ACL 的情况下挂载文件系统,即使没有 fstab 参数,设备顺序发生变化也如此。这可以防止在没有启用 ACL 的情况下意外挂载文件系统。

注意

阻止在没有启用 ACL 的情况下意外挂载是可取的,因为如果 ACL 被启用,然后被禁用,紧接着在没有刷新扩展属性的情况下重新启用,就会发生令人讨厌的事情。一般来说,一旦在文件系统上启用了 ACL,就不应该被禁用,因为所产生的文件保护措施可能与系统用户所期望的不一致,而且重新启用 ACL 可能会将以前的 ACL 重新附加到权限已经改变的文件上,导致不可预测的行为。

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

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

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

16.8.2.使用 ACL

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

% getfacl test
    #file:test
    #owner:1001
    #group:1001
    user::rw-
    group::r--
    other::r--

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

% setfacl -k test

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

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

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

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