[日期:2008-09-11] | 來源:LInux Sir.org 作者:志偉 |
在Linux中,Linux文件權(quán)限一共分為三種。本文將向讀者展示如何正確配置Linux文件權(quán)限。
三種特殊權(quán)限簡(jiǎn)介
SUID
當(dāng)一個(gè)設(shè)置了SUID 位的可執(zhí)行文件被執(zhí)行時(shí),該文件將以所有者的身份運(yùn)行,也就是說無論誰來執(zhí)行這個(gè)文件,他都有文件所有者的特權(quán)。
如果所有者是 root 的話,那么執(zhí)行人就有超級(jí)用戶的特權(quán)了。
SGID
當(dāng)一個(gè)設(shè)置了SGID 位的可執(zhí)行文件運(yùn)行時(shí),該文件將具有所屬組的特權(quán), 任意存取整個(gè)組所能使用的系統(tǒng)資源。
若一個(gè)目錄設(shè)置了SGID,則所有被復(fù)制到這個(gè)目錄下的文件, 其所屬的組都會(huì)被重設(shè)為和這個(gè)目錄一樣,除非在復(fù)制文件時(shí)加上-p (preserve,保留文件屬性)的參數(shù),才能保留原來所屬的群組設(shè)置。
sticky-bit
對(duì)一個(gè)文件設(shè)置了sticky-bit之后,盡管其他用戶有寫權(quán)限, 也必須由屬主執(zhí)行刪除、移動(dòng)等操作。
對(duì)一個(gè)目錄設(shè)置了sticky-bit之后,存放在該目錄的文件僅準(zhǔn)許其屬主執(zhí)行刪除、 移動(dòng)等操作。
特殊權(quán)限的數(shù)值表示
三種特殊權(quán)限可以用單獨(dú)的一位8進(jìn)制數(shù)值表示
SUID、SGID和sticky-bit的數(shù)值表示
SUID SGID sticky 二進(jìn)制 八進(jìn)制 說明
- - - 000 0 不設(shè)置特殊權(quán)限
- - t 001 1 只設(shè)置sticky
- s - 010 2 只設(shè)置SGID
- s t 011 3 只設(shè)置SGID和sticky
s - - 100 4 只設(shè)置SUID
s - t 101 5 只設(shè)置SUID和sticky
s s - 110 6 只設(shè)置SUID和SGID
s s t 111 7 設(shè)置三種特殊權(quán)限
我們知道了文件的權(quán)限可以用三個(gè)八進(jìn)制數(shù)字表示。其實(shí)文件的權(quán)限應(yīng)該用四個(gè)八進(jìn)制來表示,不過用 ls -l 命令時(shí),只顯示三個(gè)罷了。那個(gè)沒有顯示的八進(jìn)制數(shù)字其實(shí)是第一個(gè),它用來設(shè)定一些特殊權(quán)限。這個(gè)八進(jìn)制數(shù)字的三個(gè)位是:
SUID SGID sticky-bit
它們的含義是:
SUID
當(dāng)設(shè)置了SUID 位的文件被執(zhí)行時(shí),該文件將以所有者的身份運(yùn)行,也就是說無論誰來執(zhí)行這個(gè)文件,他都有文件所有者的特權(quán)。如果所有者是 root 的話,那么執(zhí)行人就有超級(jí)用戶的特權(quán)了。這時(shí)該位將變成一個(gè)安全漏洞,因此不要輕易設(shè)置該位。
SGID
與上面的內(nèi)容類似。文件運(yùn)行時(shí),運(yùn)行者將具有所屬組的特權(quán)。
sticky-bit
sticky 位要求操作系統(tǒng)既是在可執(zhí)行程序退出后,仍要在內(nèi)存中保留該程序的映象。這樣做是為了節(jié)省大型程序的啟動(dòng)時(shí)間。但是會(huì)占用系統(tǒng)資源。因此設(shè)置該位,不如把程序?qū)懞谩?/p>
set uid ;set gid;sticky bit區(qū)別
每一個(gè)文件有所有者及組編號(hào),set uid ;set gid可以改變用戶對(duì)文件具有的權(quán)限:寫和執(zhí)行.
setuid: 在執(zhí)行時(shí)具有文件所有者的權(quán)限.
setgid: 設(shè)置目錄. 一個(gè)目錄被標(biāo)上setgid位,此目錄下創(chuàng)建的文件繼承該目錄的屬性.
sticky bit: 該位可以理解為防刪除位. 設(shè)置sticky bit位后,就算用戶對(duì)目錄具有寫權(quán)限,但也只能添加文件而不能刪除文件。
如何設(shè)置:
操作這些標(biāo)志與操作文件權(quán)限的命令是一樣的, 都是 chmod. 有兩種方法來操作,
1) chmod u+s temp -- 為temp文件加上setuid標(biāo)志. (setuid 只對(duì)文件有效,U=用戶)
chmod g+s tempdir -- 為tempdir目錄加上setgid標(biāo)志 (setgid 只對(duì)目錄有效,g=組名)
chmod o+t temp -- 為temp文件加上sticky標(biāo)志 (sticky只對(duì)文件有效)
2) 采用八進(jìn)制方式. 這一組八進(jìn)制數(shù)字三位的意義如下,
abc
a - setuid位, 如果該位為1, 則表示設(shè)置setuid
b - setgid位, 如果該位為1, 則表示設(shè)置setgid
c - sticky位, 如果該位為1, 則表示設(shè)置sticky
設(shè)置后, 可以用 ls -l 來查看. 如果本來在該位上有x, 則這些特殊標(biāo)志顯示為小寫字母 (s, s, t). 否則, 顯示為大寫字母 (S, S, T)
如:
rwsrw-r-- 表示有setuid標(biāo)志 (rwxrw-r--:rwsrw-r--)
rwxrwsrw- 表示有setgid標(biāo)志 (rwxrwxrw-:rwxrwsrw-)
rwxrw-rwt 表示有sticky標(biāo)志 (rwxrw-rwx:rwxrw-rwt)
理解文件權(quán)限
所謂的文件權(quán)限,是指對(duì)文件的訪問權(quán)限,包括對(duì)文件的讀、寫、刪除、執(zhí)行。Linux 是一個(gè)多用戶操作系統(tǒng),它允許多個(gè)用戶同時(shí)登錄和工作。因此 Linux 將一個(gè)文件或目錄與一個(gè)用戶和組聯(lián)系起來。請(qǐng)看下面的例子:
drwxr-xr-x 5 root root 1024 Sep 13 03:27 Desktop
與文件權(quán)限相關(guān)聯(lián)的是第一、第三、第四個(gè)域。第三個(gè)域是文件的所有者,第四個(gè)域是文件的所屬組,而第一個(gè)域則限制了文件的訪問權(quán)限。在這個(gè)例子中,文件的所有者是 root,所屬的組是 root,文件的訪問權(quán)限是 drwxr-xr-x。對(duì)于文件和目錄講,每個(gè)文件和目錄都有一組權(quán)限標(biāo)志和它們結(jié)合在一起,在上例中就是第一個(gè)域中的內(nèi)容。下面來仔細(xì)分析這個(gè)域中各個(gè)符號(hào)的意義:
該域由 10 個(gè)字符組成,可以把它們分為四組,具體含義分別是:
d rwx r-x r-x
文件類型 所有者權(quán)限標(biāo)志 組權(quán)限標(biāo)志 其他用戶權(quán)限標(biāo)志
其中:
文件類型:第一個(gè)字符。由于 Linux 系統(tǒng)對(duì)與設(shè)備、目錄、文件都當(dāng)作是文件來處理,因此該字符表明此文件的類型,字符與對(duì)應(yīng)的意義如下表: 文件標(biāo)志
文件類型
例子
-
普通文件
數(shù)據(jù)文件、
ASCII 純文本文件、程序
d
目錄
/bin
b
塊設(shè)備
/dev/hda(第一個(gè) IDE 硬盤)
c
字符設(shè)備
/dev/ttyS1(與 DOS 種的串口 2 等同)
s
套接字
/dev/log
p
命名管道
/dev/initctl(與“|”等同)
l
符號(hào)鏈接
/dev/modem->/dev/ttyS1
權(quán)限標(biāo)志:
對(duì)每個(gè)文件或目錄都有 4 類不同的用戶。每類用戶各有一組讀、寫和執(zhí)行(搜索)文件的訪問權(quán)限,這 4 類用戶是:
root:系統(tǒng)特權(quán)用戶類,既 UID = 0 的用戶。
owner:擁有文件的用戶。
group:共享文件的組訪問權(quán)限的用戶類的用戶組名稱。
world:不屬于上面 3 類的所有其他用戶。
作為 root,他們自動(dòng)擁有了所有文件和目錄的全面的讀、寫和搜索的權(quán)限,所以沒有必要明確指定他們的權(quán)限。其他三類用戶則可以在耽擱文件或者目錄的基礎(chǔ)上別授權(quán)或撤消權(quán)限。因此對(duì)另外三類用戶,一共 9 個(gè)權(quán)限位與之對(duì)應(yīng),分為 3 組,每組 3 個(gè),分別用 r、w、x 來表示,分別對(duì)應(yīng) owner、group、world。
權(quán)限位對(duì)于文件和目錄的含義有些許不同。每組 3 個(gè)字符對(duì)應(yīng)的含義從左至右的順序,對(duì)于文件來說是:讀文件的內(nèi)容(r)、寫數(shù)據(jù)到文件(w)、做為命令執(zhí)行該文件(x)。對(duì)于目錄來說是:讀包含在目錄中的文件名稱(r)、寫信息到目錄中去(增加和刪除索引點(diǎn)的連接)、搜索目錄(能用該目錄名稱作為路徑名去訪問它所包含的文件或子目錄)。具體來說就是:
1. 有只讀權(quán)限的用戶不能用 cd 進(jìn)入該目錄;還必須有執(zhí)行權(quán)限才能進(jìn)入。
2. 有執(zhí)行權(quán)限的用戶只有在知道文件名并擁有該文件的讀權(quán)限的情況下才可以訪問目錄下的文件。
3. 必須有讀和執(zhí)行權(quán)限才可以使用 ls 列出目錄清單,或使用 cd 進(jìn)入目錄。
4. 如用戶有目錄的寫權(quán)限,則可以創(chuàng)建、刪除或修改目錄下的任何文件或子目錄,既是該文件或子目錄屬于其他用戶。
修改文件權(quán)限
首先講修改文件的所有權(quán),使用 chown 和 chgrp 命令:
chown new_user file or directory:修改文件或目錄的所有者。
chgrp new_group file or directory:修改文件或目錄的所屬組。
這里需要注意的是:普通用戶不能將文件或目錄的所有權(quán)交與他人,只有 root 有這一權(quán)限。但是普通用戶有權(quán)改變文件或目錄的所屬組。
由于每類用戶的權(quán)限都是由 rwx 三位組成,因此可以用三個(gè)八進(jìn)制數(shù)字表示文件的訪問權(quán)。一個(gè)八進(jìn)制數(shù)字可以用三個(gè)二進(jìn)制數(shù)字表示,那么與其對(duì)應(yīng),權(quán)值為 4 的位對(duì)應(yīng) r,權(quán)值為 2 的位對(duì)應(yīng) w,權(quán)值為 1 的位對(duì)應(yīng) x。對(duì)于一類用戶,將這三位與其對(duì)應(yīng)的權(quán)值相乘求和,就可以得出對(duì)該類用戶的訪問權(quán)限。
改變文件訪問權(quán)限的命令是 chmod,格式是:
chmod permission file_name
比如 chmod 764 a.txt,它表示對(duì)于文件的所有者,具有對(duì)該文件讀、寫、執(zhí)行的權(quán)限。對(duì)于文件所屬組的用戶,擁有讀、寫的權(quán)限。對(duì)于其他用戶,只有讀權(quán)限。
這里需要注意的是:文件的創(chuàng)建者是唯一可以修改該文件訪問權(quán)限的普通用戶,另外一個(gè)可以修改文件訪問權(quán)限的用戶是 root。
還有一種表示方法,就是用字符串來設(shè)定文件訪問權(quán)限。其中讀用 r 表示,寫用 w 表示,執(zhí)行用 x 表示;所有者用 u 表示,組用戶用 g 表示,其他用戶用 o 表示,所有用戶用 a 表示。
聯(lián)系客服