緯育 2026-0331.2
出自頂極製作所
權限管理的設定和應用
本次講座於2026-03-31聚焦 Linux/Unix/Mac 通用的權限模型與檔案類型,從系統基本權限(User/Group/Other 的 rwx)與判定順序切入,說明檔案與目錄中讀/寫/執行的語義、以 ls -l/ls -ld 觀察權限與種類、數字權限(如 755/777)與符號法設定、遞迴修改的影響,以及變更所有權與群組(chmod/chown/chgrp)的實務。講師強調基本權限易懂但有侷限,Root 在預設權限模型下擁有絕對權能;建立時的初始權限由權限遮罩(umask)決定,不建議隨意變更。為補足基本權限不足(例如無法擋住 root、欠缺特殊保護/功能),課程引入延伸屬性與 ACL 作為更細粒度與進階控制;同時對比 Windows 權限與透明壓縮的操作與影響。並預告後續再深入「特殊權限」細節與 Linux 上的透明壓縮實作。
權限體系與基本概念
- 系統基本權限(U/G/O 與 rwx)
- 判定順序:先比對是否為擁有者(User);否則檢查是否屬於群組(Group);否則套用 Other 權限。
- 權限位:r=讀、w=寫、x=執行;未授權以 * 表示。
- 檔案語義:r 讀內容、w 改內容、x 執行程式或腳本。
- 目錄語義:r 列出名稱、w 在目錄內建立/刪除/改名、x 允許進入(cd)。改檔名屬於改目錄內容,取決於上層目錄 w;改內容取決於檔案自身 w。
- 以 ls -l/ls -ld 觀察權限與種類;以 id 查 UID/GID 與所屬群組,據以判斷落在哪一組權限。
- 常見裝置檔(/dev/sda 等 b、c 開頭)權限設計嚴格,避免一般使用者進行破壞性操作。
- Root 的絕對權能
- 無論檔案設定為 000、700 等,root 仍可讀/寫/刪/改,凸顯基本權限的侷限。
- 權限誤解與系統比較
- Linux 基本權限簡單易懂但有限;Windows 權限更細緻且複雜,容易誤設至「自己都打不開」。安全規劃需審慎。
檔案類型與 ls 欄位判讀
- 首字母代表種類:-(正規檔案 regular file)、d(目錄)、l(符號連結)、b(區塊裝置)、c(字元裝置)、s(socket)、p(FIFO)。
- Everything is a file:檔案、目錄、裝置等皆以檔案抽象呈現;權限公開透明,可直接透過 ls 判讀操作可能性。
3. 數字權限與 chmod
- 數值對應:r=4、w=2、x=1;三者可相加形成 0–7。
- 常見設定:755(u=rwx,g=r-x,o=r-x)、750、664、777(風險極高,形同全開)。
- 三位與四位數:前三位分別對應 u/g/o;四位數的首位為特殊權限位。
- chmod 符號法與數字法
- 符號法:u,g,o,a 與 +、-、= 可細緻變更(如 a+x、g,o-x、u=r 等)。
- 數字法:設定快速精簡但需心算。
- 目錄與遞迴:對目錄單獨修改僅影響該目錄本身;需以 -R 才會作用至子項,否則可能出現能進入但看不到/無法操作內部的情況。
所有權與群組變更(chown、chgrp)
- chown user[:group] path(可加 -R 遞迴):主要用於改擁有者,可同時改群組。
- chgrp group path(可加 -R):專用於變更群組。
- 留意帳號/群組同名為常見設計;變更目錄與其子項需明確使用遞迴以避免權限/所有權不一致。
建立時的權限來源:權限遮罩(umask)
- 當建立檔案/目錄時,系統依 umask 決定初始權限外觀,解釋「建出來會長那樣」的原因。
- 不建議隨意更改:錯配可能導致該開的不開、該關的不關,衍生安全與操作問題。
延伸控制:延伸屬性與 ACL
- 延伸屬性(基於檔案系統)
- 動機:補足基本權限不足、提供特殊保護/限制/功能(如內容鎖定、透明壓縮)。
- 教學案例:教師作業資料夾中,使用內容鎖定避免學生刪改教師或他人檔案。
- ACL(Access Control List)
- 當 U/G/O 無法表達需求(如指定多位使用者的差異權限、排除特定個體),以 ACL 提供細粒度控制。
- 判定時需同時考量基本權限與 ACL 條目,ACL 是補充而非取代。
特殊權限的定位與生效條件
- 特殊權限(如 sticky bit t)在特定情境才生效:加在目錄上(如 /tmp)可避免彼此互刪;加在檔案上現代系統多無效。
- 為避免與基本權限混淆,教學順序先鞏固基本權限,再進入特殊權限細節。
透明壓縮與效能取捨(與 Windows 比較)
- Windows 範例:可對整顆磁碟、資料夾或單檔啟用壓縮;「檔案大小」不變但「磁碟大小」減少,本質是以 CPU 換空間。整碟壓縮影響效能較大,優先建議資料夾或必要檔案。
- Linux/Unix 對應:亦有透明壓縮概念(存時壓縮、讀時解壓縮),細節留待後續章節實作與比較。
系統差異與安全實務
- 發行版與版本在預設權限可能不同;一般使用者與 root 行為差異明顯,勿想當然。
- 權限規劃與使用者隔離需審慎,避免成為攻擊面;權限/漏洞在業界具高價值,顯示其安全關鍵性。
- 工具著色僅為輔助,應依首字母與權限位精準判讀。
Linux 檔案與目錄權限基礎與操作
- 擁有者與群組
- 以 root 在 /tmp 建立 testdir1、testdir2 等目錄與檔案(testfile1、testfile2),其擁有者與群組均為 root;以 ls -ld 檢視權限與屬性。user 未加入 root 群組,因此判定落在 others 欄位。
- 目錄權限語意(進入、列出、管理檔名)
- 進入需 X;有 X 可 cd,即便無 R。
- 列出需 R;若有 X 無 R,可進入但 ls 受拒。
- 新增、刪除、改名等「管理檔名」依賴目錄 W(通常也需 X)。
- 檔案權限語意(讀寫內容)
- 讀取需檔案 R;寫入需檔案 W。目錄權限不決定檔案內容的寫入可行性。
- 常用指令
- 權限檢視:ls -l、ls -ld
- 建立:mkdir、touch
- 讀取:cat
- 更名/移動:mv(取決於上層目錄 W/X 與 sticky bit)
- 刪除:rm、rm -f、rm -rf(受目錄權限與 sticky bit 影響)
- 權限/屬性調整:chmod、chown、chgrp
權限比對順序與群組設定
- 比對順序(user → group → others)
- 系統依序比對使用者身分、所屬群組、其他;一旦在某層符合即停止,不再落到後續層級。因此當帳號屬於某群組,實際行為以群組權限為準,others 不再適用。
- 範例:testdir3
- 以 root 在 /tmp 建立 testdir3,使用 chmod 將 Others 設為 r-x(移除 w),並以 chgrp 將群組改為 user。
- 若群組權限為 rwx,屬於 user 群組的使用者可在目錄中建立、刪除與改名檔案;Others 為 r-x 則非群組成員不可寫入但可讀與進入。
- 檔案預設擁有者通常為建立者且受 umask 影響;能否寫入檔案內容仍取決於檔案本身的 W。
Sticky bit(t/T)在目錄上的影響與錯誤訊息
- 定義與情境
- 共享目錄(如 /tmp)設 sticky bit 表示任何人皆可建立物件,但只有物件擁有者(或目錄擁有者、特權者)能刪除或更名該物件。
- 錯誤表現差異
- 因缺乏 rwx 權限導致的操作失敗,常見訊息為「Permission denied」。
- 因 sticky bit 規則阻擋非擁有者對目錄本身(更名、刪除)或對他人物件的操作,常見訊息為「操作不被允許」(operation not permitted)。
- 範例差異
- 在 testdir1(others r-x)中,user 無法新增、刪除、改名檔案(目錄缺 W),嘗試更名或刪除目錄本身時受 /tmp 的 sticky bit 影響,顯示「操作不被允許」。
- 在 testdir2(others rwx)中,user 能新增、刪除與改名目錄內檔案,但對目錄本身的更名或刪除仍因 sticky bit 受限,空目錄 rm -rf 仍回報「操作不被允許」。
練習題延伸場景與判斷方法
- 題目四:將某目錄擁有者設為 user(chown user),使 user 在該目錄的操作更為寬鬆;目錄內檔案若由 root 擁有且無相應 W,則內容寫入仍受限。
- 題目五:目錄 others 設為 ---,即便目錄內檔案屬於使用者本人,因目錄缺 X 無法進入、缺 R 無法列出、缺 W 無法管理檔名,所有操作皆受阻。
- 判斷方法:以「打勾/打 X」快速標示對於列出、進入、讀取、寫入、改名、刪除等操作的可行性;特別留意目錄 X 對進入與讀取的前置影響。
umask(權限遮罩)原理、計算與安全
- umask 值
- 常見預設:root 0022、一般使用者 0002。可用 umask 指令臨時調整(不建議隨意更改)。
- 預設權限與運算
- 檔案最大 0666(不含 X)、目錄最大 0777。
- 運算方式:以位元遮罩計算或採簡化減法心智模型(如檔案 666-022=644;目錄 777-022=755)。
- 結果示例:root 生成檔案/目錄通常為 0644/0755;一般使用者為 0664/0775。
- 影響範圍
- 由登入帳號的 umask 與身分決定新建物件權限,程式生成檔案亦沿用當下 umask。
- 安全注意
- 謹慎對待網路指令片段,誤設 umask 會導致權限過寬或不當,造成審計風險與追責。
延伸屬性(隱藏權限)概論
- 定義與需求
- 延伸屬性(隱藏權限)用以補足系統預設rwx權限不夠細緻的不足。
- 系統預設權限對最高權限使用者Root無效,而延伸屬性可限制Root操作。
- 延伸屬性依賴檔案系統的特定功能;不同檔案系統支援的延伸屬性不盡相同。
- 檔案系統與其功能
- 檔案系統功能各異,例如NTFS支援權限規劃與檔案復原,舊版FAT32則無。
- 範例檔案系統:NTFS、FAT32、exFAT、XFS、Btrfs、ZFS、AFS(Apple File System)、EXT系列(EXT2、EXT3、EXT4)。
- 各檔案系統各有強項:有的擅長小檔案處理、有的搜尋快、有的適合大檔案。
- 常見延伸屬性功能
- 大A (A):不更動存取時間(Access Time)。設定後讀取檔案不會更新存取時間戳。
- 小a (a):僅能附加(Append Only)。
- 檔案:只能在末端增加內容,無法修改或刪除既有內容。
- 目錄:可新增檔案,但不得刪除或重命名既有檔案;可阻擋Root。
- 小c (c):存檔時自動壓縮、讀取時自動解壓,類似Windows檔案壓縮。
- 小i (i):完全鎖定(Immutable)。
- 檔案或目錄:設定後不可新增、刪除、重命名或移動,連Root也無法修改。
- 小e (e):EXT系特有的Extent Format,盡量將檔案內容連續存放以提升傳統硬碟讀取速度。
- 指令操作
- lsattr:查詢檔案或目錄的延伸屬性。
- 常用參數:-d(僅查看目錄本身)、-a(列出隱藏檔)、-R(遞迴列出)。
- chattr:變更檔案或目錄的延伸屬性。
- 語法:chattr [+|-]屬性 檔案/目錄。
- +:新增屬性。
- -:移除屬性。
- =:直接設定屬性並覆蓋既有屬性;不建議,易誤清其他重要屬性。
實作練習:延伸屬性操作
- 練習一:檔案設定為僅能附加(小a)
- 目標:內容僅能增加,不能減少或修改。
- 步驟:
1. touch 建立檔案(例:ext-file-append-only)。 2. chattr +a [檔案名稱] 加上小a屬性。 3. echo "text" > [檔案名稱] 嘗試覆蓋寫入會失敗(> 會清空檔案)。 4. echo "text" >> [檔案名稱] 附加寫入成功(>> 為附加)。 5. 嘗試 mv 重命名或 rm -f 強制刪除均被拒絕,即使是Root。
- 練習二:目錄設定為僅能附加(小a)
- 目標:目錄只能新增檔案,不能刪除既有檔案。
- 步驟:
1. mkdir 建立目錄(例:ext-dir-append-only)。 2. chattr +a [目錄名稱] 加上小a屬性。 3. 目錄內 touch 新檔案可成功。 4. 編輯目錄內檔案內容可成功;小a屬性作用在目錄(檔名管理),非檔案內容。 5. 嘗試 rm 刪除目錄內檔案會被拒絕,即使是Root。 6. 嘗試 rm -rf 刪除整個目錄也會因無法刪除內部檔案而失敗。
- 練習三:檔案設定為完全鎖定(小i)
- 目標:檔案完全不可修改。
- 步驟:
1. touch 建立檔案(例:ext-file-immutable)。 2. chattr +i [檔案名稱] 加上小i屬性。 3. 使用 echo 透過 > 或 >> 修改內容均失敗。 4. 嘗試 mv 重命名或 rm 刪除均失敗。
- 練習四:目錄設定為完全鎖定(小i)
- 目標:目錄結構與內容完全不可變更。
- 步驟:
1. mkdir 建立目錄(例:ext-dir-immutable)。 2. chattr +i [目錄名稱] 加上小i屬性。 3. 可 cd 進入該目錄(進入權限與鎖定內容無關)。 4. 在目錄內嘗試 touch 新檔案或 mkdir 新目錄均失敗。 5. 嘗試 rmdir 或 rm -r 刪除該目錄亦失敗。