三種特殊許可權簡介
SUID
當一個設定了SUID 位的可執行檔案被執行時,該檔案將以所有者的身份執行,也就是說無論誰來執行這個檔案,他都有檔案所有者的特權。
如果所有者是 root 的話,那麼執行人就有超級使用者的特權了。
SGID
當一個設定了SGID 位的可執行檔案執行時,該檔案將具有所屬組的特權, 任意存取整個組所能使用的系統資源。
若一個目錄設定了SGID,則所有被複制到這個目錄下的檔案, 其所屬的組都會被重設為和這個目錄一樣,除非在複製檔案時加上-p (preserve,保留檔案屬性)的引數,才能保留原來所屬的群組設定。
sticky-bit
特殊許可權的數值表示
三種特殊許可權可以用單獨的一位8進位制數值表示
SUID、SGID和sticky-bit的數值表示
SUID SGID sticky 二進位制 八進位制 說明
- - - 000 0 不設定特殊許可權
- - t 001 1 只設置sticky
- s - 010 2 只設置SGID
- s t 011 3 只設置SGID和sticky
s - - 100 4 只設置SUID
s - t 101 5 只設置SUID和sticky
s s - 110 6 只設置SUID和SGID
s s t 111 7 設定三種特殊許可權
我們知道了檔案的許可權可以用三個八進位制數字表示。其實檔案的許可權應該用四個八進位制來表示,不過用 ls -l 命令時,只顯示三個罷了。那個沒有顯示的八進位制數字其實是第一個,它用來設定一些特殊許可權。這個八進位制數字的三個位是:
SUID SGID sticky-bit
它們的含義是:
SUID
當設定了SUID 位的檔案被執行時,該檔案將以所有者的身份執行,也就是說無論誰來執行這個檔案,他都有檔案所有者的特權。如果所有者是 root 的話,那麼執行人就有超級使用者的特權了。這時該位將變成一個安全漏洞,因此不要輕易設定該位。
SGID
與上面的內容類似。檔案執行時,執行者將具有所屬組的特權。
sticky-bit
sticky 位要求作業系統既是在可執行程式退出後,仍要在記憶體中保留該程式的映象。這樣做是為了節省大型程式的啟動時間。但是會佔用系統資源。因此設定該位,不如把程式寫好。
set uid ;set gid;sticky bit區別
每一個檔案有所有者及組編號,set uid ;set gid可以改變使用者對檔案具有的許可權:寫和執行.
setuid: 在執行時具有檔案所有者的許可權.
setgid: 設定目錄. 一個目錄被標上setgid位,此目錄下建立的檔案繼承該目錄的屬性.
如何設定:
操作這些標誌與操作檔案許可權的命令是一樣的, 都是 chmod. 有兩種方法來操作,
1) chmod u+s temp -- 為temp檔案加上setuid標誌. (setuid 只對檔案有效,U=使用者)
chmod g+s tempdir -- 為tempdir目錄加上setgid標誌 (setgid 只對目錄有效,g=組名)
chmod o+t temp -- 為temp檔案加上sticky標誌 (sticky只對檔案有效)
2) 採用八進位制方式. 這一組八進位制數字三位的意義如下,
abc
a - setuid位, 如果該位為1, 則表示設定setuid
b - setgid位, 如果該位為1, 則表示設定setgid
c - sticky位, 如果該位為1, 則表示設定sticky
設定後, 可以用 ls -l 來檢視. 如果本來在該位上有x, 則這些特殊標誌顯示為小寫字母 (s, s, t). 否則, 顯示為大寫字母 (S, S, T)
如:
rwsrw-r-- 表示有setuid標誌 (rwxrw-r--:rwsrw-r--)
rwxrwsrw- 表示有setgid標誌 (rwxrwxrw-:rwxrwsrw-)
rwxrw-rwt 表示有sticky標誌 (rwxrw-rwx:rwxrw-rwt)
理解檔案許可權
所謂的檔案許可權,是指對檔案的訪問許可權,包括對檔案的讀、寫、刪除、執行。Linux 是一個多使用者作業系統,它允許多個使用者同時登入和工作。因此 Linux 將一個檔案或目錄與一個使用者和組聯絡起來。請看下面的例子:
drwxr-xr-x 5 root root 1024 Sep 13 03:27 Desktop
與檔案許可權相關聯的是第一、第三、第四個域。第三個域是檔案的所有者,第四個域是檔案的所屬組,而第一個域則限制了檔案的訪問許可權。在這個例子中,檔案的所有者是 root,所屬的組是 root,檔案的訪問許可權是 drwxr-xr-x。對於檔案和目錄講,每個檔案和目錄都有一組許可權標誌和它們結合在一起,在上例中就是第一個域中的內容。下面來仔細分析這個域中各個符號的意義:
該域由 10 個字元組成,可以把它們分為四組,具體含義分別是:
d rwx r-x r-x
檔案型別 所有者許可權標誌 組許可權標誌 其他使用者許可權標誌
其中:
檔案型別:第一個字元。由於 Linux 系統對與裝置、目錄、檔案都當作是檔案來處理,因此該字元表明此檔案的型別,字元與對應的意義如下表: 檔案標誌
檔案型別
例子
-
普通檔案
資料檔案、
ASCII 純文字檔案、程式
d
目錄
/bin
b
塊裝置
/dev/hda(第一個 IDE 硬碟)
c
字元裝置
/dev/ttyS1(與 DOS 種的串列埠 2 等同)
s
套接字
/dev/log
p
命名管道
/dev/initctl(與“|”等同)
l
符號連結
/dev/modem->/dev/ttyS1
許可權標誌:
對每個檔案或目錄都有 4 類不同的使用者。每類使用者各有一組讀、寫和執行(搜尋)檔案的訪問許可權,這 4 類使用者是:
root:系統特權使用者類,既 UID = 0 的使用者。
owner:擁有檔案的使用者。
group:共享檔案的組訪問許可權的使用者類的使用者組名稱。
world:不屬於上面 3 類的所有其他使用者。
作為 root,他們自動擁有了所有檔案和目錄的全面的讀、寫和搜尋的許可權,所以沒有必要明確指定他們的許可權。其他三類使用者則可以在耽擱檔案或者目錄的基礎上別授權或撤消許可權。因此對另外三類使用者,一共 9 個許可權位與之對應,分為 3 組,每組 3 個,分別用 r、w、x 來表示,分別對應 owner、group、world。
許可權位對於檔案和目錄的含義有些許不同。每組 3 個字元對應的含義從左至右的順序,對於檔案來說是:讀檔案的內容(r)、寫資料到檔案(w)、做為命令執行該檔案(x)。對於目錄來說是:讀包含在目錄中的檔名稱(r)、寫資訊到目錄中去(增加和刪除索引點的連線)、搜尋目錄(能用該目錄名稱作為路徑名去訪問它所包含的檔案或子目錄)。具體來說就是:
1. 有隻讀許可權的使用者不能用 cd 進入該目錄;還必須有執行許可權才能進入。
2. 有執行許可權的使用者只有在知道檔名並擁有該檔案的讀許可權的情況下才可以訪問目錄下的檔案。
3. 必須有讀和執行許可權才可以使用 ls 列出目錄清單,或使用 cd 進入目錄。
修改檔案許可權
首先講修改檔案的所有權,使用 chown 和 chgrp 命令:
chown new_user file or directory:修改檔案或目錄的所有者。
chgrp new_group file or directory:修改檔案或目錄的所屬組。
這裡需要注意的是:普通使用者不能將檔案或目錄的所有權交與他人,只有 root 有這一許可權。但是普通使用者有權改變檔案或目錄的所屬組。
由於每類使用者的許可權都是由 rwx 三位組成,因此可以用三個八進位制數字表示檔案的訪問權。一個八進位制數字可以用三個二進位制數字表示,那麼與其對應,權值為 4 的位對應 r,權值為 2 的位對應 w,權值為 1 的位對應 x。對於一類使用者,將這三位與其對應的權值相乘求和,就可以得出對該類使用者的訪問許可權。
改變檔案訪問許可權的命令是 chmod,格式是:
chmod permission file_name
比如 chmod 764 a.txt,它表示對於檔案的所有者,具有對該檔案讀、寫、執行的許可權。對於檔案所屬組的使用者,擁有讀、寫的許可權。對於其他使用者,只有讀許可權。
這裡需要注意的是:檔案的建立者是唯一可以修改該檔案訪問許可權的普通使用者,另外一個可以修改檔案訪問許可權的使用者是 root。
還有一種表示方法,就是用字串來設定檔案訪問許可權。其中讀用 r 表示,寫用 w 表示,執行用 x 表示;所有者用 u 表示,組使用者用 g 表示,其他使用者用 o 表示,所有使用者用 a 表示。
我們平時安裝 gi時,看到的oracle命令,就是帶了s的:
[oracle@rac1 test]$ ls -ltr /u01/app/grid/product/11.2.0/grid/bin/oracle
-rwsrwsr-x 1 grid dba 209854149 Jun 1 20:17 /u01/app/grid/product/11.2.0/grid/bin/oracle