在企业运维环境中,服务器的用户管理是一项基础但非常重要的任务。比如,当有新员工加入时,我们需要在多台服务器上为他们创建账户并分配合适的权限。而当员工离职或岗位发生变化时,我们也需要迅速禁用或删除他们的账户,以避免潜在的安全风险。
如果采用手动方式来完成这些任务,就需要在每台服务器上逐一执行一系列命令,比如 useradd
、passwd
和 chage
等,这不仅耗时费力,还容易出现错误。幸运的是,Ansible
提供了一个非常方便的 user
模块,可以帮助我们高效地进行批量用户管理,从而确保操作的安全性和一致性。
⚓user模块的核心功能
要了解user
模块的详细用法,我们可以使用ansible-doc
命令。只需运行以下命令即可查看相关信息:
ansible-doc -s user
成功执行上述命令后,会展示如下图的结果:
user
模块提供了许多实用的功能,主要包括以下几点:
-
创建或删除用户
-
设置密码
-
指定用户的
UID
、GID
-
指定用户所属组
-
创建
home
目录 -
设定
Shell
-
设定
SSH
公钥认证
常用参数说明:
参数 | 作用 |
---|---|
name | 指定用户名 |
state | present (创建用户)或 absent (删除用户) |
password | 用户密码(需加密) |
uid | 指定用户UID |
group | 指定用户所属组 |
groups | 指定用户附加的组 |
home | 指定 home 目录路径 |
shell | 指定默认Shell ,如 /bin/bash |
create_home | 是否创建 home 目录(默认yes ) |
remove | absent 时是否删除 home 目录 |
expires | 指定密码过期时间(时间戳格式) |
⚓实战案例分析
📝案例 1:批量创建开发团队账户
需求:为3名新入职开发人员创建账户,要求:
-
创建主目录
/home/dev_username
-
加入
docker
、git
附加组 -
禁止
SSH
密码登录 -
设置初始密码
- name: Create developer accountshosts: dev_serversbecome: yesvars:developers:- { name: 'alice', uid: 2001 }- { name: 'bob', uid: 2002 }- { name: 'charlie', uid: 2003 }tasks:- name: Create developer usersansible.builtin.user:name: "{{ item.name }}"uid: "{{ item.uid }}"groups: docker,gitappend: yesshell: /bin/bashpassword: "$6$rounds=656000$SAlt1234$XH6X8L8Dz4tdj.7WZ2TvWUDO2w/lk5sABC1234ABCDefgHIJKLmnopqrSTUVWXYZ"generate_ssh_key: yesssh_key_bits: 4096create_home: yesloop: "{{ developers }}"
关键点说明:
使用
loop
实现批量创建
password
参数使用python
中crypt
生成的哈希密文自动生成
4096
位RSA
密钥对保持默认主组,同时附加到
docker
和git
组
通过执行如下命令,即可批量创建用户:
ansible-playbook Create_developer_accounts.yml
创建成功后可以看到如下图的结果:
📝案例 2:为运维账户配置Sudo权限
创建opsadmin
账户并授予免密sudo
权限
- name: Configure ops adminhosts: dev_serversbecome: yestasks:- name: Create ops useransible.builtin.user:name: opsadmingroups: wheelshell: /bin/bashcomment: "Operations Administrator"- name: Configure passwordless sudoansible.builtin.lineinfile:path: /etc/sudoersline: 'opsadmin ALL=(ALL) NOPASSWD:ALL'validate: 'visudo -cf %s'
validate: 'visudo -cf %s'
:
在修改前使用
visudo -cf /etc/sudoers
进行语法检查。防止
sudoers
文件写错,避免系统无法使用sudo
。
ansible-playbook Configure_ops_admin.yml
成功执行上述命令后,您将会看到如下图所示的结果:
📝案例3:安全删除离职用户
需求:安全移除已离职员工账户,删除用户但保留主目录。
- name: Remove deprecated usershosts: dev_serversbecome: yesvars:departed_users: ['alice', 'bob']tasks:- name: Remove user accountsansible.builtin.user:name: "{{ item }}"state: absentremove: no # 不删除主目录loop: "{{ departed_users }}"
成功执行下面的命令后,会把定义的用户删除,但是会保留删除用户的家目录,如下图所示:
ansible-playbook Remove_deprecated_users.yml
📝案例 4:禁用用户
需求:禁用 charlie
账户,但不删除,确保其 home
目录仍然保留。
- name: 禁用用户hosts: dev_serversbecome: yestasks:- name: 锁定 charlie 账户ansible.builtin.user:name: charliepassword_lock: yes
成功执行如下命令会输入如下图的结果:
ansible-playbook lock_charlie.yml
⚓总结
Ansible
的user
模块为 Linux
服务器的用户管理提供了强大的自动化能力,可以大幅提升运维效率并减少人为失误。本文通过典型场景展示了以下关键功能:
-
创建批量用户并分配权限
-
为运维账号配置
Sudo
权限 -
禁用用户
-
删除用户并保留
home
目录
通过这些案例,相信你已经掌握了 user
模块的基本用法,并能在实际工作中灵活应用。希望这篇教程能帮助你更轻松地管理服务器用户,提高运维自动化能力! 🚀
推荐阅读
- 登录即见:打造服务器欢迎信息,提升用户体验
- 自动化压缩新姿势!教你用Ansible Archive模块高效管理文件
- 提升运维效率:Ansible systemd 模块操作技巧,让你告别繁琐命令行!
- Ansible fetch模块详解:轻松从远程主机抓取文件
- 告别手动编辑:如何用Python快速创建Ansible hosts文件?
- 一分钟学会Ansible cron模块,高效管理你的定时任务