你是否曾经遇到过需要在Linux系统上执行任务,却遭遇到令人沮丧的访问拒绝的情况?那么,告别这些困扰,迎接Linux中特殊权限的世界吧!
本教程将带你掌握Linux中特殊权限的细节,包括粘着位(Sticky Bit)、设置用户ID(SUID)和设置组ID(SGID)。这些特殊权限提供了更高级别的安全控制。
继续阅读,以精确和自信地安全管理你的文件!
先决条件
在深入了解Linux中的特殊权限之前,请确保你拥有一台Linux机器。本教程使用Ubuntu 22.04 LTS(Jammy Jellyfish)进行实际演示。
在Linux中使用特殊权限执行文件(SUID)
Linux文件权限通常基于用户和用户组的权限来确定用户对文件的读取、写入或执行的能力。然而,在某些情况下,用户必须以文件所有者的权限而不是自己的权限来执行文件。
例如,考慮一個僅允許根用戶運行的程序,但普通用戶需要執行特定任務。在這種情況下,SUID 變得非常重要。
要查看如何設置 SUID 權限,請按照以下步驟進行操作:
1. 打開終端並執行以下命令來創建一個名為 A-user
(任意)的用戶(useradd
)並為其設置密碼(passwd
)。

2. 接下來,運行以下stat
命令查看cat
命令的現有權限。
請注意下面的訪問權限,因為您將需要它進行後續比較:
- 0755 – 允許以其所有者的權限執行文件,當非特權用戶運行文件時提供提升的權限。
- -rwxr-xr-x – 設置擁有者對文件的讀取、寫入和執行權限(rwx),而組成員和其他用戶可以讀取和執行文件(r-x 和 r-x)。

cat
command3. 現在,運行下面的chmod
命令,該命令不提供輸出,但在cat
命令上設置了 SUID 位。
該命令允許cat
命令以文件所有者的權限運行,而不是運行命令的用戶的權限。
? 請注意,使用SUID應謹慎進行,如果實施不當,可能會引入安全風險。請確保只將SUID應用於可信任的命令和文件。
4. 設置SUID位後,運行以下stat
命令,通過重新檢查cat
命令的權限來驗證SUID位。
如果成功,您將看到以下內容,並將其與第二步中記錄的信息進行比較:
- 0755變為4755,其中數字4表示SUID位。
- -rwxr-xr-x變為-rwsr-xr-x,其中s分別表示用戶的執行(x)權限。

5. 運行以下cat
命令,測試當前登錄用戶對/etc/shadow
文件的訪問權限。該文件是存儲加密的用戶密碼和相關信息的關鍵系統文件,只有root用戶才能訪問。
在Linux中,默認情況下,cat
命令允許您查看文件的內容。但這種行為並不總是對每個文件都成立。
出現下面的消息,是因為當前用戶沒有訪問該文件的權限。

6. 現在,依次運行以下命令以切換(su
)到新用戶(A-user
),然後再次嘗試訪問/etc/shadow
文件。
這次,cat
命令以文件所有者(通常是 root)的權限運行,而不是執行該命令的用戶的權限。
由於您暫時授予了 A-user 讀取該文件內容的權限,您將獲得如下輸出。

7. 執行以下命令以出退出當前用戶(A-user)並恢復cat
命令的權限到原始狀態。

cat
command8. 最後,運行以下命令來驗證已經移除了 SUID 位。
請注意,訪問權限中不再包含 SUID 位4 和s。

在 Linux 目錄中啟用協作工作流程(SGID)
通過 SUID 在 Linux 中執行具有特殊權限的文件無疑效果良好。但如果您的目標是協作工作流程,即多個用戶協作項目,該怎麼辦?通常,您必須確保新建文件繼承父目錄的組擁有權。
面對這種情況,SGID 顯然是一個改變局面的功能。這個強大的功能簡化了共享資源的管理,在 Linux 環境中增強了基於組的工作流程。
為了了解SGID的工作原理,您將創建一個群組,將用戶添加到其中,將SGID權限設置在一個目錄上,並按如下方式測試其功能:
1. 執行以下命令以以root用戶身份登錄並創建一個名為 demo
(任意)的新群組。 這個群組是您用來測試SGID功能的。
這些命令不會

2. 接下來,運行下面的命令來創建兩個用戶( userA
和 userB
),您將用這些用戶來模擬協作環境。

3. 創建新用戶後,運行下面的 usermod
命令,該命令不會產生終端輸出,但將用戶( userA
和 userB
)添加到 demo
群組中。
4. 現在,執行下面的每個命令,創建一個名為 /demo-dir
(任意)的目錄,並將該目錄的用戶和群組所有權分別設置為 userA
和 demo
。
?當成功時,這些命令不會產生輸出,這適用於整個教程。
5. 接下來,運行以下 ls
命令來查看 /demo-dir
目錄的權限。
以下輸出驗證 /demo-dir 目錄的使用者設置為 userA,群組設置為 demo。

