歡迎光臨
每天分享高質量文章

如何使用特殊許可權:setuid、setgid 和 sticky 位 | Linux 中國

在某些情況下,使用特殊許可權會非常有用。但如果使用不當,可能會引入嚴重的漏洞,因此使用之前請三思。
— Egidio Docile


本文導航
編譯自 | https://linuxconfig.org/how-to-use-special-permissions-the-setuid-setgid-and-sticky-bits 
 作者 | Egidio Docile
 譯者 | jessie-pang

標的

瞭解特殊許可權的工作原理,以及如何識別和設定它們。

要求

◈ 瞭解標準的 Unix / Linux 許可權系統[1]

難度

簡單

約定

◈ # – 要求直接以 root 使用者或使用 sudo 命令執行指定的命令
◈ $ – 用普通的非特權使用者來執行指定的命令

介紹

通常,在類 Unix 作業系統上,檔案和目錄的所有權是基於檔案建立者的預設 uid(user-id)和 gid(group-id)的。啟動一個行程時也是同樣的情況:它以啟動它的使用者的 uid和 gid 執行,並具有相應的許可權。這種行為可以透過使用特殊的許可權進行改變。

setuid 位

當使用 setuid (設定使用者 ID)位時,之前描述的行為會有所變化,所以當一個可執行檔案啟動時,它不會以啟動它的使用者的許可權執行,而是以該檔案所有者的許可權執行。所以,如果在一個可執行檔案上設定了 setuid 位,並且該檔案由 root 擁有,當一個普通使用者啟動它時,它將以 root 許可權執行。顯然,如果 setuid 位使用不當的話,會帶來潛在的安全風險。

使用 setuid 許可權的可執行檔案的例子是 passwd,我們可以使用該程式更改登入密碼。我們可以透過使用 ls 命令來驗證:

  1. ls -l /bin/passwd

  2. -rwsr-xr-x. 1 root root 27768 Feb 11 2017 /bin/passwd

如何識別 setuid 位呢?相信您在上面命令的輸出已經註意到,setuid 位是用 s 來表示的,代替了可執行位的 x。小寫的 s 意味著可執行位已經被設定,否則你會看到一個大寫的 S。大寫的 S 發生於當設定了 setuid 或 setgid 位、但沒有設定可執行位 x時。它用於提醒使用者這個矛盾的設定:如果可執行位未設定,則 setuid 和 setgid 位均不起作用。setuid 位對目錄沒有影響。

setgid 位

與 setuid 位不同,setgid (設定組 ID)位對檔案和目錄都有影響。在第一個例子中,具有 setgid 位設定的檔案在執行時,不是以啟動它的使用者所屬組的許可權執行,而是以擁有該檔案的組執行。換句話說,行程的 gid 與檔案的 gid 相同。

當在一個目錄上使用時,setgid 位與一般的行為不同,它使得在所述目錄內建立的檔案,不屬於建立者所屬的組,而是屬於父目錄所屬的組。這個功能通常用於檔案共享(目錄所屬組中的所有使用者都可以修改檔案)。就像 setuid 一樣,setgid 位很容易識別(我們用 test 目錄舉例):

  1. ls -ld test

  2. drwxrwsr-x. 2 egdoc egdoc 4096 Nov 1 17:25 test

這次 s 出現在組許可權的可執行位上。

sticky 位

sticky (粘連)位的工作方式有所不同:它對檔案沒有影響,但當它在目錄上使用時,所述目錄中的所有檔案只能由其所有者刪除或移動。一個典型的例子是 /tmp 目錄,通常系統中的所有使用者都對這個目錄有寫許可權。所以,設定 sticky 位使使用者不能刪除其他使用者的檔案:

  1. $ ls -ld /tmp

  2. drwxrwxrwt. 14 root root 300 Nov 1 16:48 /tmp

在上面的例子中,目錄所有者、組和其他使用者對該目錄具有完全的許可權(讀、寫和執行)。sticky 位在可執行位上用 t 來標識。同樣,小寫的 t 表示可執行許可權 x也被設定了,否則你會看到一個大寫字母 T

如何設定特殊許可權位

就像普通的許可權一樣,特殊許可權位可以用 chmod 命令設定,使用數字或者 ugo/rwx 格式。在前一種情況下,setuidsetgid 和 sticky 位分別由數值 4、2 和 1 表示。例如,如果我們要在目錄上設定 setgid 位,我們可以執行:

  1. $ chmod 2775 test

透過這個命令,我們在目錄上設定了 setgid 位(由四個數字中的第一個數字標識),並給它的所有者和該目錄所屬組的所有使用者賦予全部許可權,對其他使用者賦予讀和執行的許可權(目錄上的執行位意味著使用者可以 cd 進入該目錄或使用 ls 列出其內容)。

另一種設定特殊許可權位的方法是使用 ugo/rwx 語法:

  1. $ chmod g+s test

要將 setuid 位應用於一個檔案,我們可以執行:

  1. $ chmod u+s file

要設定 sticky 位,可執行:

  1. $ chmod o+t test

在某些情況下,使用特殊許可權會非常有用。但如果使用不當,可能會引入嚴重的漏洞,因此使用之前請三思。


via: https://linuxconfig.org/how-to-use-special-permissions-the-setuid-setgid-and-sticky-bits

作者:Egidio Docile[3] 譯者:jessie-pang 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出

LCTT 譯者

jessie-pang ? ?
共計翻譯:6 篇
貢獻時間:18 天


推薦文章

< 左右滑動檢視相關文章 >

點選圖片、輸入文章 ID 或識別二維碼直達

贊(0)

分享創造快樂