「緯育 2026-0402」修訂間的差異

出自頂極製作所
行 60: 行 60:
** 繼承性:在目錄下新建的檔案預設不會繼承ACL,需額外設定default ACL。
** 繼承性:在目錄下新建的檔案預設不會繼承ACL,需額外設定default ACL。
[[檔案:2026-0402-03.png|800px]]
[[檔案:2026-0402-03.png|800px]]
=== 目錄的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預設開啟且較複雜,教學或測試時講師常「先把它關掉」以避免干擾。
[[檔案:2026-0402-04.png|800px]]

於 2026年4月2日 (四) 07:01 的修訂

三種特殊權限

2026-0402-02.png

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。

2026-0402-03.png

目錄的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預設開啟且較複雜,教學或測試時講師常「先把它關掉」以避免干擾。

2026-0402-04.png