Linux 如何設定特殊許可權?

唐青枫發表於2024-12-10

簡介

透過使用 setuidsetgidsticky,它們是 Linux 中的特殊許可權,可以對檔案和目錄的訪問和執行方式提供額外的控制。

命令八進位制數字功能
setuid4當執行檔案時,它以檔案所有者的許可權執行,而不是執行它的使用者的許可權執行。
setgid2當執行檔案時,它將以檔案組的許可權執行。對於目錄,它將確保檔案繼承目錄的組。
sticky1對於目錄,它確保只有檔案所有者可以刪除或重新命名檔案,即使其他人具有寫許可權。

setuid(Set User ID)

通常用於需要提升許可權的可執行二進位制檔案

setuid 新增到檔案中

chmod u+s <filename>

驗證 setuid

ls -l filename

# 示例輸出如下:
-rwsr-xr-x 1 root root 12345 Nov 29 12:00 filename

所有者的執行位置 (rws) 中的s表示 setuid

移除 setuid

chmod u-s <filename>

setgid(Set Group ID)

使用在檔案上時,確保檔案以檔案的組許可權執行,而不是使用者的主要組許可權執行

使用在目錄上時,確保目錄內建立的所有檔案都繼承目錄的組所有權,而不是使用者的主要組

setgid 新增到檔案或目錄中

chmod g+s <filename>/<directory>

驗證 setgid

ls -ld <filename>/<directory>

# 示例輸出如下:
drwxr-sr-x 2 user group 4096 Nov 29 12:00 directory_name

組執行位置(r-s)中的s表示 setgid

移除 setgid

chmod g-s <filename>/<directory>

sticky

通常用於目錄以防止使用者刪除或重新命名不屬於他們自己的檔案,即使該目錄對他們具有寫許可權,適用於 /tmp 等共享目錄

新增 sticky

chmod +t <directory_name>

驗證 sticky

ls -ld <directory_name>

# 示例輸出如下:
drwxrwxrwt 2 user group 4096 Nov 29 12:00 directory_name
其他人的執行位置(rwt)中的t表示 sticky(粘滯位)

移除 sticky

chmod -t <directory_name>

使用八進位制數字的形式設定

chmod 6755 <filename>

# 第一個6 = setuid + setgid (4 + 2)
# 第二個7 = 所有者的許可權 rwx
# 後面兩個5 = 組和其他人的許可權 r-x

相關文章