6. 經過驗證的權限後,執行以下 chmod
命令,將 SGID 位設置在 /demo-dir/
目錄上,如下所示:
g+s
– Set the SGID bit on the/demo-dir/
directory.o-rwx
– Remove all permissions (read, write, execute) for others.u+rwx
– Grant read, write, and execute permissions to the owner.g+rwx
– Grant read, write, and execute permissions to the group.
7. 一旦設置了 SGID,執行以下命令驗證 /demo-dir
目錄的權限。
如果成功,您將看到 SGID 位被設置,表示為數字 2
在八進制模式權限之前,以及群組所有者執行 (x
) 權限位置上的 s
(rws
)。

8. 接下來,執行每個以下命令來為 userA
創建一個 /home
目錄。
9. 執行以下命令切換 (su
) 到 userA
並在 /demo-dir
目錄中創建一個名為 textA.txt
(任意)的文件(touch
)。
這些命令沒有輸出(這適用於本教程的整個過程),但您將在下一步驟中驗證文件的權限。
10. 執行以下 ls
命令查看 textA.txt
文件的權限。
以下,textA.txt檔案的群組擁有者是demo,這是創建者userA的主要群組。 demo群組的成員可以讀取和修改該檔案,而其他人只能讀取它。
為了確保/demo-dir目錄中的新檔案繼承目錄的群組擁有權,應在該目錄上設置一個SGID位,您將在以下步驟中介紹。

11. 現在,調用以下命令以退出當前使用者(userA)並在/demo-dir
目錄中設置SGID位(chmod g+s
)

12. 一旦設置了SGID,執行以下命令來驗證您添加到/demo-dir
目錄的SGID位。
如下所示,您將注意到已添加SUID位2,並且在群組擁有者執行位置上有一個s。 此輸出確認已成功將SGID位設置為/demo-dir目錄。

13. 接下來,切換回userA
並在/demo-dir
目錄中創建另一個名為testA.txt
(任意)的檔案。
14. 創建後,運行下面的ls
命令檢查新檔案(testA.txt
)的擁有權。
如果SGID正常工作,輸出將顯示,儘管userA是擁有者,但由於在/demo-dir目錄上設置了SGID位,因此群組擁有權是demo。

15. 現在,為userB
創建一個/home
目錄,以進一步測試SGID功能。
16. 切換到userB
並在同一個/demo-dir
目錄中創建一個名為testB.txt
(任意)的文件。

17. 查看(ls
)新文件(testB.txt
)的信息。
檢查textB.txt文件的擁有權。

在目錄中保護文件(粘性位)
在Linux目錄中啟用協作工作流程可以促進團隊合作和無縫協作。但是,當您必須為有效管理文件建立安全環境時,粘性位權限將派上用場。
通過設置粘性位,您基本上是將“城堡的鑰匙”交到文件所有者、目錄所有者或root用戶手中。這樣做可以確保只有他們有權刪除或重命名目錄中的文件,為敏感數據提供了額外的保護。
要設置粘性位權限,您必須首先使用以下步驟創建共享目錄:
1. 以 root 用戶登錄並創建一個(共享)目錄(mkdir
),其中多個用戶可以創建文件。
2. 接下來,運行以下命令來更改/shared-dir
目錄的權限,以授予所有人寫入權限。
在1777
中,第一個數字(1
)設置粘性位,其餘的數字(777
)使目錄對所有人可讀、可寫和可執行。
以下是 Linux 系統中粘性位的特點或屬性:
Feature | Function |
Directory Protection | When the Sticky Bit is set on a directory, it allows only the owner of a file within that directory to delete or rename their own files. Other users, even if they have write permissions to the directory, cannot delete or rename files owned by other users. |
Shared Directories | The sticky bit is handy for directories that are shared among multiple users. For example, on a system with a /tmp directory used by all users to store temporary files, setting the Sticky Bit prevents users from accidentally or maliciously deleting files owned by other users. |
在權限字段的後半部分可以看到字母 ‘t‘,這表示粘性位被設置為/shared-dir目錄。

3. 切換到userA
並在/shared-dir
目錄中創建一個名為fileA.txt
(任意)的文件:
4. 退出 userA,切換到userB
,並在同一個/shared-dir
目錄中創建另一個名為fileB.txt
(任意)的文件。
5. 現在,退出 使用者B
,切換到 使用者A
,並嘗試刪除 使用者B
的 fileB.txt
檔案。
由於只有檔案擁有者才能進行更改或刪除檔案,您將獲得如下輸出。

6. 最後,執行以下命令列表 (ls
) 以列出共享目錄 (/shared-dir
) 內的所有檔案。
如果 Sticky Bit 權限起作用,您將看到由使用者B創建的 fileB.txt 檔案安然無恙,並且尚未被刪除。

結論
隨著您結束對 Linux 中特殊權限的探索,您已經解鎖了一套強大的工具:SUID、SGID 和 Sticky Bit。憑藉這些知識,您現在可以精確調整訪問控制,並以精密方式保護您的檔案。
但不要停在這裡!為什麼不試著設置一個具有 SGID 的共享目錄,並試驗檔案如何繼承群組所有權?Linux 的世界是您的遊樂場,每一次嘗試都會使您精通以精湛技巧保護系統的藝術!
Source:
https://adamtheautomator.com/special-permissions-in-linux/