告别手动操作!用 Ansible user 模块高效管理 Linux 账户

网络 Linux
Ansible的user模块为 Linux 服务器的用户管理提供了强大的自动化能力,可以大幅提升运维效率并减少人为失误。

在企业运维环境中,服务器的用户管理是一项基础但非常重要的任务。比如,当有新员工加入时,我们需要在多台服务器上为他们创建账户并分配合适的权限。而当员工离职或岗位发生变化时,我们也需要迅速禁用或删除他们的账户,以避免潜在的安全风险。

如果采用手动方式来完成这些任务,就需要在每台服务器上逐一执行一系列命令,比如 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:Createdeveloperaccounts
hosts:dev_servers
become:yes
vars:
    developers:
      -{name:'alice',uid:2001}
      -{name:'bob',   uid:2002}
      -{name:'charlie',uid:2003}

tasks:
    -name:Createdeveloperusers
      ansible.builtin.user:
        name:"{{ item.name }}"
        uid:"{{ item.uid }}"
        groups:docker,git
        append:yes
        shell:/bin/bash
        password:"$6$rounds=656000$SAlt1234$XH6X8L8Dz4tdj.7WZ2TvWUDO2w/lk5sABC1234ABCDefgHIJKLmnopqrSTUVWXYZ"
        generate_ssh_key:yes
        ssh_key_bits:4096
        create_home:yes
      loop:"{{ developers }}"

关键点说明:

  • 使用loop实现批量创建
  • password参数使用python中crypt生成的哈希密文
  • 自动生成4096位RSA密钥对
  • 保持默认主组,同时附加到docker和git组

通过执行如下命令,即可批量创建用户:

ansible-playbook Create_developer_accounts.yml

创建成功后可以看到如下图的结果:

案例 2:为运维账户配置Sudo权限

创建opsadmin账户并授予免密sudo权限

- name:Configureopsadmin
hosts:dev_servers
become:yes
tasks:
    -name:Createopsuser
      ansible.builtin.user:
        name:opsadmin
        groups:wheel
        shell:/bin/bash
        comment:"Operations Administrator"
    
    -name:Configurepasswordlesssudo
      ansible.builtin.lineinfile:
        path:/etc/sudoers
        line:'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:Removedeprecatedusers
hosts:dev_servers
become:yes
vars:
    departed_users:['alice','bob']
tasks:
    -name:Removeuseraccounts
      ansible.builtin.user:
        name:"{{ item }}"
        state:absent
        remove:no# 不删除主目录
      loop:"{{ departed_users }}"

成功执行下面的命令后,会把定义的用户删除,但是会保留删除用户的家目录,如下图所示:

ansible-playbook  Remove_deprecated_users.yml

案例 4:禁用用户

需求:禁用 charlie账户,但不删除,确保其 home 目录仍然保留。

- name:禁用用户
hosts:dev_servers
become:yes
tasks:
    -name:锁定charlie账户
      ansible.builtin.user:
        name:charlie
        password_lock:yes

成功执行如下命令会输入如下图的结果:

ansible-playbook lock_charlie.yml

总结

Ansible的user模块为 Linux 服务器的用户管理提供了强大的自动化能力,可以大幅提升运维效率并减少人为失误。本文通过典型场景展示了以下关键功能:

  • 创建批量用户并分配权限
  • 为运维账号配置Sudo权限
  • 禁用用户
  • 删除用户并保留 home目录

通过这些案例,相信你已经掌握了 user 模块的基本用法,并能在实际工作中灵活应用。希望这篇教程能帮助你更轻松地管理服务器用户,提高运维自动化能力!

责任编辑:赵宁宁 来源: 攻城狮成长日记
相关推荐

2024-11-28 09:26:46

网络网络设备

2025-01-21 11:52:12

AnsiblePython自动化运维

2025-01-24 07:44:31

LinuxsystemdAnsible

2020-06-11 09:09:33

Ansible模块Linux

2018-03-02 06:12:22

2025-01-20 13:30:00

Linux系统Ansible

2009-06-16 09:09:59

LinuxWebminGUI

2010-05-14 09:48:07

MySQL 5 on

2010-05-26 16:21:25

2020-02-01 16:06:34

跳槽那些事儿网络安全大数据

2024-11-15 13:15:36

2010-01-26 19:42:03

IT服务运维管理摩卡软件

2010-02-03 19:14:54

IT服务运维管理摩卡软件

2022-09-23 13:57:11

xxl-job任务调度中间件

2009-12-17 16:31:44

红旗Linux软件

2024-11-01 10:30:05

2024-03-19 00:10:00

aiofilesPython开发

2025-01-15 12:25:23

自动化运维Ansible模块

2024-12-10 08:00:00

C++CRTP函数

2012-01-12 16:19:16

点赞
收藏

51CTO技术栈公众号