「緯育 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 的修訂
三種特殊權限
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。