Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> 關於 Linux

Linux 檔案預設權限與隱藏權限深度解析:umask、ACL 與特殊位元完整指南

編輯:關於 Linux

Linux 檔案權限系統遠比「rwx」三組字元複雜。除了基本的擁有者/群組/其他人權限外,umask 決定預設權限,setuid/setgid/sticky 特殊位元改變執行語義,ACL(存取控制清單)提供更細粒度的權限控制。本文深度解析這些「隱藏」機制。

權限位元示意

一、umask:預設權限遮罩

查看目前 umask

umask           # 八進位顯示,如 0022
umask -S        # 符號模式顯示,如 u=rwx,g=rx,o=rx

umask 運作邏輯

  • 檔案預設最大權限:666(rw-rw-rw-,無執行權限)
  • 目錄預設最大權限:777(rwxrwxrwx,需執行權限進入)
  • 實際權限 = 預設最大權限 - umask

實例演示

$ umask
0022
$ touch file1
$ mkdir dir1
$ ls -l
-rw-r--r-- 1 root root 0 ... file1   # 666 - 022 = 644
drwxr-xr-x 2 root root 4096 ... dir1  # 777 - 022 = 755

$ umask 002
$ touch file2
$ mkdir dir2
$ ls -l
-rw-rw-r-- 1 root root 0 ... file2   # 666 - 002 = 664
drwxrwxr-x 2 root root 4096 ... dir2  # 777 - 002 = 775

常見 umask 值對照

永久設定 umask

# 個人設定
echo "umask 002" >> ~/.bashrc

# 系統全域
echo "umask 022" >> /etc/profile
# 或編輯 /etc/login.defs:UMASK 022

二、特殊權限位元

1. SetUID (s/S) — 檔案執行時以擁有者權限執行

chmod u+s /path/to/executable
# 或
chmod 4755 /path/to/executable
  • 典型案例:/usr/bin/passwd(一般使用者修改密碼需寫入 /etc/shadow,需 root 權限)
  • 顯示:-rwsr-xr-x(擁有者 x 位置變 s)
  • 大寫 S 表示無執行權限但設定了 SetUID(無效配置)

2. SetGID (s/S) — 檔案/目錄的群組繼承行為

  • 檔案:執行時以檔案群組權限執行(chmod g+s file,2755)
  • 目錄:新建檔案/子目錄自動繼承該目錄的群組(協作目錄必備)
  • 目錄顯示:drwxrwsr-x
# 團隊共享目錄最佳實踐
mkdir /shared/team
chgrp devteam /shared/team
chmod 2775 /shared/team  # SetGID + 群組可寫
# 此後所有成員建立的檔案群組自動為 devteam

3. Sticky Bit (t/T) — 目錄防刪除保護

chmod +t /tmp
# 或
chmod 1777 /tmp
  • 設定後,只有檔案擁有者、目錄擁有者、root 可刪除/重命名目錄下的檔案
  • 典型案例:/tmp、/var/tmp
  • 顯示:drwxrwxrwt(其他人 x 位置變 t)
  • 大寫 T 表示無執行權限但設定 Sticky(無效配置)

三、ACL(存取控制清單)— 突破 UGO 限制

當需要針對「特定使用者」或「特定群組」給予不同權限時,ACL 是標準解法。

啟用 ACL

# 檢查檔案系統是否掛載 acl 選項
mount | grep acl
# /etc/fstab 加入 acl 選項後重新掛載
mount -o remount,acl /home

ACL 操作指令

# 設定使用者 ACL
setfacl -m u:alice:rwx /project/data

# 設定群組 ACL
setfacl -m g:devteam:rw /project/data

# 設定預設 ACL(目錄:新建檔案自動繼承)
setfacl -d -m u:alice:rwx /project/data

# 查看 ACL
getfacl /project/data

# 移除特定 ACL
setfacl -x u:alice /project/data

# 移除所有 ACL
setfacl -b /project/data

ACL 輸出範例

# file: project/data
# owner: root
# group: devteam
user::rwx
user:alice:rwx          # 有效權限:rwx
group::r-x
group:devteam:rw-       # 有效權限:rw-
mask::rwx               # 最大有效權限遮罩
other::r--
default:user::rwx
default:user:alice:rwx
default:group::r-x
default:group:devteam:rw-
default:mask::rwx
default:other::r--

四、ls -l 權限欄位完整解讀

- r w s r w x r - t
│ │ │ │ │ │ │ │ └─ 其他人執行 + Sticky
│ │ │ │ │ │ │ └──── 其他人寫入
│ │ │ │ │ │ └────── 其他人讀取
│ │ │ │ │ └──────── 群組執行 + SetGID
│ │ │ │ └────────── 群組寫入
│ │ │ └──────────── 群組讀取
│ │ └────────────── 擁有者執行 + SetUID
│ └──────────────── 擁有者寫入
└────────────────── 擁有者讀取 + 檔案類型(-=檔案 d=目錄 l=連結等)

五、權限數值對照表(含特殊位元)

umask檔案權限目錄權限適用場景
022644 (rw-r--r--)755 (rwxr-xr-x)Root 預設,安全導向
002664 (rw-rw-r--)775 (rwxrwxr-x)一般使用者,群組協作
077600 (rw-------)700 (rwx------)高安全性,完全私有
027640 (rw-r-----)750 (rwxr-x---)群組共享,其他無權限

組合範例:4755 = SetUID + rwxr-xr-x,2775 = SetGID + rwxrwxr-x,1777 = Sticky + rwxrwxrwx

深入理解 umask、特殊位元與 ACL,能讓您精準控管 Linux 檔案存取安全,滿足從個人桌面到企業級多租戶環境的多樣化需求。

Copyright © Windows教程網 All Rights Reserved
數值含義
4000SetUID
2000SetGID
1000Sticky Bit
0777基本權限