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 深度解析:掌控檔案與目錄預設權限的核心機制

編輯:Linux 教學

在 Linux 系統中,每當使用者建立新檔案或目錄時,其預設權限並非隨機產生,而是由 umask(使用者檔案建立模式遮罩)精確計算而來。理解並善用 umask,是系統管理員、開發人員與 DevOps 工程師構建安全、可協作檔案系統的基礎技能。

什麼是 umask?

umask 定義了「建立檔案或目錄時需**移除**的權限位」。它以八進位或符號模式表示,直接影響預設權限的最終呈現。

[root@linux ~]# umask
0022
[root@linux ~]# umask -S
u=rwx,g=rx,o=rx
  • 輸入 umask 顯示四位八進位數(首位為特殊權限位,常為 0)。
  • 加入 -S 參數則以符號模式顯示(r=讀、w=寫、x=執行)。

檔案與目錄的基礎預設權限差異

系統對檔案與目錄的「最大預設權限」定義不同:

物件類型最大預設權限(八進位)權限符號備註
檔案666-rw-rw-rw-預設無執行權限(x),避免誤執行
目錄777drwxrwxrwx需執行權限(x)才能 cd 進入

umask 計算邏輯:減法而非位運算

許多教材以二進位 AND/NOT 運算解釋 umask,但**符號減法更直觀**:「基礎預設權限」減去「umask 遮罩」等於「最終權限」。

以預設 umask 0022 為例(移除 group 與 others 的寫入權限 w=2):

  • 建立檔案:666 (rw-rw-rw-) − 022 (---w--w-) = 644 (rw-r--r--)
  • 建立目錄:777 (rwxrwxrwx) − 022 (---w--w-) = 755 (rwxr-xr-x)

實測驗證

[root@linux ~]# umask 0022
[root@linux ~]# touch test1
[root@linux ~]# mkdir test2
[root@linux ~]# ll
-rw-r--r-- 1 root root 0 Jul 20 00:36 test1
drwxr-xr-x 2 root root 4096 Jul 20 00:36 test2

團隊協作場景:調整 umask 實現群組共享

若開發團隊需同群組成員可讀寫彼此檔案,期望檔案權限為 664 (rw-rw-r--)、目錄為 775 (rwxrwxr-x),則需設定 umask 002(僅移除 others 的寫入權限)。

[root@linux ~]# umask 002
[root@linux ~]# touch test3
[root@linux ~]# mkdir test4
[root@linux ~]# ll
-rw-rw-r-- 1 root root 0 Jul 20 00:41 test3
drwxrwxr-x 2 root root 4096 Jul 20 00:41 test4

此設定廣泛應用於 Samba、FTP、NFS 等共享儲存服務,確保團隊協作順暢且不洩露給其他使用者。

常見誤區:切勿用 666/777 直接相減

部分教材建議用 666 - umask 計算檔案權限,這是**錯誤**的。例如 umask 003:

  • 錯誤算法:666 - 003 = 663 → -rw-rw--wx(檔案莫名出現執行權限 x)
  • 正確算法:666 (rw-rw-rw-) − 003 (------wx) = 664 (rw-rw-r--)

根本原因:檔案基礎預設權限**本就不含 x**,若用數學減法會錯誤「借位」產生 x 權限。請務必採用符號減法或位運算(mode = base & ~umask)。

練習題

假設 umask = 003,試求建立檔案與目錄的最終權限。

點擊查看答案
  • 遮罩 003 代表移除 others 的寫入 (2) + 執行 (1) = 3
  • 檔案:666 (rw-rw-rw-) − 003 (------wx) = 664 (rw-rw-r--)
  • 目錄:777 (rwxrwxrwx) − 003 (------wx) = 774 (rwxrwxr--)

最佳實踐建議

  1. 系統預設:/etc/profile 或 /etc/login.defs 設定 umask 022,平衡安全與便利。
  2. 專案目錄:在共享專案目錄啟用 setgid(chmod g+s dir)並設定 umask 002,新檔自動繼承群組與群組寫入權限。
  3. 服務帳號:Web、資料庫等服務帳號建議 umask 027 或 077,嚴格限制他人存取。
  4. 永久生效:將 umask 指令寫入 ~/.bashrc、~/.profile 或服務的 systemd unit 檔 UMask= 參數。

掌握 umask,不僅是背誦數字對照表,更是理解 Linux 權限模型「預設安全、最小權限」設計哲學的關鍵一步。

Copyright © Windows教程網 All Rights Reserved