Ansible user模块是管理Linux账户最安全的方式,支持幂等操作、密码加密、密钥分发及账户审计;需用SHA512哈希密码,配置home目录与shell,部署SSH公钥并禁用密码登录,按策略锁定或删除账户,最后生成合规报告。

Ansible 的 user 模块是管理 Linux 账户最常用、最安全的方式,无需手动编辑 /etc/passwd 或运行 useradd 命令,所有操作幂等、可审计、支持密码加密与密钥分发。
批量创建带加密密码的普通用户
Ansible 不接受明文密码,需提前用 password_hash 过滤器生成 SHA512 加密串(推荐)。可在 playbook 中直接调用,也可用命令行预生成:
- 生成密码哈希(例如密码为
MyPass123!):python3 -c "import crypt; print(crypt.crypt('MyPass123!', crypt.mksalt(crypt.METHOD_SHA512)'))" - 在 playbook 中使用变量或内联哈希,确保
password字段值以$6$开头(SHA512 标识) - 设置
create_home: yes和shell: /bin/bash保证环境完整
统一配置 SSH 公钥并禁用密码登录
对运维账户,应默认部署公钥并关闭密码认证,提升批量管理安全性:
- 用
authorized_key模块将同一份公钥(如files/admin_id_rsa.pub)注入多个用户的~/.ssh/authorized_keys - 配合
user模块的ssh_key参数或单独任务,确保权限为0600、目录为0700 - 通过
ansible.builtin.lineinfile修改/etc/ssh/sshd_config,设PasswordAuthentication no,再systemctl reload sshd
批量禁用、锁定或删除过期账户
安全策略要求及时清理闲置账户。Ansible 可按条件批量操作,避免遗漏:
-
state: absent彻底删除用户及主目录(加remove: yes) -
state: present配合expires(时间戳)或password_lock: yes实现软锁定 - 结合
when条件判断,例如只对group_names包含legacy的用户执行锁定 - 建议先用
check_mode: yes预览变更,确认无误后再执行
审计账户状态并生成合规报告
定期验证账户配置是否符合安全基线,Ansible 可收集关键字段并输出结构化结果:
- 用
ansible.builtin.user的gather_facts: no+ansible.builtin.getent获取当前用户列表 - 用
ansible.builtin.stat检查/home/{{ item }}/是否存在、.ssh/authorized_keys权限是否合规 - 将结果注册为变量,用
ansible.builtin.debug或community.general.csv输出成表格供审计 - 敏感操作(如删户)建议记录日志:在 task 中添加
args: { creates: "/var/log/ansible-user-delete-{{ ansible_date_time.iso8601 }}" }

















