> 软件包与系统管理 > acl

ACL: 访问控制列表管理

ACL(访问控制列表)是 Linux 系统的一项功能,允许您为文件和目录设置细粒度的权限。除了传统的用户、组和其他权限外,您还可以为特定用户或组授予或撤销单独的读、写、执行权限。`acl` 本身不是一个命令,它主要通过 `getfacl` 和 `setfacl` 命令进行管理。

概述

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` 中)。


相同类别命令