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

出自頂極製作所
(建立內容為「== 三種特殊權限 == == ACL 控制 ==」的新頁面)
 
行 1: 行 1:
== 三種特殊權限 ==
== 三種特殊權限 ==


[[檔案:2026-0402-02.png|800px]]
== ACL 控制 ==
本系列講座探討了Linux系統中的特殊權限設定與精細化的存取控制。第一部分透過實際操作展示了SUID(Set User ID)權限的潛在風險,講師以less指令為例,說明了當為指令設定SUID後,普通使用者執行它時,程序所有者會變為檔案的擁有者(如root),若該程式存在漏洞,可能導致權限提升,構成嚴重系統威脅。<br><br>
第二部分則深入介紹了存取控制列表(ACL)機制,以解決標準權限(使用者、群組、其他)在應對複雜授權情境時的局限性。ACL擴增了標準權限,允許為檔案或目錄設定多個特定使用者和群組的存取規則。課程涵蓋了如何檢查系統對ACL的支援、識別與讀寫ACL規則,並解釋了mask(最高有效權限)和default(預設繼承規則)等核心概念。<br><br>
第三部分透過五個實作練習,詳細演示了如何使用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|800px]]


== ACL 控制 ==
== ACL 控制 ==

於 2026年4月2日 (四) 06:46 的修訂

三種特殊權限

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

ACL 控制