usermod 是修改現有用戶帳號屬性的標準指令,支援家目錄、登入 Shell、主/附屬群組、UID、帳號名稱、密碼鎖定/解鎖、過期日期等屬性變更。
語法格式
usermod [選項] 登入名
核心選項完整表
| 選項 | 功能 | 範例 |
-c "註解" | 修改 GECOS 註解 (通常為真實姓名) | usermod -c "Zhang San" zhangsan |
-d /new/home | 修改家目錄 (需搭配 -m 移動現有內容) | usermod -d /home/newuser -m user |
-e YYYY-MM-DD | 設定帳號過期日期 (空值為永不過期) | usermod -e 2025-12-31 user |
-f 天數 | 密碼過期後寬限天數 (-1 為永不鎖定) | usermod -f 30 user |
-g group | 修改**主群組** (GID) | usermod -g developers user |
-G group1,group2 | 修改**附屬群組** (覆蓋原有,慎用) | usermod -G docker,wheel user |
-aG group | 新增**附屬群組** (保留原有,推薦) | usermod -aG docker user |
-l newname | 修改登入名稱 (家目錄不自動改名) | usermod -l newuser olduser |
-L | 鎖定密碼 (在 /etc/shadow 密碼前加 !) | usermod -L user |
-U | 解除鎖定 | usermod -U user |
-s /bin/bash | 修改登入 Shell | usermod -s /bin/zsh user |
-u UID | 修改 UID (需手動同步檔案擁有者) | usermod -u 2000 user |
-p "加密密碼" | 直接設定加密密碼 (極不推薦,明文風險) | - |
-o | 允許 UID 重複 (配合 -u,特殊需求) | - |
-Z | 修改 SELinux 用戶映射 | usermod -Z staff_u user |
常用組合範例
# 1. 修改家目錄並移動檔案
usermod -d /home/newhome -m username
# 2. 將用戶加入 docker 群組 (保留原群組)
usermod -aG docker username
# 3. 鎖定帳號 (禁止登入)
usermod -L username
# 4. 修改 Shell 為 zsh
usermod -s /bin/zsh username
# 5. 修改 UID 並同步檔案權限 (需 root)
usermod -u 2000 username
find / -user 1000 -exec chown -h 2000 {} \; # 舊 UID 為 1000
注意事項
- 修改 UID/GID 後,**必須同步檔案系統擁有者**,否則檔案顯示數字 ID。
-G 不加 -a 會**覆蓋**所有附屬群組,生產環境慎用。
- 鎖定帳號 (
-L) 僅阻擋密碼登入,SSH 金鑰登入仍可能生效 (視 PasswordAuthentication 設定)。
- 用戶正在登入時修改家目錄/Shell/UID 可能導致異常,建議登出後操作。
- 配合
chage 管理密碼過期策略:chage -l username 查看。
相關指令對照
| 任務 | 指令 |
| 建立用戶 | useradd / adduser |
| 刪除用戶 | userdel -r |
| 修改密碼 | passwd |
| 修改群組 | groupmod |
| 查看用戶資訊 | id / finger / getent passwd |