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
相关推荐
wzb562 小时前
把 Vim 打造成 Nginx 开发 / 调试 IDE(WSL Ubuntu 完整教程)
linux·ide·nginx·ubuntu·vim·c/c++
l1t2 小时前
修改OraDB-DUMP-Viewer-3.1.1的windows dll 版本test_export示例为Linux
linux·人工智能·windows·oracle
常利兵2 小时前
安卓开发避坑指南:全局异常捕获与优雅处理实战
android·服务器·php
oi..2 小时前
Linux入门(2)
linux·笔记·测试工具·安全·网络安全
星夜落月2 小时前
ONLYOFFICE Docs 自托管在线办公套件搭建指南
服务器·网络·onlyoffice
鄃鳕2 小时前
vscode远程连接virtualBox上的Ubuntu
linux·运维·ubuntu
@土豆2 小时前
【混合云组网实战】Docker部署内网互通服务,实现本地网段访问公有云VPC私网
运维·docker·容器
AI自动化工坊2 小时前
工程实践:AI Agent双重安全验证机制的技术实现方案
网络·人工智能·安全·ai·ai agent
Lucis__2 小时前
Linux系统收官篇:线程学习的一些心得总结
linux·学习·线程