天天看點

linux特殊權限SUID、SGID、SBIT

linux特殊權限SUID、SGID、SBIT

一、Set UID

當s這個标志出現在檔案所有者的x權限上時,如/usr/bin/passwd這個檔案的權限狀态:“-rwsr-xr-x.”,此時就被稱為Set UID,簡稱為SUID。那麼這個特殊權限的特殊性的作用是什麼呢?

1、SUID權限僅對二進制程式(binary program)有效;

2、執行者對于該程式需要具有x的可執行權限;

3、本權限僅在執行該程式的過程中有效(run-time);

4、執行者将具有該程式擁有者(owner)的權限。

SUID的目的就是:讓本來沒有相應權限的使用者運作這個程式時,可以通路他沒有權限通路的資源。passwd就是一個很鮮明的例子,下面我們就來了解一下這相passwd執行的過程。

我們知道,系統中的使用者密碼是儲存在/etc/shadow中的,而這個檔案的權限是----------. (這個權限和以前版本的RHEL也有差别,以前的是-r--------)。其實有沒有r權限不重要,因為我們的root使用者是擁有最高的權限,什麼都能幹了。關鍵是要把密碼寫入到/etc/shadow中。我們知道,除了root使用者能修改密碼外,普通使用者自己同樣也能修改密碼,為什麼沒有寫入權限,還能修改密碼,就是因為這個SUID功能。

下面就是passwd這個指令的執行過程

1、因為/usr/bin/passwd的權限對任何的使用者都是可以執行的,是以系統中每個使用者都可以執行此指令。

2、而/usr/bin/passwd這個檔案的權限是屬于root的。

3、當某個使用者執行/usr/bin/passwd指令的時候,就擁有了root的權限了。

4、于是某個使用者就可以借助root使用者的權力,來修改了/etc/shadow檔案了。

5、最後,把密碼修改成功。

注:這個SUID隻能運作在二進制的程式上(系統中的一些指令),不能用在腳本上(script),因為腳本還是把很多的程式集合到一起來執行,而不是腳本自身在執行。同樣,這個SUID也不能放到目錄上,放上也是無效的。

二、Set GID

我們前面講過,當s這個标志出現在檔案所有者的x權限上時,則就被稱為Set UID。那麼把這個s放到檔案的所屬使用者組x位置上的話,就是SGID。如開頭的/usr/bin/wall指令。

那麼SGID的功能是什麼呢?和SUID一樣,隻是SGID是獲得該程式所屬使用者組的權限。

SGID有幾點需要我們注意:

1、SGID對二進制程式有用;

2、程式執行者對于該程式來說,需具備x的權限;

3、SGID主要用在目錄上;

了解了SUID,我想SGID也很容易了解。如果使用者在此目錄下具有w權限的話,若使用者在此目錄下建立新檔案,則新檔案的群組與此目錄的群組相同。

三、Sticky Bit

這個就是針對others來設定的了,和上面兩個一樣,隻是功能不同而已。

SBIT(Sticky Bit)目前隻針對目錄有效,對于目錄的作用是:當使用者在該目錄下建立檔案或目錄時,僅有自己與 root才有權力删除。

最具有代表的就是/tmp目錄,任何人都可以在/tmp内增加、修改檔案(因為權限全是rwx),但僅有該檔案/目錄建立者與 root能夠删除自己的目錄或檔案。

注:這個SBIT對檔案不起作用。

SUID/SGID/SBIT權限設定

和我們前面說的rwx差不多,也有兩種方式,一種是以字元,一種是以數字。

4 為 SUID = u+s

2 為 SGID = g+s

1 為 SBIT = o+t

下面我們就來看看如何設定,并看看達到的效果。

先看SUID的作用及設定

[root@shiyanji ~]# ll /usr/bin/passwd

-rwsr-xr-x. 1 root root 25980 2月  22 2012 /usr/bin/passwd

[root@shiyanji ~]# chmod u-s /usr/bin/passwd

