「緯育 2026-0402」修訂間的差異
(→三種特殊權限) |
(→特殊權限概論) |
||
| 行 8: | 行 8: | ||
** 正確使用這類機制後,可以減少反覆切換高權限身分或頻繁授權的需求。 | ** 正確使用這類機制後,可以減少反覆切換高權限身分或頻繁授權的需求。 | ||
** 其設定方式,是在原本的讀、寫、執行三種權限之外,再加上特殊標記。雖然概念不算複雜,但若設定錯誤,仍可能對系統造成明顯的安全風險。 | ** 其設定方式,是在原本的讀、寫、執行三種權限之外,再加上特殊標記。雖然概念不算複雜,但若設定錯誤,仍可能對系統造成明顯的安全風險。 | ||
** [https://drive.google.com/file/d/13B_VwOeV68Gwq5WxGV6XaK9Urv_9tPgh Linux-權限管理.txt] | |||
* 特殊權限的三種主要類型 | * 特殊權限的三種主要類型 | ||
於 2026年4月2日 (四) 07:22 的最新修訂
三種特殊權限
本講座深入探討了 Linux 系統中的三種特殊權限機制,並簡要補充了進階授權清單與強制式安全控管觀念。講師透過實際操作與情境範例,詳細說明這些特殊權限的用途、設定條件、啟用效果以及潛在的安全風險。講座強調,這類特殊權限的目的,在於補足系統預設權限模型的不足,並在特定情況下暫時改變程式執行時所採用的身分或群組判定;若設定不當,便可能造成系統安全上的疑慮。內容涵蓋了如何透過特殊權限讓程式在執行時取得較高層級的有效身分、如何讓共享資料夾中的新檔案自動繼承指定群組,以及如何保護多人共用目錄中的檔案不被其他使用者任意刪除。整場講座的核心,在於讓學員理解特殊權限的原理,並建立系統管理與資訊安全上的正確認知。
特殊權限概論
- 特殊權限的目的與特性
- 特殊權限的設計,是為了補足系統預設權限配置在某些情境下的不足,常見於需要精準控制存取行為的工作環境。
- 它並不等同於無限制擴大權限,而是在特定執行條件下,暫時改變程式所採用的有效身分或有效群組。
- 正確使用這類機制後,可以減少反覆切換高權限身分或頻繁授權的需求。
- 其設定方式,是在原本的讀、寫、執行三種權限之外,再加上特殊標記。雖然概念不算複雜,但若設定錯誤,仍可能對系統造成明顯的安全風險。
- Linux-權限管理.txt
- 特殊權限的三種主要類型
- 第一類:以檔案擁有者身分執行的特殊機制。
- 第二類:以檔案或目錄所屬群組為核心的繼承或代入機制。
- 第三類:針對多人共用目錄所設計的刪除保護機制。
- 特殊權限的表示方式
- 第一類特殊機制啟用後,權限字串中與擁有者執行位相關的位置,通常會出現特殊記號。
- 第二類特殊機制啟用後,群組執行位相關的位置也會出現特殊記號。
- 第三類目錄保護機制啟用後,其他人執行位相關的位置會出現另一種特殊記號。
- 同一個檔案或目錄可以同時配置多種特殊權限,但是否真正產生效果,仍須符合各自的啟用條件。
- 檢查與設定方式
- 檢查時,可使用查看檔案詳細資訊的清單指令,觀察其權限欄位是否出現特殊標記。
- 設定時,可使用變更權限的工具,以符號方式加入特殊位元。
- 也可以用四位數模式設定:最高位用來表示特殊權限,後三位則對應一般的讀、寫、執行配置。
- 常見做法是用最高位的不同數值,分別代表三種特殊權限,再搭配一般權限數值完成整體設定。
第一類特殊機制:以檔案擁有者身分執行
- 啟用條件
- 僅適用於可直接執行的二進位程式,不適用於一般純文字腳本,也不適用於目錄。
- 該程式本身在擁有者欄位必須具備執行條件,否則特殊效果不會真正成立。
- 實際執行者也必須先通過基本執行檢查,若原本就無法執行該程式,特殊機制自然無法被觸發。
- 大寫標記與小寫標記的差異
- 小寫標記代表:特殊機制已設定,且原本的執行條件完整存在,因此此機制可正常生效。
- 大寫標記代表:雖然特殊機制被設定了,但對應的執行條件不足,因此只看得到標記,實際上不會發揮作用。
- 效果與常見範例
- 當使用者執行一個套用了此機制的程式時,該程式在執行期間會暫時採用「檔案擁有者」的有效身分來處理工作。
- 最常見的例子,是一般使用者更新自己的登入密碼時,背後需要寫入只有系統最高管理層才可修改的驗證資料。由於密碼更新程式本身被設計成在執行時暫時借用檔案擁有者身分,因此一般使用者不必直接握有高層級帳號,也能完成自己的密碼更新作業。
- 實作與風險說明
- 若把一般檔案檢視工具錯誤地配置為可在執行時借用高層級身分,那麼原本無法讀取的重要系統資料,便可能被一般使用者間接讀到。這種做法風險極高,實務上不應任意套用在通用型工具上。
- 早期某些行動裝置環境曾出現文件解析元件的權限設計缺陷。當系統以過高身分執行有漏洞的元件時,只要使用者開啟特製文件,便可能讓不該被執行的動作以高層級身分發生,進而危及整體系統安全。這類案例說明了:特殊權限一旦配合程式弱點,就可能產生非常嚴重的後果。
第二類特殊機制:以群組為核心的繼承或代入
- 條件與應用場景
- 這一類機制可用於二進位程式,也可用於目錄。
- 無論用於何者,對應的群組欄位都必須具備適當的執行條件,才能讓效果完整成立。
- 套用在執行程式上的效果
- 當使用者執行一個配置了此機制的程式時,程式執行期間所採用的有效群組,會暫時改為該檔案本身所屬的群組。
- 這種作法適合某些需要依照指定群組資源來運作的程式。
- 套用在目錄上的效果
- 當一個共享資料夾被設定此機制後,任何人在該資料夾內建立的新檔案或新子目錄,其所屬群組都會自動繼承上層資料夾的群組設定,而不是沿用建立者自己的預設群組。
- 這對團隊共用空間非常重要,因為它能讓同一協作群組內的成員,更一致地存取新建立的內容。
- 實作範例:共享資料夾
- 假設某個團隊共用資料夾被設定為群組繼承模式。
- 當不同使用者在該資料夾中建立新檔案時,檔案擁有者仍然是建立者本人,但所屬群組會統一繼承為該共享資料夾既有的群組。
- 這樣一來,只要群組權限配置得當,同一工作群組的成員就能更順利地共同維護與編修資料。
- 這種機制是多人協作環境中非常實用的管理手法。
第三類特殊機制:共用目錄中的刪除保護
- 條件與作用
- 這一類機制僅適用於目錄,不適用於一般檔案。
- 該目錄必須允許使用者進入,否則即使設定了保護標記,也無法實際使用。
- 它的主要用途,是在允許多人寫入的共用空間中,限制使用者只能刪除或移動自己建立的內容,而不能任意刪改其他人建立的檔案。
- 系統最高管理層通常不受此限制。
- 權限顯示方式
- 若對應位置同時具有可進入條件,則通常會顯示為有效的小寫標記。
- 若缺少必要的進入條件,則會以大寫形式出現,代表雖已設定,但效果並不完整。
- 實作範例:公共暫存空間
- 許多系統都會提供一個所有使用者都可暫時存放資料的公共空間。
- 在這類目錄中,大家通常都能建立自己的暫存檔案。
- 但因為此目錄開放多人共同使用,若沒有額外保護,任何人都可能誤刪他人資料。
- 套用此刪除保護機制後,每位使用者仍可自由處理自己建立的暫存內容,但不能任意移除其他使用者建立的檔案。
- 這可有效維持共用環境的穩定性與基本秩序。
其他補充的權限控管機制
- 細部授權清單
- 這是一種比傳統擁有者、群組、其他人三分法更細緻的授權方式。
- 管理者可以針對特定使用者或特定群組,另外指定更精細的讀取、修改或執行條件。
- 當一般權限模型不足以描述真實需求時,這類方式會相當實用。
- 強制式安全政策
- 這是一種更進階的安全控制觀念,重點不只是檔案權限本身,而是由系統額外施加一套安全政策,限制各種程序與資源之間可進行的行為。
- 它通常比傳統權限模型更複雜,也更講究整體安全規則的設計與維護。
- 在部分系統發行版中,這類機制常被列為進階管理主題。
ACL 控制
本系列講座探討了Linux系統中的特殊權限設定與精細化的存取控制。第一部分透過實際操作展示了SUID(Set User ID)權限的潛在風險,講師以less指令為例,說明了當為指令設定SUID後,普通使用者執行它時,程序所有者會變為檔案的擁有者(如root),若該程式存在漏洞,可能導致權限提升,構成嚴重系統威脅。
第二部分則深入介紹了存取控制列表(ACL)機制,以解決標準權限(使用者、群組、其他)在應對複雜授權情境時的局限性。ACL擴增了標準權限,允許為檔案或目錄設定多個特定使用者和群組的存取規則。課程涵蓋了如何檢查系統對ACL的支援、識別與讀寫ACL規則,並解釋了mask(最高有效權限)和default(預設繼承規則)等核心概念。
第三部分透過五個實作練習,詳細演示了如何使用getfacl和setfacl指令管理ACL。練習內容包括:為檔案賦予特定使用者或群組的讀寫權限(即使基本權限不允許)、使用mask暫時中止ACL權限、清除或移除特定ACL規則,以及將ACL應用於目錄。講師強調了ACL在提供彈性權限管理方面的實用性,同時也說明了其運作原理與注意事項。
標準權限與特殊權限的局限性
- 標準權限的限制
- 傳統的Linux檔案權限系統非常單一,每個檔案或目錄只擁有一組擁有者(user)、一個群組(group)以及對應的讀(r)、寫(w)、執行(x)權限。
- 當需要將一個檔案授權給兩個以上特定的使用者或群組時,標準權限會變得難以管理。例如,需要將多個使用者加入同一個群組,可能會打亂原有的群組規劃。
- 特殊權限(SUID)的概念與風險
- SUID(Set User ID)是一種特殊權限,允許使用者在執行某個可執行檔時,暫時獲得該檔案擁有者的權限。可使用chmod u+s [檔案名稱]來設定。
- 當一個指令被設定了SUID權限後(假設其擁有者為root),任何使用者執行它時,該程序的有效使用者ID會變成root。
- 安全風險:如果一個具有SUID權限且屬於root的程式存在漏洞,攻擊者便可能利用這個漏洞執行任意程式碼,從而獲得系統的root權限。漏洞可能潛伏很久才被發現,例如曾有Linux核心被植入後門長達十年未被發現的案例。
權限與程序執行分析
- 一般權限下的指令執行
- 使用者可以讀取具有讀取權限的檔案,例如普通使用者(user)可以透過less指令查看/etc/passwd檔案。
- 透過ps aux | grep [指令名稱]指令,可以查詢系統中正在執行的程序。
- 在未設定特殊權限的情況下,當一個使用者執行某個指令時,該程序的擁有者就是該使用者本人。
- SUID權限下的程序執行
- 講師展示了,在less被設定SUID後,user再次執行less指令,但透過ps指令查詢,發現該程序的擁有者變成了root,而非執行它的user。
存取控制列表 (Access Control List, ACL)
- ACL的定義與目的
- ACL是一種補充標準權限不足的功能,提供更精細的權限控制。
- 它能針對使用者(User)、群組(Group)及其他人(Other)的權限進行擴增,允許一個檔案或目錄擁有多個使用者和群組的權限設定。
- 檢查系統對ACL的支援
- ACL通常是Linux核心的預設功能。可以使用 dmesg | grep -i acl 指令來檢查開機時是否已載入ACL功能。
- 識別與讀取ACL
- 識別:使用 ls -l 指令時,若檔案權限字串末尾出現一個「+」號,代表該檔案或目錄已設定了ACL。若末尾是「.」(點),則代表啟用了SELinux標籤。
- 讀取:使用 getfacl [檔案或目錄名] 指令來讀取ACL的詳細規則。(在較新Ubuntu版本可能需先apt install acl)
- 輸出內容解讀:
- user::rw-:檔案擁有者的權限。
- user:joey:rwx:額外新增的使用者 joey 的權限。
- group::r--:檔案所屬群組的權限。
- group:manager:r-x:額外新增的群組 manager 的權限。
- mask::rwx:定義ACL規則的「最高有效權限」。所有額外設定的user和group權限都會受此限制。
- other::r--:其他人的權限。
- default:...:預設ACL,只對目錄有效,作用於「未來」在該目錄下新建立的檔案或目錄,使其自動繼承ACL規則。
- 設定與管理ACL
- 使用 setfacl [選項] [規則] [檔案或目錄名] 指令來設定ACL。
- 常用選項:
- -m (modify):新增或修改ACL規則。
- -x (remove):移除指定的ACL規則。
- -b (remove-all):移除所有ACL規則。
- 規則格式:u:[帳號]:[權限] 或 g:[群組]:[權限]。
透過實作練習ACL
- 練習一:賦予特定使用者讀取權限
- 為權限600的檔案,使用 setfacl -m u:[使用者名稱]:r [檔案名] 新增讀取權限。
- 練習二:賦予特定群組讀寫權限
- 為權限600的檔案,使用 setfacl -m g:[群組名稱]:rw [檔案名] 新增群組讀寫權限。
- 練習三:使用 mask 暫停 ACL 權限
- 使用 setfacl -m m::--* [檔案名] 將mask權限清空,即可暫時禁用所有ACL權限,而無需刪除規則。
- 練習四:移除與清除 ACL 規則
- setfacl -b [檔案名]:清除所有ACL,+號消失。
- setfacl -x g:[群組名] [檔案名]:僅刪除單一規則,但+號可能因mask存在而保留。
- 練習五:對目錄設定 ACL
- 為權限700的目錄,使用 setfacl -m g:[群組名稱]:rwx [目錄名] 賦予群組完全權限。
- 繼承性:在目錄下新建的檔案預設不會繼承ACL,需額外設定default ACL。
目錄的Default ACL(預設存取控制清單)
- 作用範圍與影響
- Default ACL設定在目錄上,不直接改變該目錄本身的存取權限;其作用是在該目錄下新建立的檔案或子目錄自動繼承預設的ACL項目。
- 當使用者在已設Default ACL的目錄內建立檔案時,系統會依Default ACL內容自動附加相應的權限設定到新檔案上。
- 設定方式與語法概念
- 在目錄層級加上「Default」ACL項目即可;語法需指定使用者(如Amy、Gooper)與權限(「全線」指權限,應為讀、寫、執行的權限組合)。
- 示意格式:指定使用者名稱,以冒號分隔使用者與其權限,例如「使用者:名稱:權限」,作為Default ACL條目。
- 講師提到後續有「練習題」與「答案」可供參考,但課堂上不展開。
SELinux(Security-Enhanced Linux)概述與系統支援
- 支援與預設狀態
- 由「美國國家安全局(NSA)」與「Chun Lang」相關介紹(講者口述),用於提升Linux安全性。
- Red Hat系列(Red Hat、CentOS、Fedora、Rocky Linux等)預設開啟SELinux,需特別注意其影響與配置。
- Debian系列可能「未安裝」或「不支援」;是否支援視各發行版而定。
- 機制與服務特性
- SELinux作為系統服務,對檔案、目錄、程序(process)與網路存取都會檢查其「標籤」(label)。
- 標籤存在於各種對象:
- 檔案與目錄:可用「ls -Z」查看(示例提及對/etc目錄使用「ls -Z /etc」)。
- 網路介面與埠(port)、網路卡也有標籤。
- 程序(含遠端連線時啟動的程序)也具備標籤。
- 標籤不一定相同:例如/etc的標籤樣式不代表/root目錄相同;每個對象都有其一串標籤。
- Policy(政策)與執行邏輯
- SELinux以「Policy」定義允許或拒絕的規則,主設定檔中包含具體規劃。
- 當SELinux檢測到實際標籤與Policy預期不一致時,強制模式下將拒絕執行。
- 標籤結構與複雜性
- 標籤由多段以冒號分隔的欄位構成,常見欄位包含user、role(講者口述為ruler)、type、level、label等。
- 由於標籤與Policy設計較為複雜,講師表示課堂不細講,僅提供常用整理供自行研究。
SELinux運作模式與管理
- 運作模式
- enforce(強制):標籤必須與Policy匹配,若不一致即不允許執行。
- permissive(寬容):會檢查並記錄標籤錯誤,但仍允許執行(「我看你標籤有錯,但是我還是給你RUN」)。
- disable(停用):直接關閉SELinux,不進行檢查或強制。
- 臨時與永久設定
- 臨時調整:可使用「setenforce」切換,達到暫時關閉或調整模式。
- 永久關閉或設定開機模式:至主設定檔(實務常見為/etc/selinux/config)設定為對應目標(如permissive或disabled),使每次開機套用。
- 實務建議與注意事項
- 在Red Hat與CentOS等系統上,因SELinux預設開啟且較複雜,教學或測試時講師常「先把它關掉」以避免干擾。