Linux 多用戶、多任務的基石是 UID/GID 權限模型。本文深度解析四大核心配置文件的欄位含義、影子機制、一致性檢查與自動化管理工具,助你建立穩健的身份治理體系。
/etc/passwd → 用戶基本屬性(公開可讀) /etc/shadow → 用戶密碼雜湊與過期策略(僅 root 可讀) /etc/group → 群組基本屬性與成員(公開可讀) /etc/gshadow → 群組密碼與管理員(僅 root 可讀)
root:x:0:0:root:/root:/bin/bash
nginx:x:996:994:Nginx web server:/var/lib/nginx:/sbin/nologin
| 欄位 | 說明 | 範例 |
|---|---|---|
| 1. 登入名 | 用戶名,唯一 | nginx |
| 2. 密碼佔位 | x 表示密碼在 /etc/shadow | x |
| 3. UID | 用戶識別碼,0=root,1-999 系統保留 | 996 |
| 4. GID | 主要群組 ID | 994 |
| 5. GECOS | 註解/描述(指纋、全名、電話等) | Nginx web server |
| 6. 家目錄 | 登入後預設工作目錄 | /var/lib/nginx |
| 7. Shell | 登入啟動的解釋器,/sbin/nologin 禁止互動登入 | /sbin/nologin |
nginx:$6$rounds=656000$salt$hash:19500:0:99999:7:::
| 欄位 | 說明 |
|---|---|
| 1. 登入名 | 對應 /etc/passwd |
| 2. 加密密碼 | $id$salt$hash,id=6 為 SHA-512,可含 rounds |
| 3. 最後修改日 | 自 1970-01-01 起天數 |
| 4. 最小間隔 | 天數,0=可隨時改 |
| 5. 最大壽命 | 天數,99999=永不過期 |
| 6. 警告天數 | 過期前幾天開始警告 |
| 7. 非活動期限 | 過期後幾天鎖定帳號 |
| 8. 絕對過期日 | 自 1970 起天數,帳號完全失效 |
| 9. 保留 | 未使用 |
特殊值:! / !! / * = 帳號鎖定(無法用密碼登入);空值 = 無密碼(極度危險)。
docker:x:995:alice,bob,charlie
| 欄位 | 說明 |
|---|---|
| 1. 群組名 | 唯一 |
| 2. 群組密碼 | x 表示在 /etc/gshadow |
| 3. GID | 群組識別碼 |
| 4. 附屬成員 | 逗號分隔的用戶名列表 |
docker:!:alice:alice,bob
| 欄位 | 說明 |
|---|---|
| 1. 群組名 | |
| 2. 群組密碼 | 可為空/!/雜湊,極少使用 |
| 3. 群組管理員 | 可執行 gpasswd -a user group 的用戶 |
| 4. 群組成員 | 同 /etc/group 第 4 欄 |
| 角色 | UID 範圍 | 特徵 | 典型帳號 |
|---|---|---|---|
| root | 0 | 唯一、全權限、可登入 | root |
| 系統/虛擬用戶 | 1-999 | 無登入 Shell、運行服務、不互動 | nginx, mysql, systemd-timesync |
| 普通用戶 | ≥1000 | 可登入、受權限約束、家目錄隔離 | alice, bob, deploy |
| 任務 | 指令 | 關鍵參數 |
|---|---|---|
| 新增用戶 | useradd / adduser (Debian 互動式) | -m 建家目錄, -s 指定 shell, -G 附屬群組 |
| 修改用戶 | usermod | -l 改名, -d 遷移家目錄, -L/-U 鎖/解鎖, -aG 追加群組 |
| 刪除用戶 | userdel | -r 連家目錄一起刪 |
| 設定密碼 | passwd | -l 鎖定, -u 解鎖, -e 強制下次改密, -S 狀態 |
| 新增群組 | groupadd | -g 指定 GID |
| 修改群組 | groupmod | -n 改名, -g 改 GID |
| 群組成員維護 | gpasswd | -a 加入, -d 移除, -A 設管理員 |
| 一致性檢查 | pwck / grpck | -r 唯讀檢查, -s 排序 |
# 1. 建立服務帳號(系統用戶、無家目錄、禁止登入)
useradd -r -s /sbin/nologin -c "Prometheus Exporter" node_exporter
# 2. 建立部署帳號(普通用戶、有家目錄、加入 docker 群組)
useradd -m -s /bin/bash -G docker -c "CI/CD Deploy" deploy
echo "deploy:$(openssl rand -base64 16)" | chpasswd
# 3. 批量同步群組成員(從 CMDB API)
mapfile -t USERS < <(curl -s $API | jq -r '.[]')
groupmod -G $(IFS=,; echo "${USERS[*]}") docker
# 4. 定期審計
pwck -r && grpck -r
awk -F: '$3==0 && $1!="root" {print "WARNING: UID 0 user:", $1}' /etc/passwd
awk -F: '$2!~/^[$!]/ {print "WARNING: no password hash:", $1}' /etc/shadow
結語: 四大文件是 Linux 身份體系的「戶政系統」。熟悉欄位含義、善用 useradd/usermod/gpasswd 而非手動 vim、定期跑 pwck/grpck 審計,才能在百台伺服器叢集中保持身份資料乾淨、一致、可追溯。
Linux 效能分析核心指令實戰:top、vmstat、pidstat、gprof、powertop 深度解析
Linux 批量並行 Telnet 埠口掃描:Shell 腳本實戰與效能優化
Linux 日誌佔滿磁碟緊急清理:find 刪除 /var/log 與常見日誌檔案用途對照表
Ubuntu 連不上網?「網路未受管」問題一鍵修復:介面配置衝突排查
Linux 終端機與主控台複製貼上快捷鍵差異:Ctrl+Shift+C/V vs Ctrl+Insert/Shift+Insert
Linux 網卡綁定 Bonding 配置步驟與七種模式詳解
Linux 安裝 Nginx + PHP 7.0 (PHP-FPM) 完整配置指南:Socket 與 TCP 雙模式通信詳解