-rwxr-xr-x. 1 root root 25980 2月  22 2012 /usr/bin/passwd

上面操作的目的是将檔案/usr/bin/passwd中的s去掉,把其恢複成普通檔案權限,下面我們讓普通使用者修改自己的密碼,看看是否還能成功。

[wtf@shiyanji ~]$ passwd

更改使用者 wtf 的密碼 。

為 wtf 更改 STRESS 密碼。

(目前)UNIX 密碼:

新的 密碼:

重新輸入新的 密碼:

passwd: 鑒定令牌操作錯誤

linux特殊權限SUID、SGID、SBIT

此時,你會發現普通使用者無法更改自己的密碼,現在我們再把/usr/bin/passwd檔案狀态有x變回s,再看看能否讓普通使用者更改自己的密碼。

[root@shiyanji ~]# chmod u+s /usr/bin/passwd

linux特殊權限SUID、SGID、SBIT

我想這一下,你對SUID的作用已經了解了吧。

再看SGID的作用及設定

[root@shiyanji tmp]# mkdir test

[root@shiyanji tmp]# chmod 757 test

[root@shiyanji tmp]# ll

drwxr-xrwx 2 root root 4096 5月  16 19:02 test

這時候,任何使用者對此目錄都有寫入權限,那麼我們就在這個目錄裡面建立檔案與目錄,并看看他們的權限如何:

[wtf@shiyanji ~]$ cd /tmp/test

[wtf@shiyanji test]$ mkdir dir1

[wtf@shiyanji test]$ touch file1

[wtf@shiyanji test]$ ll

總用量 4

drwxrwxr-x 2 wtf wtf 4096 5月  16 20:54 dir1

-rw-rw-r-- 1 wtf wtf    0 5月  16 20:55 file1

現在我們使用sgid,結果如下:

[root@shiyanji test]# chmod g+s .

[root@shiyanji test]# ll -d

drwxr-srwx 3 root root 4096 5月  16 20:55 .

[wtf@shiyanji test]$ mkdir dir2

總用量 8

drwxrwxr-x 2 wtf wtf  4096 5月  16 20:54 dir1

drwxrwsr-x 2 wtf root 4096 5月  16 20:59 dir2

-rw-rw-r-- 1 wtf wtf     0 5月  16 20:55 file1

[wtf@shiyanji test]$ touch file2

-rw-rw-r-- 1 wtf root    0 5月  16 20:59 file2

這時候我們就發現,file2和dir2的使用者組變成了root了,也就是他們上層目錄test這個目錄的所屬使用者組。

這個應用,應用在一個項目的共同開發上,是很友善的。

[root@shiyanji test]# chmod g-s .

drwxr-xrwx 4 root root 4096 5月  16 20:59 .

這樣就還原了!

最後我們來看SBIT的作用及設定

[root@shiyanji test]# ls

dir1  dir2  file1  file2

[root@shiyanji test]# rm -rf dir*

[root@shiyanji test]# rm -rf file*

[root@shiyanji test]# ll

總用量 0

清空/tmp/test目錄裡面的全部内容。

我們切換成普通使用者,然後再裡面建立檔案,至少需要兩個普通使用者來測試這個,如果沒有的話,就自己建立。

-rw-rw-r-- 1 wtf wtf 0 5月  16 21:05 file1

-rw-rw-r-- 1 www www 0 5月  16 21:05 file2

這時候我們建立了一個檔案,我們換成另外一個使用者

[www@shiyanji test]$ touch file2

[www@shiyanji test]$ ll

我們看到,雖然其他使用者對file檔案隻有隻讀權限,但由于file*所在的目錄,對其他人是全部的權限,是以,我們換其他使用者還是可以删除這個檔案的,看操作

[www@shiyanji test]$ rm -rf file1

[wtf@shiyanji test]$ rm -rf file2

發現我們已經删除了這個不屬于我們的權限。

下面我們就給這個test目錄加上SBIT權限:

