如何使用 Ansible 管理访问控制列表

使用 Ansible 的 ACL 模块自动化 ACL 管理是增强安全策略的明智方法。
167 位读者喜欢这篇文章。
Automated provisioning in Kubernetes

Opensource.com

假设你是一家快速发展的敏捷环境中的一位新的 DevOps 工程师,最近你的公司经历了惊人的增长。为了支持扩展,公司在上个季度增加了 25% 的招聘,并在其基础设施中增加了 5,000 多台服务器和网络设备。该公司现在拥有超过 13,000 名用户,你需要一种工具来扩展现有基础设施并管理大量用户及其数千个文件和目录。该公司决定在全公司范围内采用 Ansible 来管理 访问控制列表 (ACL),并解决有效管理文件、目录和权限的需求。

Ansible 可用于执行大量的管理和维护任务,作为 DevOps 工程师或管理员,你很可能被委派使用它来管理 ACL。

关于管理 ACL

ACL 允许普通用户与其他用户和组选择性地共享其文件和目录。借助 ACL,用户可以授予其他人读取、写入和执行文件和目录的能力,而无需将这些文件系统元素保持开放状态。

ACL 是使用 setfacl 实用程序在命令行中设置和删除的。该命令通常后跟文件或目录的名称。要设置权限,可以使用 Linux 命令 setfacl -m d:o:rx <目录>(例如,setfacl -m d:o:rx Music/)。要查看目录的当前权限,可以使用命令 getfacl <目录>(例如,getfacl Music/)。要从文件或目录中删除 ACL,可以键入命令 # setfacl -x <file/directory>(仅从文件/目录中删除指定的 ACL)或 # setfacl -b <file/directory>(从文件/目录中删除所有 ACL)。

只有分配给文件或目录的所有者才能设置 ACL。(在你作为管理员使用 Ansible 管理 ACL 之前,理解这一点非常重要。)还有默认的 ACL,用于控制目录访问;如果目录中的文件没有 ACL,则应用默认 ACL。

sudo setfacl -m d:o:rx Music
getfacl Music/
# file: Music/
# owner: root
# group:  root
user::rwx
group::---
other::---
default:user::rwx
default:group::---
default:other::r-x

Ansible 登场

那么,Ansible 如何以其所有的智慧来完成将权限应用于用户、文件、目录等任务呢? Ansible 可以很好地与 ACL 协同工作,就像它与其他许多功能、实用程序、API 等一样。 Ansible 有一个开箱即用的 ACL 模块,允许你创建围绕授予用户对文件的访问权限、删除用户对特定文件的 ACL、设置用户对文件的默认 ACL 或获取特定文件的 ACL 的剧本/角色。

任何时候你管理 ACL,都应该使用“最小权限”的最佳实践,这意味着你应仅向用户授予他们执行其角色或执行任务所需的访问权限,并且不再更多。克制和最小化攻击面至关重要。扩展的访问权限越多,未经授权访问公司资产的风险就越高。

这是一个 Ansible 剧本示例

Ansible playbook

作为管理员,自动化 ACL 管理要求你的 Ansible 剧本可以在你的基础设施中扩展,以提高速度、提高效率并减少实现目标所需的时间。有时你需要确定特定文件的 ACL。这本质上与在 Linux 中使用 getfacl <filename> 相同。 如果你想确定许多特定文件的 ACL,请从如下所示的剧本开始

---
- hosts:  all
  tasks:
    - name:  obtain the acl for a specific file
        acl: 
         path: /etc/logrotate.d
         user_nfsv4_acls:  true
        register:  acl_info

你可以使用以下剧本来设置文件/目录的权限

Ansible playbook

此剧本授予用户对文件的访问权限

- hosts:  
  become: yes
  gather_facts: no
  tasks:  
    - name: Grant user Shirley read access to a file
        acl:
          path: /etc/foo.conf
          entity:  shirley
          etype:  user
          permissions:  r
          state: present

此剧本授予用户对目录的访问权限

---
- hosts: all
  become: yes
  gather_facts: no
  tasks:
  - name: setting permissions on directory and user
    acl:
      path: /path/to/scripts/directory
      entity: "{{ item }}"
      etype: user
      permissions: rwx
      state: present
    loop:
      - www-data
      - root

安全性实现了吗?

将 ACL 应用于文件和用户是你在 DevOps 工程师的角色中应该认真对待的实践。 安全最佳实践和正式合规性通常很少或根本没有受到关注。 当你允许访问包含敏感数据的文件时,你始终面临数据被篡改、盗窃或删除的风险。 因此,数据保护必须是你安全策略的重点。 正如这里所展示的,Ansible 可以成为你的安全自动化策略的一部分,并且你的 ACL 应用程序与任何其他地方一样,是一个很好的起点。

当然,自动化你的安全实践将不仅仅是管理 ACL;它还可能涉及 SELinux 配置、密码学、安全性和合规性。 请记住,Ansible 还允许你定义你的安全系统,无论是锁定用户和组(例如,管理 ACL)、设置防火墙规则还是应用自定义安全策略。

你的安全策略应该从基线计划开始。 作为 DevOps 工程师或管理员,你应该检查当前的安全策略(或缺乏安全策略),然后制定在你的环境中自动化安全的计划。

结论

使用 Ansible 管理你的 ACL 作为你的整体安全自动化策略的一部分,取决于你工作的公司规模以及你管理的基础设施。 权限、用户和文件可能会很快失控,可能会使你的安全处于危险之中,并将公司置于你绝对不希望它处于的位置。

User profile image.
Taz Brown 是 Cisco Systems 的高级技术 Scrum Master 和敏捷专家,也是与 DevOps 和软件开发团队合作的产品经理。 她是一位热情的作家和演说家,在 Scrum、Agile、数字产品管理、Linux 系统工程、DevOps 解决方案的管理和部署方面拥有多元化的背景。

1 条评论

写得很好。

Creative Commons License本作品采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可。
© . All rights reserved.