概述
ACL 提供了比传统的 Unix 权限模型(所有者、组、其他)更灵活的权限管理。您可以为特定用户或组明确指定对文件或目录的访问权限。这对于满足多个用户共享环境中的复杂权限需求非常有用。
主要特点
- 细粒度的权限控制
- 为特定用户/组授予权限
- 与默认权限 (umask) 一起工作
- 可以为目录设置默认 ACL
安装
`acl` 功能本身内置于 Linux 内核中,但要使用 `getfacl` 和 `setfacl` 命令,需要安装 `acl` 包。大多数 Linux 发行版可能默认未安装。
Debian/Ubuntu
sudo apt update && sudo apt install acl
在 Debian 或 Ubuntu 系统上安装 `acl` 包的命令。
CentOS/RHEL/Fedora
sudo yum install acl
在 CentOS、RHEL 或 Fedora 系统上安装 `acl` 包的命令。
使用示例
ACL 主要通过 `getfacl`(查询 ACL)和 `setfacl`(设置 ACL)命令进行管理。以下是一些常见的用法示例。
查询文件的 ACL
getfacl my_file.txt
使用 `getfacl` 命令查看特定文件或目录的当前 ACL。
为特定用户授予读/写权限
setfacl -m u:user1:rw my_file.txt
使用 `setfacl -m` 选项为用户 'user1' 授予对 'my_file.txt' 的读 (r) 和写 (w) 权限。
为特定组授予执行权限
setfacl -m g:dev_group:x my_script.sh
使用 `setfacl -m` 选项为组 'dev_group' 授予对 'my_script.sh' 的执行 (x) 权限。
删除 ACL 条目
setfacl -x u:user1 my_file.txt
使用 `setfacl -x` 选项删除用户 'user1' 的 ACL 条目。
为目录设置默认 ACL
setfacl -m d:u:user2:rwx my_directory/
为目录设置默认 ACL,以便新创建的文件或目录可以继承特定的 ACL。使用 `d:` 前缀。
删除所有 ACL
setfacl -b my_file.txt
使用 `setfacl -b` 选项删除文件或目录的所有扩展 ACL 条目,并恢复到传统的权限。
提示与注意事项
使用 ACL 时,理解其与传统权限系统的交互非常重要。
ACL 与传统权限
- 已设置 ACL 的文件/目录的 `ls -l` 输出将在权限字符串末尾附加一个 `+` 号。
- ACL 在传统权限(所有者、组、其他)之上授予附加权限。`mask` 条目限制了 ACL 的最大有效权限。
- 设置过于复杂的 ACL 可能会使权限管理变得困难,因此应谨慎使用,仅在必要时使用。
理解 mask 条目
设置 ACL 时,`mask` 条目可能会自动创建或更新。此 `mask` 定义了授予用户 (u:)、组 (g:)、命名用户 (u:name:)、命名组 (g:name:) 条目的最大有效权限。即使授予的权限超过 `mask`,也会被 `mask` 限制。您可以通过 `setfacl -m m::rw` 等方式手动设置 `mask`。
文件系统支持
要使用 ACL,文件系统必须支持 ACL。大多数现代 Linux 文件系统,如 ext2、ext3、ext4、XFS 等,都支持 ACL。您可能需要检查文件系统挂载时是否启用了 `acl` 选项(例如,在 `/etc/fstab` 中)。