[root@shiyanji test]# chmod o+t .

drwxr-xrwt 2 root root 4096 5月  16 21:11 .

用兩個普通使用者各建立一個檔案一個目錄,來看看效果:

drwxrwxr-x 2 wtf wtf 4096 5月  16 21:14 dir1

drwxrwxr-x 2 www www 4096 5月  16 21:15 dir2

-rw-rw-r-- 1 wtf wtf    0 5月  16 21:14 file1

-rw-rw-r-- 1 www www    0 5月  16 21:15 file2

這個檔案的權限還是和第一次建立的時候是一樣的,我們再換成其他的使用者,看看能不能再次删除這個檔案

[www@shiyanji test]$ rm -rf dir1

rm: 無法删除"dir1": 不允許的操作

rm: 無法删除"file1": 不允許的操作

[wtf@shiyanji test]$ rm -rf dir2

rm: 無法删除"dir2": 不允許的操作

rm: 無法删除"file2": 不允許的操作

看到提示,說權限不夠了,隻能由這個檔案的建立者或root使用者才能删除。這個我們就不示範了。

如果要還原權限的話,

[root@shiyanji test]# chmod o-t .

drwxr-xrwx 4 root root 4096 5月  16 21:15 .

兩個需要注意的問題

OK,關于SUID/SGID/SBIT這些特殊權限的應用和作用我們已經講完了。但如果你仔細一點的話,會發現,我并沒有用數字方式來更改這個特殊的權限,為什麼呢?且看下面的分析。

問題1:用數字改變目錄的特殊權限,不起作用。

我們把/tmp/下面,我們自己建立的實驗檔案删除

[root@shiyanji tmp]# rm -rf test

然後再重新建立一個檔案和目錄,

[root@shiyanji tmp]# cp /usr/bin/passwd ./

[root@shiyanji tmp]# mkdir testdir

[root@shiyanji tmp]# ll passwd ; ll -d testdir

-rwxr-xr-x 1 root root 25980 5月  16 21:22 passwd

drwxr-xr-x 2 root root 4096 5月  16 21:21 testdir

下面我們就來用數字方式來更改這三個特殊的權限,看看會有什麼樣的結果

[root@shiyanji tmp]# chmod 4755 passwd

[root@shiyanji tmp]# chmod 3755 testdir

-rwsr-xr-x 1 root root 25980 5月  16 21:22 passwd

drwxr-sr-t 2 root root 4096 5月  16 21:21 testdir

發現用這種方式增加這三個特殊權限沒有問題,那麼我們再把權限改回去看看

[root@shiyanji tmp]# chmod 0755 passwd

[root@shiyanji tmp]# chmod 0755 testdir

drwxr-sr-x 2 root root 4096 5月  16 21:21 testdir

我們發現,對檔案,權限是改回去了,而對于目錄,隻改回去了SBIT的權限,對SGID改不回去。這是RHEL6上的實驗結果,可能是出于安全性的考慮嗎?這個我就不清楚了,也找不到相關的資料。如果各位網友,有知道什麼原因的,歡迎與我聯系。在此先謝過了。

是以說,建議大家還是用最明了的方式,直接用+-來更改,無論方法如何,最終能得到結果就OK了。哈哈……

問題2:為什麼會有大寫的S和T。

還是用上面的檔案和目錄

我們把passwd和testdir的x權限去掉

[root@shiyanji tmp]# chmod u-x passwd

[root@shiyanji tmp]# chmod o-x testdir

-rw-r-xr-x 1 root root 25980 5月  16 21:22 passwd

drwxr-sr-- 2 root root 4096 5月  16 21:21 testdir

再給他們加上SUID和SBIT權限

[root@shiyanji tmp]# chmod u+s passwd

[root@shiyanji tmp]# chmod o+t testdir

-rwSr-xr-x 1 root root 25980 5月  16 21:22 passwd

上一篇: 配置tomcat

繼續閱讀