執行這個文件,他都有文件所有者的特權,如果所有者是root的話,那么執行人就有超級用戶
的特權了,這是該位將變成一個安全漏洞,因此不要輕易設置該位。
SGID含義:運行者將具有文件所有組的權限。
粘合位: 要求操作系統既是在可執行程序退出后,仍要在內存中保留該程序的映像,這樣做是為了節省大
型程序的啟動時間,但是會占用系統資源,因此設置該位,不如把程序寫好。
set uid ;set gid;sticky bit區別
每一個文件有所有者及組編號,set uid ;set gid可以改變用戶對文件具有的權限:寫和執行.
setuid: 在執行時具有文件所有者的權限.
setgid: 設置目錄. 一個目錄被標上setgid位,此目錄下創建的文件繼承該目錄的屬性.
sticky bit: 該位可以理解為防刪除位. 設置sticky bit位后,就算用戶對目錄具有寫權限,但也只能添加文件而不能刪除文件。
如何設置:
操作這些標志與操作文件權限的命令是一樣的, 都是 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 進入目錄。
4.如用戶有目錄的寫權限,則可以創建、刪除或修改目錄下的任何文件或子目錄,既是該文件或子目錄屬於其他用戶。
修改文件權限
首先講修改文件的所有權,使用 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 表示,其他用