在企業運維環境中,服務器的用戶管理是一項基礎但非常重要的任務。比如,當有新員工加入時,我們需要在多臺服務器上為他們創建賬戶并分配合適的權限。而當員工離職或崗位發生變化時,我們也需要迅速禁用或刪除他們的賬戶,以避免潛在的安全風險。
如果采用手動方式來完成這些任務,就需要在每臺服務器上逐一執行一系列命令,比如 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模塊,高效管理你的定時任務