请求协助编写Unix服务器文件夹ACL检查与权限配置的Ansible Playbook
Ansible Playbook 实现文件夹ACL检查与权限设置
以下是满足需求的Playbook实现,包含ACL检查、额外权限判断及权限设置逻辑:
--- - name: 检查文件夹ACL并设置权限 hosts: all vars: target_dir: "/path/to/your/target/folder" # 替换为实际目标文件夹路径 tasks: - name: 获取目标文件夹的ACL信息 ansible.builtin.getent: database: acl key: "{{ target_dir }}" register: acl_data ignore_errors: true # 兼容无额外ACL的场景,避免模块报错 - name: 过滤出所有者/所属组之外的额外ACL条目 ansible.builtin.set_fact: extra_acl_entries: >- {{ acl_data.getent_acl | default([]) | reject('search', '^user::') | reject('search', '^group::') | reject('search', '^other::') | reject('search', '^user:' + ansible_user_id) | reject('search', '^group:' + ansible_user_gid) | list }} - name: 输出额外ACL存在的提示 ansible.builtin.debug: msg: "⚠️ 文件夹 {{ target_dir }} 存在所有者/所属组外的额外ACL:{{ extra_acl_entries }}" when: extra_acl_entries | length > 0 - name: 无额外ACL时设置文件夹权限为750 ansible.builtin.file: path: "{{ target_dir }}" mode: '0750' when: extra_acl_entries | length == 0
关键逻辑说明
- ACL信息获取:通过
getent模块读取目标文件夹的ACL数据,忽略无额外ACL时的模块报错 - 额外ACL过滤:剔除默认的所有者(
user::)、所属组(group::)、其他用户(other::)条目,同时排除当前操作用户及所属组的自定义ACL,剩余条目即为额外权限 - 条件判断执行:
- 若存在额外ACL,输出debug提示信息
- 若无额外ACL,调用
file模块将文件夹权限设置为750
使用注意事项
- 替换
target_dir为实际目标路径,也可通过命令行参数传入:ansible-playbook your_playbook.yml -e "target_dir=/actual/folder/path" - 确保目标服务器已安装
acl包(Debian/Ubuntu:apt install acl;RHEL/CentOS:yum install acl),否则getent模块无法读取ACL数据 - 运行Playbook需具备足够权限(如sudo),以读取ACL及修改文件夹权限
内容的提问来源于stack exchange,提问作者Ansible_Coder
相关产品推荐
相关产品推荐

