You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请求协助编写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

关键逻辑说明

  1. ACL信息获取:通过getent模块读取目标文件夹的ACL数据,忽略无额外ACL时的模块报错
  2. 额外ACL过滤:剔除默认的所有者(user::)、所属组(group::)、其他用户(other::)条目,同时排除当前操作用户及所属组的自定义ACL,剩余条目即为额外权限
  3. 条件判断执行:
    • 若存在额外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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 21:21:36