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
相关推荐
运维全栈笔记1 分钟前
Linux安装配置Tomcat保姆级教程:从部署到性能调优
linux·服务器·中间件·tomcat·apache·web
dllmayday1 小时前
Linux 上用终端连接 WiFi
linux·服务器·windows
ACP广源盛139246256731 小时前
IX8024与科学大模型的碰撞@ACP#筑牢科研 AI 算力高速枢纽分享
运维·服务器·网络·数据库·人工智能·嵌入式硬件·电脑
峥无2 小时前
Linux系统编程基石:静态库·动态库·ELF文件·进程地址空间全景图
linux·运维·服务器
BenSmith2 小时前
从零上手嵌入式 RTOS:以 Raspberry Pi Pico 2 WH 为例的烧录、定制构建与多系统对比指南
安全
用户2367829801683 小时前
从 chmod 755 说起:Unix 文件权限到底是怎么算的?
linux
码云数智-大飞3 小时前
本地部署大模型:隐私安全与多元优势一站式解读
运维·网络·人工智能
Strugglingler3 小时前
【systemctl 学习总结】
linux·systemd·systemctl·journalctl·unit file
汇智信科3 小时前
训练安全管理系统:赋能军消装备训练,实现全流程智能化管控
安全·训练安全管理·装备训练智能化·军事训练保障·消防训练管理
Harvy_没救了4 小时前
【网络部署】 Win11 + VMware CentOS8 + Nginx 文件共享服务 Wiki
运维·网络·nginx