Ansible中ACL管理核心是acl模块,封装setfacl/getfacl,支持设置(state=present)、删除(state=absent)和查询(state=query)规则,并可通过default=yes配置目录默认ACL以实现继承;需提前确保文件系统挂载时启用acl选项。

在 Ansible 中使用 ACL 管理文件权限,核心是通过 acl 模块实现,它封装了底层 setfacl 和 getfacl 的能力,支持设置、删除和查询 ACL 规则,还能控制默认 ACL(用于目录继承)。
确认目标系统已启用 ACL 支持
Ansible 本身不负责启用文件系统级 ACL,这必须提前完成:
- 检查挂载选项是否含
acl:运行mount | grep " $(df . | tail -1 | awk '{print $1}') ",确认输出中有acl - 若未启用,需修改
/etc/fstab,在对应分区的挂载选项中加入acl(如defaults,acl),再执行mount -o remount /path - Ansible 任务中无法自动完成此步骤,建议在 play 开头用
command或shell模块校验,失败时中止
基础 ACL 设置:给用户或组授权
使用 state: present 添加规则,关键参数要配齐:
- path:必须指定绝对路径
-
entity:具体用户名或组名(如
joe或developers) -
etype:设为
user或group(不能写错) -
permissions:用小写字母组合,如
rw、rwx、rx
示例任务:
- name: Grant read-write to user alice on config fileacl:
path: /etc/myapp/config.yaml
entity: alice
etype: user
permissions: rw
state: present
设置默认 ACL 实现子项自动继承
仅对目录有效,新创建的文件/子目录会自动获得该规则(需文件系统支持且挂载带 acl):
Linux 安全审计工具,检查 SSH 配置、开放/监听端口、防火墙规则(ufw/iptables/nftables)、失败登录尝试、sudoers 权限...
- 添加
default: yes参数 - 确保
path指向目录,否则报错 - 常用搭配:对共享目录设置默认组权限,如
g:dev-team:rwx
示例任务:
- name: Set default group write on shared data diracl:
path: /srv/shared
entity: dev-team
etype: group
permissions: rwx
default: yes
state: present
查询与清理 ACL
两种典型场景:
-
查询当前 ACL:用
state: query,结果存入变量供后续判断。不修改任何内容,无副作用 -
移除某条规则:用
state: absent,只需指定path、entity、etype,无需permissions - 清空全部 ACL(慎用):Ansible 无直接等效模块,可调用
command: setfacl -b {{ path }}
查询示例:
- name: Get current ACL for auditacl:
path: /var/log/app.log
state: query
register: acl_info










