使用 Ansible 进行集群安全合规性扫描,你可以创建一个角色(role),用于执行安全检查任务,比如检查系统漏洞、用户权限配置、服务配置等。下面是一个基本的角色结构和示例任务,用于执行一些基础的安全合规性检查。
首先,创建角色的基础目录结构:
security_compliance/
├── defaults
│ └── main.yml
├── files
│ └── secure_config.txt
├── handlers
│ └── main.yml
├── meta
│ └── main.yml
├── tasks
│ └── main.yml
└── vars
└── main.yml
以下是每个文件的内容示例:
tasks/main.yml
: 定义要执行的安全检查任务。
---
# 安全合规性扫描任务列表
- name: 检查 SSH 配置
ansible.builtin.lineinfile:
path: /etc/ssh/sshd_config
regexp: '^PermitRootLogin'
line: 'PermitRootLogin no'
state: present
- name: 检查密码策略
ansible.builtin.include_role:
name: password_policy
- name: 检查防火墙状态
ansible.builtin.service:
name: firewalld
state: started
enabled: yes
- name: 检查未授权的 SUID/SGID 文件
ansible.builtin.script: check_suid_sgid.sh
args:
chdir: /tmp
register: sui_sgid_files
- name: 报告未授权的 SUID/SGID 文件
ansible.builtin.debug:
var: sui_sgid_files.stdout_lines
when: sui_sgid_files.stdout_lines | length > 0
- name: 检查系统更新
ansible.builtin.apt:
update_cache: yes
upgrade: yes
when: ansible_os_family == "Debian"
vars/main.yml
: 定义变量,可以为空或用于覆盖默认变量。
# 角色变量文件,可以定义一些变量供任务使用
defaults/main.yml
: 设置默认变量,可以为空。
# 默认变量文件,可以定义一些默认值供其他变量文件覆盖
handlers/main.yml
: 定义触发器,可以为空。
# 角色的触发器列表,通常用于处理任务状态变化
meta/main.yml
: 角色依赖和元数据,可以为空。
# 角色的元数据,可以定义角色依赖等信息
files/secure_config.txt
: 示例文件,用于部署安全配置。
# 一些安全配置示例
check_suid_sgid.sh
: 一个简单的脚本,用于检查未授权的 SUID/SGID 文件(放在 files/
目录下)。
#!/bin/bash
# 检查 SUID/SGID 设置的脚本
find / -perm -4000 -o -perm -2000 -type f 2>/dev/null
要使用此角色,你需要在 Playbook 中引入它:
---
- name: 集群安全合规性扫描
hosts: all
become: yes
roles:
- security_compliance
确保将此角色放置在正确的目录中,并且 Ansible 配置文件 ansible.cfg
或 Playbook 中指定了正确的角色搜索路径。
请注意,这只是一个示例,实际的安全合规性扫描可能需要更详细的检查和复杂的逻辑。你可能需要根据你的具体需求和安全策略来调整和扩展角色中的任务。此外,对于安全扫描,Ansible 社区和第三方也提供了许多专门用于安全合规性检查的角色和模块,你可以考虑使用或参考这些资源。