Linux的特殊檔案許可權

2021-06-16 08:25:11 字數 1628 閱讀 3573

一般檔案許可權讀(r),寫(w),執行(x)許可權比較簡單。一般材料上面都有介紹。這裡介紹一下一些特殊的檔案許可權——suid,sgid,stick bit。

如果你檢查一下/usr/bin/passwd和/tmp/的檔案許可權你就會發現和普通的檔案許可權有少許不同,如下圖所示:

這裡就涉及到suid和stick bit。

我們首先來談一下passwd程式特殊的地方。大家都知道,linux把使用者的密碼資訊存放在/etc/shadow裡面,該檔案屬性如下:

suid檔案許可權作用於可執行檔案。一般的可執行檔案在執行期的所有者是當前使用者,比如當前系統使用者是simon,simon執行程式a.out,a.out執行期的所有者應該是simon。但是如果我們給可執行檔案設定了suid許可權,則該程式的執行期所有者,就是該檔案所有者。還以前面的a.out為例,假如a.out設定了suid,並且其所有者是root,系統當前使用者是simon,當simon執行a.out的時候,a.out在執行期的所有者就是root,這時a.out可以訪問只有root許可權才能訪問的資源,比如讀寫shadow檔案。當a.out執行結束的時候當前使用者的許可權又回到了simon的許可權了。

passwd就是設定了suid許可權,並且passwd的所有者是root,所以所有的使用者都可以執行他,在passwd執行期,程式獲得臨時的root許可權,這時其可以訪問shadow檔案。當passwd執行完成,當前使用者又回到普通許可權。

同理,設定程式的sgid,可以使程式執行期可以臨時獲得所有者組的許可權。在團隊開發的時候,這個檔案許可權比較有用,一般系統用suid比較多。

sgid可以用於目錄,當目錄設定了sgid之後,在該目錄下面建立的所有檔案和目錄都具有和該目錄相同的使用者組。

對程式,該許可權告訴系統在程式完成後在記憶體中儲存乙份執行程式的備份,如該程式常用,可為系統節省點時間,不用每次從磁碟載入到記憶體。linux當前對檔案沒有實現這個功能,一些其他的unix系統實現了這個功能。

stick bit可以作用於目錄,在設定了貼上位的目錄下面的檔案和目錄,只有所有者和root可以刪除他。現在我們可以回頭去看看/tmp/目錄的情況,這個目錄設定了貼上位。所以說,並且所有人都可以對該目錄讀寫執行(777),這樣意味著所有人都可以在/tmp/下面建立臨時目錄。因為設定stick bit只有所有者和root才能刪除目錄。這樣普通使用者只能刪除屬於自己的檔案,而不能刪除其他人的檔案。如下圖所示:

前面介紹過suid與sgid的功能,那麼,如何開啟檔案使其成為具有suid與sgid的許可權呢?這就需要使用數字更改許可權了。現在應該知道,使用數字更改許可權的方式為「3個數字」的組合,那麼,如果在這3個數字之前再加上乙個數字,最前面的數字就表示這幾個屬性了(注:通常我們使用chmod xyz filename的方式來設定filename的屬性時,則是假設沒有suid、sgid及sticky bit)。

4為suid

2為sgid

1為sticky bit

假設要將乙個檔案屬性改為「-rwsr-xr-x」,由於s在使用者許可權中,所以是suid,因此,在原先的755之前還要加上4,也就是使用「chmod 4755 filename」來設定。

suid也可以用「chmod u+s filename」來設定,「chmod u-s filename」來取消suid設定;同樣,sgid可以用「chmod g+s filename」,「chmod g-s filename」來取消sgid設定。

Linux的特殊檔案許可權

一般檔案許可權讀 r 寫 w 執行 x 許可權比較簡單。一般材料上面都有介紹。這裡介紹一下一些特殊的檔案許可權 suid,sgid,stick bit。如果你檢查一下 usr bin passwd和 tmp 的檔案許可權你就會發現和普通的檔案許可權有少許不同,如下圖所示 這裡就涉及到suid和sti...

Linux的特殊檔案許可權

一般檔案許可權讀 r 寫 w 執行 x 許可權比較簡單。一般材料上面都有介紹。這裡介紹一下一些特殊的檔案許可權 suid,sgid,stick bit。如果你檢查一下 usr bin passwd和 tmp 的檔案許可權你就會發現和普通的檔案許可權有少許不同,如下圖所示 這裡就涉及到suid和sti...

Linux中特殊檔案許可權

linux中除了常見的讀 r 寫 w 執行 x 許可權以外,還有3個特殊的許可權,分別是setuid setgid和stick bit 1 setuid setgid 先看個例項,檢視你的 usr bin passwd 與 etc passwd檔案的許可權 root mylinux ls l usr...