Linux 使用者與群組管理完整指南
使用者(User)與群組(Group)的概念
Linux 是一個多使用者作業系統,它透過使用者和群組來控制「誰可以做什麼」:
- 使用者(User):可以登入系統的帳號,每個使用者有唯一的 UID(User ID)數字
- 群組(Group):使用者的集合,用於批次管理多個使用者的資源存取,每個群組有唯一的 GID
| 類型 | UID 範圍 | 說明 | 例子 |
|---|---|---|---|
| root | 0 | 超級管理員,對系統有完全控制權 | root |
| 系統帳號 | 1–999 | 由系統服務使用,通常不能登入 | www-data、mysql、nobody |
| 一般使用者 | 1000+ | 人類使用者的帳號 | alice、bob |
$ id alice # 查看 alice 的 UID、GID 和群組
uid=1001(alice) gid=1001(alice) groups=1001(alice),27(sudo),999(docker)
/etc/passwd 與 /etc/shadow
使用者資訊儲存在兩個重要的系統檔案:
/etc/passwd — 使用者基本資訊(可公開讀取)
$ cat /etc/passwd | grep alice
alice:x:1001:1001:Alice Chen:/home/alice:/bin/bash
格式:帳號名稱:密碼:UID:GID:描述:家目錄:登入Shell
alice:帳號名稱x:密碼(實際雜湊值存在 /etc/shadow,此處只是佔位符)1001:UID1001:主要群組 GIDAlice Chen:描述(GECOS 欄位)/home/alice:家目錄/bin/bash:登入 Shell
/etc/shadow — 密碼雜湊(只有 root 可讀)
$ sudo grep alice /etc/shadow
alice:$6$salt$hashedpassword...:19500:0:90:7:::
格式(以 : 分隔):帳號:密碼雜湊:上次修改日:最小天數:最大天數:警告天數:...
新增使用者
Ubuntu/Debian 上推薦用 adduser(互動式)
$ sudo adduser alice
Adding user 'alice' ...
Adding new group 'alice' (1001) ...
Adding new user 'alice' (1001) with group 'alice' ...
Creating home directory '/home/alice' ...
New password:
Retype new password:
passwd: password updated successfully
Full Name []: Alice Chen
Room Number []:
Is the information correct? [Y/n] Y
也可以用底層的 useradd(非互動式,適合腳本)
$ sudo useradd -m -s /bin/bash -c "Alice Chen" -G sudo,docker alice
$ sudo passwd alice # 設定密碼
useradd 常用選項:
-m:建立家目錄(必加,否則不會建立)-s /bin/bash:設定登入 Shell-c "描述":設定使用者描述-G 群組1,群組2:加入附加群組-r:建立系統帳號(UID < 1000,用於服務程序)
修改使用者
$ sudo usermod -aG docker alice # 加入 docker 群組(-a 很重要!)
$ sudo usermod -s /bin/zsh alice # 更改 Shell
$ sudo usermod -L alice # 鎖定帳號(停用密碼登入)
$ sudo userdel -r alice # 刪除帳號及家目錄
加入群組必須用
usermod -aG(帶 -a,append),若只用 -G 會取代所有附加群組,可能讓使用者失去 sudo 等重要群組。
群組管理
$ sudo groupadd developers # 建立群組
$ sudo usermod -aG developers alice # 將 alice 加入
$ getent group developers # 查看群組成員
developers:x:1500:alice,bob,charlie
$ groups alice # 查看 alice 的所有群組
alice : alice sudo docker developers
設定共享目錄讓群組成員都能寫入:
$ sudo mkdir /shared/projects
sudo chown root:developers /shared/projects
sudo chmod 2775 /shared/projects # setgid bit(2)讓新建的檔案自動繼承群組)
sudo 與 sudoers
sudo 讓一般使用者暫時獲得 root 權限執行特定指令,比直接使用 root 更安全(有日誌記錄、可限制指令)。
$ sudo usermod -aG sudo alice # Ubuntu: 加入 sudo 群組即可使用 sudo
進階:用 visudo 編輯 /etc/sudoers 做更精細的控制:
$ sudo visudo
# sudoers 常見設定
# alice 可以執行任何指令(需輸入密碼)
alice ALL=(ALL:ALL) ALL
# deploy 可以不輸入密碼重啟 nginx
deploy ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart nginx
# developers 群組可以使用 apt
%developers ALL=(ALL) NOPASSWD: /usr/bin/apt
帳號安全最佳實踐
- 停用不必要的帳號:
sudo usermod -s /usr/sbin/nologin inactive-user - 設定密碼有效期:
sudo chage -M 90 alice(90 天後必須更換密碼) - 稽核登入記錄:
last -n 20(最近登入)、sudo lastb -n 20(失敗嘗試) - 定期確認 sudoers:
sudo -l -U alice(查看 alice 可執行哪些 sudo 指令) - 找出長期未登入的帳號:
lastlog -b 90(90 天以上未登入) - 確認 /etc/sudoers 語法:
sudo visudo -c