一、新增用戶 useradd
核心參數速查
| 參數 | 功能 | 範例 |
-c | 註解/描述 | -c "Web Server Admin" |
-d | 指定家目錄 | -d /data/web |
-m | 自動建立家目錄並複製 /etc/skel | 標準用戶必加 |
-s | 登入 Shell | -s /bin/bash 或 /sbin/nologin |
-g | 初始主群組 | -g www |
-G | 附加群組 | -G docker,deploy |
-u | 指定 UID | -u 2000 |
-r | 建立系統帳號(UID < 1000,無家目錄) | -r -s /sbin/nologin |
-e | 帳號過期日期 | -e 2025-12-31 |
實戰範例
# 建立標準開發帳號
useradd -m -s /bin/bash -c "Dev User" -G docker,wheel devuser
passwd devuser # 互動式設定密碼
# 建立服務專用帳號(無登入權限)
useradd -r -s /sbin/nologin -d /var/lib/mysql -c "MySQL Server" mysql
預設值查看與修改
useradd -D # 顯示當前預設值
# 修改預設值編輯 /etc/default/useradd
關鍵參考檔案:
/etc/login.defs:UID/GID 範圍、密碼老化策略、CREATE_HOME 等
/etc/skel/:新用戶家目錄模板(.bashrc、.profile 等)
二、修改用戶屬性
密碼管理 passwd
passwd username # 互動式修改
echo "newpass" | passwd --stdin username # 管道非互動式(腳本適用)
passwd -l username # 鎖定帳號(/etc/shadow 第2欄加 !)
passwd -u username # 解鎖
passwd -S username # 顯示密碼狀態
帳號屬性調整 usermod
usermod -d /new/home -m user1 # 遷移家目錄並複製檔案
usermod -s /bin/zsh user1 # 變更 Shell
usermod -L user1 # 鎖定密碼
usermod -U user1 # 解鎖
usermod -aG docker user1 # 追加附加群組(-a 關鍵,否則覆蓋)
usermod -l newname oldname # 重命名用戶(需配合 -d -m 遷移家目錄)
密碼老化策略 chage
chage -l user1 # 查看詳細老化資訊
chage -M 90 user1 # 密碼最長使用 90 天
chage -m 7 user1 # 密碼最短間隔 7 天
chage -W 14 user1 # 過期前 14 天警告
chage -E 2025-12-31 user1 # 帳號過期日
三、刪除用戶 userdel
userdel username # 僅刪除帳號,保留家目錄
userdel -r username # 連同家目錄、郵件佇列一併刪除(生產環境慎用)
四、查詢用戶資訊
| 指令 | 用途 |
id [user] | 顯示 UID、GID、群組列表 |
groups [user] | 列出所屬群組(第一個為有效群組) |
finger user | 顯示登入資訊、家目錄、Shell、GECOS |
who / w | 查看當前登入用戶 |
last / lastlog | 歷史登入記錄 |
五、群組管理
groupadd -g 2000 devteam # 建立群組指定 GID
groupmod -n newdev devteam # 重命名群組
groupdel devteam # 刪除群組(無成員時才能刪除)
gpasswd -a user1 devteam # 加入群組
gpasswd -d user1 devteam # 移出群組
newgrp devteam # 切換有效群組(臨時)
六、關鍵系統檔案速查
| 檔案 | 權限 | 說明 |
/etc/passwd | 644 | 用戶基本資訊(7 欄位) |
/etc/shadow | 000 / 600 | 加密密碼與老化資訊(9 欄位),僅 root 可讀 |
/etc/group | 644 | 群組資訊(4 欄位) |
/etc/gshadow | 000 / 600 | 群組密碼與管理員資訊 |
七、常見坑點避雷
- UID/GID 衝突:跨伺服器掛載 NFS 時,必須統一 UID/GID 映射
- 家目錄權限:
chmod 700 /home/user,避免 SSH 金鑰認證失敗
- 系統帳號登入:
/sbin/nologin 或 /bin/false 防止互動登入
- 刪除用戶殘留:
find / -uid 1001 -ls 掃描孤兒檔案