Linux 使用者與群組管理完整指南

使用者(User)與群組(Group)的概念

Linux 是一個多使用者作業系統,它透過使用者和群組來控制「誰可以做什麼」:

類型UID 範圍說明例子
root0超級管理員,對系統有完全控制權root
系統帳號1–999由系統服務使用,通常不能登入www-datamysqlnobody
一般使用者1000+人類使用者的帳號alicebob
$ 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

/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 常用選項:

修改使用者

$ 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

帳號安全最佳實踐