12、Ansible安全加固

Ansible 安全最佳实践:从基础到生产级

一、最核心:SSH 认证安全

  1. 绝对不要用密码明文
    1. 禁止在 inventory、playbook 里写 ansible_ssh_passansible_password 明文
    2. 禁止用 sshpass 跑生产环境
  2. 必须用 SSH 密钥登录
    1. 控制节点生成密钥:ssh-keygen
    2. 分发公钥:ssh-copy-id user@host
    3. 被控端禁用密码登录:PasswordAuthentication no
  3. 密钥加密码保护
    1. 生成密钥时设置 passphrase
    2. 使用 ssh-agent 避免反复输密码

二、Ansible Vault 加密敏感数据

所有密码、密钥、token 都用 Vault 加密。

1. 创建加密变量文件

Bash 复制代码
ansible-vault create secrets.yml

写入:

YAML 复制代码
db_password: xxx
api_key: xxx

2. 编辑加密文件

Bash 复制代码
ansible-vault edit secrets.yml

3. 运行 playbook 时指定 vault

Bash 复制代码
ansible-playbook site.yml --ask-vault-pass

或使用 vault 密码文件(权限设为 0600)。

三、Inventory 安全

  1. 不要把 inventory 放代码仓库
  2. 权限严格:chmod 600 hosts
  3. 不使用全局变量暴露密码
  4. 生产环境使用动态 inventory(AWS/Azure/VMware)而非静态清单

四、文件与权限安全

  1. playbook、配置文件权限 0600
  2. 临时文件安全
    1. Ansible 会在被控端生成临时文件,默认权限较宽松
    2. ansible.cfg 中设置:
      • remote_tmp = /var/tmp/ansible-$USER allow_world_readable_tmpfiles = no
  3. 日志不要泄露敏感信息
    1. no_log = true
    2. 对敏感任务单独加:
    3. - name: 导入密钥 command: ... no_log: true

五、ansible.cfg 安全配置

TOML 复制代码
[defaults]
# 不检查主机密钥(内网可开,公网不建议)
host_key_checking = False

# 日志安全
log_path = /var/log/ansible.log
no_target_syslog = True

# 禁止从当前目录加载库
library = /usr/share/ansible

# 超时
timeout = 10

[ssh_connection]
# 开启 pipelining 减少 SSH 连接,更安全更快
pipelining = True

六、执行权限最小化

  1. 不要全程用 root

    1. 使用普通用户 + sudo
    2. 在 inventory 中:
      • ansible_user=ops ansible_become=yes ansible_become_method=sudo
  2. sudo 权限最小化

  3. 不要给 NOPASSWD:ALL,只授权必要命令。

七、传输与执行安全

  1. 控制节点与被控节点内网通信
  2. 禁用 Telnet、rsh 等不安全协议
  3. 开启 SSH 安全加固:
    1. 禁用 SSH 协议 v1
    2. 禁用空密码
    3. 限制允许登录用户

八、Playbook 编写安全

  1. 不使用 shell/command 除非必要
  2. 优先使用 Ansible 模块(更安全、幂等)
  3. 变量过滤敏感内容:
    1. vars: password: "{``{ vault_db_pass }}"
  4. 不把密钥、密码输出到控制台

九、版本与漏洞安全

  1. 保持 Ansible 最新版
  2. 定期更新依赖:pip list --outdated
  3. 不用第三方未知角色,或严格审计后再用

十、生产环境终极安全方案

  1. SSH 密钥 + 密钥密码
  2. Ansible Vault 加密所有敏感配置
  3. 普通用户 + sudo 最小权限
  4. 内网隔离,禁止外网直接管理
  5. 日志审计、执行记录
  6. CI/CD 中使用秘钥管理系统(HashiCorp Vault、AWS Secrets Manager)

安全加固配置案例(可直接用于生产环境)

apl 复制代码
[defaults]
# 主机清单
inventory = ./inventory/hosts.ini

# 远程用户与权限
remote_user = ansible
ask_pass = false
host_key_checking = true

# 超时与并发
timeout = 15
forks = 10

# 日志(避免泄露敏感信息)
log_path = ./ansible.log
no_target_syslog = true
no_log = false

# 安全:禁止加载当前目录恶意模块
library = /usr/share/ansible/plugins/modules
action_plugins = /usr/share/ansible/plugins/action

# 角色与回调安全
roles_path = ./roles
callback_whitelist = profile_tasks

#  fact 缓存(可选)
gathering = smart
fact_caching = jsonfile
fact_caching_connection = /tmp/ansible_facts
fact_caching_timeout = 86400

# 禁止显示警告时泄露路径
allow_world_readable_tmpfiles = no
executable = /bin/bash

[privilege_escalation]
become = true
become_method = sudo
become_user = root
become_ask_pass = false

[ssh_connection]
# 减少连接次数,更安全更快
pipelining = true
ssh_args = -o ControlMaster=auto -o ControlPersist=60s -o StrictHostKeyChecking=yes
control_path = %(directory)s/ansible-ssh-%%h-%%p-%%r
相关推荐
●VON23 分钟前
鸿蒙 PC Markdown 编辑器内核:在 ArkWeb 中离线运行 CodeMirror 6
安全·华为·编辑器·harmonyos·鸿蒙
冰封之寂6 小时前
Docker 资源管理终极指南:CPU、内存与 IO 的精细化控制
linux·运维·服务器·docker·云计算
xiaoye-duck6 小时前
《Linux系统编程》Linux 系统多线程(五):<线程同步与互斥>线程互斥(上):从条件变量到生产者消费者模型详解
linux·线程
小柯南敲键盘7 小时前
图片翻译API接入与自动化实现指南
运维·python·自动化
zzq77977 小时前
加固包闪退四象限定位:targetSdk 与保护策略实战解析
android·安全·安卓·安全架构
云计算磊哥@7 小时前
运维开发宝典058-大型网站nginx服务器管理全集4
服务器·nginx·运维开发
952368 小时前
Docker - 基础
运维·后端·docker·容器
Promise微笑8 小时前
智能激光清障仪选型指南:高效运维与安全保障的关键考量
运维·安全
Code_Ignis8 小时前
docker国内可用源(持续维护)
运维·docker·容器
一叶龙洲8 小时前
向日葵远程Ubuntu,支持隐私屏
linux·运维·ubuntu