Linux 核心不認識「帳號名稱」,只認識 UID (User ID) 與 GID (Group ID)。當您執行 ls -l 看到 user1,是因為 ls 程式透過 C Library 函式 getpwuid() 查詢 /etc/passwd 將 UID 1001 解析為字串「user1」。理解這點,帳號管理的本質就清晰了:維護一個 UID ↔ 使用者屬性 的映射資料庫。
/etc/passwd 新增一行:newuser:x:1005:1005::/home/newuser:/bin/bash/etc/group 新增群組:newuser:x:1005:/etc/shadow 設定密碼欄位(需用 openssl passwd -6 產生雜湊)。mkdir /home/newuser; cp -r /etc/skel/* /home/newuser/; chown -R 1005:1005 /home/newuser; chmod 700 /home/newuserpasswd newuser。| 指令 | 特性 | 適用場景 |
|---|---|---|
useradd | 底層工具,參數明確,適合腳本自動化 | 批次建帳、Ansible/Puppet 部署 |
adduser | Debian/Ubuntu 友善互動腳本,自動建家目錄、複製 skel、提示密碼 | 管理員手動建帳 |
| GUI 工具 | GNOME Settings、KDE User Manager、YaST、cockpit | 桌面環境、遠端 Web 管理 |
useradd 參數速查useradd -m -d /home/alice -s /bin/zsh -c "Alice Chen" -G wheel,docker -u 2001 alice
# -m 建立家目錄並複製 /etc/skel
# -d 指定家目錄路徑
# -s 指定登入 Shell
# -c 註解(全名)
# -G 附屬群組
# -u 指定 UID(不指定則自動分配)
格式:帳號:密碼佔位符:UID:GID:註解(GECOS):家目錄:Shell
| 欄位 | 說明 | 範例 |
|---|---|---|
| 帳號 | 登入名稱,1~32 字元,建議小寫字母數字 | alice |
| 密碼佔位符 | 啟用 shadow 時固定為 x;未啟用則為加密密碼(極不安全) | x |
| UID | 0=root,1-999 系統保留,1000+ 一般使用者 | 1001 |
| GID | 主要群組 ID,對應 /etc/group | 1001 |
| GECOS | 逗號分隔:全名,辦公室,辦公電話,住宅電話 | Alice Chen,Room 301,2345, |
| 家目錄 | 登入後預設工作目錄 | /home/alice |
| Shell | 登入程式,需列於 /etc/shells | /bin/bash |
格式:帳號:加密密碼:最後修改日:最小間隔:最大間隔:警告天數:非活動天數:過期日:保留
| 欄位 | 說明 | 範例/單位 |
|---|---|---|
| 加密密碼 | $id$salt$hash 格式,id: 1=MD5, 5=SHA-256, 6=SHA-512, y=yescrypt | $6$rounds=656000$salt$hash |
| 最後修改日 | 自 1970-01-01 起的天數 | 19872 (2024-06-15) |
| 最小間隔 | 兩次改密碼最少間隔天數,0=無限制 | 0 |
| 最大間隔 | 密碼有效天數,99999=永不過期 | 90 |
| 警告天數 | 過期前幾天開始警告 | 7 |
| 非活動天數 | 過期後多少天鎖定帳號 | 30 |
| 過期日 | 帳號絕對過期日(天數),空白=永不 | 20088 |
早期 Unix 將加密密碼直接放在 /etc/passwd 第二欄,因檔案全域可讓 ls、finger 等程式查詢 UID→名稱。但這導致任何人都能取得加密密碼離線破解(字典攻擊、彩虹表)。
Shadow 方案:
/etc/shadow,權限 640 root:shadow 或 000。/etc/passwd 密碼欄固定為 x。login、su、sudo、sshd、passwd)設定 setuid root 或具備 CAP_DAC_READ_SEARCH,得以讀取 shadow。ls、id、getent)只讀 /etc/passwd,完全看不到密碼雜湊。| 任務 | 指令 | 關鍵參數 |
|---|---|---|
| 修改帳號屬性 | usermod | -l 新名稱, -d 新家目錄 -m 移動檔案, -s 新 Shell, -G 附屬群組(覆蓋), -aG 追加群組, -L/-U 鎖定/解鎖 |
| 修改密碼/過期策略 | passwd / chage | passwd -l/-u 鎖定/解鎖, chage -M 90 -W 7 -I 30 |
| 刪除帳號 | userdel | -r 同時刪除家目錄與郵件佇列 |
| 查詢帳號資訊 | id, getent passwd user, chage -l user |
daemon, www-data, postgres, mysql。通常 /usr/sbin/nologin 或 /bin/false 作為 Shell,無家目錄或家目錄在 /var/lib/,用於服務進程權限隔離。/home。帳號管理看似瑣碎,實則是系統安全的第一道防線。善用 useradd/usermod/chage、嚴格控管 /etc/shadow 權限、定期稽核 UID 0 帳號與無密碼帳號、為服務建立專用系統帳號而非共用 root,都是資深管理員的基本功。