告別手動操作!用 Ansible user 模塊高效管理 Linux 賬戶
在企業(yè)運維環(huán)境中,服務(wù)器的用戶管理是一項基礎(chǔ)但非常重要的任務(wù)。比如,當(dāng)有新員工加入時,我們需要在多臺服務(wù)器上為他們創(chuàng)建賬戶并分配合適的權(quán)限。而當(dāng)員工離職或崗位發(fā)生變化時,我們也需要迅速禁用或刪除他們的賬戶,以避免潛在的安全風(fēng)險。
如果采用手動方式來完成這些任務(wù),就需要在每臺服務(wù)器上逐一執(zhí)行一系列命令,比如 useradd、passwd 和 chage 等,這不僅耗時費力,還容易出現(xiàn)錯誤。幸運的是,Ansible提供了一個非常方便的 user 模塊,可以幫助我們高效地進行批量用戶管理,從而確保操作的安全性和一致性。
user模塊的核心功能
要了解user模塊的詳細(xì)用法,我們可以使用ansible-doc命令。只需運行以下命令即可查看相關(guān)信息:
ansible-doc -s user
成功執(zhí)行上述命令后,會展示如下圖的結(jié)果:
user模塊提供了許多實用的功能,主要包括以下幾點:
- 創(chuàng)建或刪除用戶
- 設(shè)置密碼
- 指定用戶的UID、GID
- 指定用戶所屬組
- 創(chuàng)建home目錄
- 設(shè)定 Shell
- 設(shè)定SSH公鑰認(rèn)證
常用參數(shù)說明:
參數(shù) | 作用 |
name | 指定用戶名 |
state | present(創(chuàng)建用戶)或 absent(刪除用戶) |
password | 用戶密碼(需加密) |
uid | 指定用戶UID |
group | 指定用戶所屬組 |
groups | 指定用戶附加的組 |
home | 指定 home目錄路徑 |
shell | 指定默認(rèn)Shell,如 /bin/bash |
create_home | 是否創(chuàng)建 home目錄(默認(rèn)yes) |
remove | absent時是否刪除 home目錄 |
expires | 指定密碼過期時間(時間戳格式) |
實戰(zhàn)案例分析
案例 1:批量創(chuàng)建開發(fā)團隊賬戶
需求:為3名新入職開發(fā)人員創(chuàng)建賬戶,要求:
- 創(chuàng)建主目錄/home/dev_username
- 加入docker、git附加組
- 禁止SSH密碼登錄
- 設(shè)置初始密碼
- 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 }}"
關(guān)鍵點說明:
- 使用loop實現(xiàn)批量創(chuàng)建
- password參數(shù)使用python中crypt生成的哈希密文
- 自動生成4096位RSA密鑰對
- 保持默認(rèn)主組,同時附加到docker和git組
通過執(zhí)行如下命令,即可批量創(chuàng)建用戶:
ansible-playbook Create_developer_accounts.yml
創(chuàng)建成功后可以看到如下圖的結(jié)果:
案例 2:為運維賬戶配置Sudo權(quán)限
創(chuàng)建opsadmin賬戶并授予免密sudo權(quán)限
- 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 文件寫錯,避免系統(tǒng)無法使用sudo。
ansible-playbook Configure_ops_admin.yml
成功執(zhí)行上述命令后,您將會看到如下圖所示的結(jié)果:
案例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 }}"
成功執(zhí)行下面的命令后,會把定義的用戶刪除,但是會保留刪除用戶的家目錄,如下圖所示:
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
成功執(zhí)行如下命令會輸入如下圖的結(jié)果:
ansible-playbook lock_charlie.yml
總結(jié)
Ansible的user模塊為 Linux 服務(wù)器的用戶管理提供了強大的自動化能力,可以大幅提升運維效率并減少人為失誤。本文通過典型場景展示了以下關(guān)鍵功能:
- 創(chuàng)建批量用戶并分配權(quán)限
- 為運維賬號配置Sudo權(quán)限
- 禁用用戶
- 刪除用戶并保留 home目錄
通過這些案例,相信你已經(jīng)掌握了 user 模塊的基本用法,并能在實際工作中靈活應(yīng)用。希望這篇教程能幫助你更輕松地管理服務(wù)器用戶,提高運維自動化能力!