Linux 檔案權限除基本 rwx 外,還有三個特殊位:Setuid (SUID)、Setgid (SGID)、Sticky Bit (黏著位)。它們分別作用於執行檔、目錄與共享目錄,是權限管理進階必修課。本文系統整理定義、指令、數字表示、典型場景與安全風險。
| 特殊位 | 符號位置 | 有執行權限顯示 | 無執行權限顯示 | 數字值 | chmod 指令 |
|---|---|---|---|---|---|
| Setuid | user 的 x 位 | s (小寫) | S (大寫) | 4 | chmod u+s file / chmod 4755 file |
| Setgid | group 的 x 位 | s (小寫) | S (大寫) | 2 | chmod g+s file / chmod 2755 file |
| Sticky Bit | other 的 x 位 | t (小寫) | T (大寫) | 1 | chmod o+t dir / chmod 1777 dir |
組合範例:chmod 3777 dir (2+1=3 → SGID+Sticky)。
/usr/bin/passwd (root 擁有、SUID) → 普通用戶可修改 /etc/shadow。| 對象 | 效果 |
|---|---|
| 可執行檔 | 執行時有效 GID 變為檔案所屬群組 |
| 目錄 | 目錄下新建檔案/子目錄自動繼承目錄的群組,而非用戶主群組。實現團隊共享目錄核心機制。 |
w+x 時,任何人可建立/刪除檔案。/tmp (權限 drwxrwxrwt) 防止用戶誤刪他人暫存檔。# 1. 建立群組與用戶
groupadd devteam
useradd alice; useradd bob
usermod -aG devteam alice bob
# 2. 建立共享目錄並設定 SGID + Sticky
mkdir /data/project
chown :devteam /data/project
chmod 2775 /data/project # SGID (2) + rwxrwxr-x
chmod o+t /data/project # 加 Sticky → 2775 → 3775 (drwxrwsrwt)
# 3. 測試
su - alice
cd /data/project
echo "alice" > a.txt
ls -l a.txt # 群組為 devteam ✅
su - bob
rm a.txt # 失敗 (Sticky 保護) ✅
find / -perm /6000 -type f -exec ls -ld {} \;。sudo、capabilities (如 setcap cap_net_bind_service=+ep /bin/nginx) 精準授權。nosuid 可禁止分區上 SUID/SGID 生效 (適用 /home、/tmp、可移動媒體)。Setuid/Setgid/Sticky Bit 是 Linux 權限模型的精華擴展。善用 SGID+Sticky 打造安全共享目錄,嚴控 SUID 程式數量,配合 capabilities 替代方案,能在彈性與安全間取得最佳平衡。