使用者與群組管理是 Linux 系統權限控制的基石。本文深入解析 /etc/passwd、/etc/shadow、/etc/group、/etc/gshadow 四大核心配置檔結構,並完整說明使用者建立、修改、刪除、密碼策略與骨架目錄機制。
每行 7 欄位,以 : 分隔:
| 欄位 | 名稱 | 說明 |
|---|---|---|
| 1 | 使用者名稱 | 登入帳號 |
| 2 | 密碼標誌 | 現代系統均為 x,實際雜湊密碼在 /etc/shadow |
| 3 | UID | 使用者識別碼:0=root、1-999=系統帳號、1000+=一般使用者 |
| 4 | GID | 初始群組 ID |
| 5 | 描述資訊 | GECOS 欄位,通常為真實姓名、聯絡資訊 |
| 6 | 家目錄 | 登入後預設工作目錄:一般 /home/用戶名、root /root |
| 7 | 登入 Shell | /bin/bash、/sbin/nologin 等 |
權限:-rw-r--r-- (全域可讀),故密碼雜湊移至 shadow 保護。
權限 ---------- (僅 root 可讀)。9 欄位:
| 欄位 | 說明 |
|---|---|
| 1 | 使用者名稱 |
| 2 | 加密密碼 (SHA-512 等),!! 或 * 表示鎖定/無密碼 |
| 3 | 最後修改密碼日期 (自 1970-01-01 起的天數) |
| 4 | 最小密碼齡期 (天) - 幾天後可改密碼 |
| 5 | 最大密碼齡期 (天) - 強制變更週期,99999 為永久 |
| 6 | 密碼過期前警告天數 |
| 7 | 密碼過期後寬限天數 (0=立即鎖定、-1=永不鎖定) |
| 8 | 帳號失效日期 (天數戳),設定後優先於欄位 5 |
| 9 | 保留欄位 |
時間戳轉換:
# 時間戳 → 日期
date -d "1970-01-01 17105 days"
# 日期 → 時間戳
echo $(( ($(date -d "2024-01-01" +%s) - $(date -d "1970-01-01" +%s)) / 86400 ))
4 欄位:群組名稱、密碼標誌 (通常 x)、GID、附加成員清單 (逗號分隔)。
4 欄位:群組名稱、群組密碼、管理者帳號、附加成員。不建議使用群組密碼機制,統一由 root 管理。
| 項目 | 路徑/權限 | 說明 |
|---|---|---|
| 一般使用者家目錄 | /home/用戶名/ (700, 擁有者:用戶:用戶) | 私密資料區 |
| root 家目錄 | /root/ (550, root:root) | 系統管理員專用 |
| 使用者信箱 | /var/spool/mail/用戶名/ | 建立使用者自動產生 |
| 骨架目錄 | /etc/skel/ | 新使用者家目錄自動複製此處內容 (.bashrc, .bash_profile 等) |
useradd [選項] 使用者名稱
| 選項 | 功能 |
|---|---|
-u UID | 指定 UID |
-d 目錄 | 指定家目錄 |
-c "描述" | 設定 GECOS 欄位 |
-g 群組 | 指定初始群組 (GID) |
-G 群組1,群組2 | 指定附加群組 |
-s Shell | 指定登入 Shell |
-m | 強制建立家目錄 (預設行為) |
-M | 不建立家目錄 |
-r | 建立系統帳號 (UID < 1000) |
passwd 使用者名稱 # root 為他人設定
passwd # 自己修改密碼
echo "密碼" | passwd --stdin 使用者名稱 # 腳本化批量設定
usermod -L 使用者名稱 # 鎖定帳號 (在 shadow 第2欄前加 !)
usermod -U 使用者名稱 # 解鎖
usermod -aG 新群組 使用者名稱 # 追加附加群組 (關鍵 -a 參數)
usermod -d 新家目錄 -m 使用者名稱 # 遷移家目錄並複製內容
userdel -r 使用者名稱 # 連同家目錄、信箱一併刪除
groupadd 群組名稱 # 建立群組
groupadd -g GID 群組名稱 # 指定 GID
groupmod -n 新名稱 舊名稱 # 重命名
groupdel 群組名稱 # 刪除群組 (需先移除成員)
gpasswd -a 使用者 群組 # 加入群組
gpasswd -d 使用者 群組 # 移出群組
/etc/default/useradd:useradd 預設值 (家目錄前綴、預設 Shell、骨架目錄、建立郵箱等)/etc/login.defs:密碼策略預設值 (PASS_MAX_DAYS、PASS_MIN_DAYS、PASS_WARN_AGE、UID/GID 範圍、CREATE_HOME 等)