天天看點

每天一個linux指令(2):檔案權限詳解

linux檔案權限詳解 檔案和目錄權限概述

在linux中的每一個檔案或目錄都包含有通路權限,這些通路權限決定了誰能通路和如何通路這些檔案和目錄。

通過設定權限可以從以下三種通路方式限制通路權限:隻允許使用者自己通路;允許一個預先指定的使用者組中的使用者通路;允許系統中的任何使用者通路。同時,使用者能夠控制一個給定的檔案或目錄的通路程度。一個檔案活目錄可能有讀、寫及執行權限。當建立一個檔案時,系統會自動地賦予檔案所有者讀和寫的權限,這樣可以允許所有者能夠顯示檔案内容和修改檔案。檔案所有者可以将這些權限改變為任何他想指定的權限。一個檔案也許隻有讀權限,禁止任何修改。檔案也可能隻有執行權限,允許它想一個程式一樣執行。

三種不同的使用者類型能夠通路一個目錄或者檔案:所有着、使用者組或其他使用者。所有者就是建立檔案的使用者,使用者是所有使用者所建立的檔案的所有者,使用者可以允許所在的使用者組能通路使用者的檔案。通常,使用者都組合成使用者組,例如,某一類或某一項目中的所有使用者都能夠被系統管理者歸為一個使用者組,一個使用者能夠授予所在使用者組的其他成員的檔案通路權限。最後,使用者也将自己的檔案向系統内的所有使用者開放,在這種情況下,系統内的所有使用者都能夠通路使用者的目錄或檔案。在這種意義上,系統内的其他所有使用者就是other使用者類。

每一個使用者都有它自身的讀、寫和執行權限。第一套權限控制通路自己的檔案權限,即所有者權限。第二套權限控制使用者組通路其中一個使用者的檔案的權限。第三套權限控制其他所有使用者通路一個使用者的檔案的權限,這三套權限賦予使用者不同類型(即所有者、使用者組和其他使用者)的讀、寫及執行權限就構成了一個有9種類型的權限組。

我們可以用-l參數的ls指令顯示檔案的詳細資訊,其中包括權限。如下所示:

yekai@kebao:/media/sda5/軟體壓縮/linux$ ls -lh

總用量 191m

-rwxrwx--- 1 root plugdev 18m 2007-02-28 18:05 actioncube_v0.92.tar.bz2

-rwxrwx--- 1 root plugdev 60m 2007-04-30 22:52 nexuiz-223.zip

-rwxrwx--- 1 root plugdev 7.4m 2007-04-25 02:16 stardict-oxford-gb-2.4.2.tar.bz2

-rwxrwx--- 1 root plugdev 102m 2007-05-01 18:22 tremulous-1.1.0-installer.x86.run

-rwxrwx--- 1 root plugdev 4.9m 2007-04-30 14:32 wqy-bitmapfont-0.8.1-7_all.deb.bin

當執行ls -l 或 ls -al 指令後顯示的結果中,最前面的第2~10個字元是用來表示權限。第一個字元一般用來區分檔案和目錄:

d:表示是一個目錄,事實上在ext2fs中,目錄是一個特殊的檔案。

-:表示這是一個普通的檔案。

l: 表示這是一個符号連結檔案,實際上它指向另一個檔案。

b、c:分别表示區塊裝置和其他的外圍裝置,是特殊類型的檔案。

s、p:這些檔案關系到系統的資料結構和管道,通常很少見到。

下面詳細介紹一下權限的種類和設定權限的方法。

一般權限

第2~10個字元當中的每3個為一組,左邊三個字元表示所有者權限,中間3個字元表示與所有者同一組的使用者的權限,右邊3個字元是其他使用者的權限。這三個一組共9個字元,代表的意義如下:

r(read,讀取):對檔案而言,具有讀取檔案内容的權限;對目錄來說,具有浏覽目錄的權

w(write,寫入):對檔案而言,具有新增、修改檔案内容的權限;對目錄來說,具有删除、移動目錄内檔案的權限。

x(execute,執行):對檔案而言,具有執行檔案的權限;對目錄了來說該使用者具有進入目錄的權限。

-:表示不具有該項權限。

下面舉例說明:

-rwx------: 檔案所有者對檔案具有讀取、寫入和執行的權限。

-rwxr―r--: 檔案所有者具有讀、寫與執行的權限,其他使用者則具有讀取的權限。

-rw-rw-r-x: 檔案所有者與同組使用者對檔案具有讀寫的權限,而其他使用者僅具有讀取和執行的權限。

drwx--x--x: 目錄所有者具有讀寫與進入目錄的權限,其他使用者近能進入該目錄,卻無法讀取任何資料。

drwx------: 除了目錄所有者具有完整的權限之外,其他使用者對該目錄完全沒有任何權限。

每個使用者都擁有自己的專屬目錄,通常集中放置在/home目錄下,這些專屬目錄的預設權限為rwx------:

表示目錄所有者本身具有所有權限,其他使用者無法進入該目錄。執行mkdir指令所建立的目錄,其預設權限為rwxr-xr-x,使用者可以根據需要修改目錄的權限。

此外,預設的權限可用umask指令修改,用法非常簡單,隻需執行umask 777 指令,便代表屏蔽所有的權限,因而之後建立的檔案或目錄,其權限都變成000,依次類推。通常root帳号搭配umask指令的數值為022、027和 077,普通使用者則是采用002,這樣所産生的權限依次為755、750、700、775。有關權限的數字表示法,後面将會詳細說明。

使用者登入系統時,使用者環境就會自動執行rmask指令來決定檔案、目錄的預設權限。

特殊權限

其實檔案與目錄設定不止這些,還有所謂的特殊權限。由于特殊權限會擁有一些“特權”,因而使用者若無特殊需求,不應該啟用這些權限,避免安全方面出現嚴重漏洞,造成黑客入侵,甚至摧毀系統!!!

s或s(suid,set uid):可執行的檔案搭配這個權限,便能得到特權,任意存取該檔案的所有者能使用的全部系統資源。請注意具備suid權限的檔案,黑客經常利用這種權限,以suid配上root帳号擁有者,無聲無息地在系統中開扇後門,供日後進出使用。

s或s(sgid,set gid):設定在檔案上面,其效果與suid相同,隻不過将檔案所有者換成使用者組,該檔案就可以任意存取整個使用者組所能使用的系統資源。

t或t(sticky):/tmp和 /var/tmp目錄供所有使用者暫時存取檔案,亦即每位使用者皆擁有完整的權限進入該目錄,去浏覽、删除和移動檔案。

因為suid、sgid、sticky占用x的位置來表示,是以在表示上會有大小寫之分。加入同時開啟執行權限和suid、sgid、sticky,則權限表示字元是小寫的:

-rwsr-sr-t 1 root root 4096 6月 23 08:17 conf

如果關閉執行權限,則表示字元會變成大寫:

使用檔案管理器來改變檔案或目錄的權限

如果使用者要改變一個檔案目錄的權限,右擊要改變權限的檔案或者目錄,在彈出的快捷菜單中選擇“屬性”,系統将打開屬性對話框

在“屬性”對話框中,單擊“權限”标簽,就會打開“權限”頁籤。

在這裡你可以修改檔案或者目錄的所有者、組群和其他使用者的權限,而且可以設定特殊權

對于特殊權限,最好不要設定,不然會帶來很嚴重的安全問題。

當然,在這裡你也可以改變檔案和目錄的所有者和所屬組。

使用chmod和數字改變檔案或目錄的通路權限

檔案和目錄的權限表示,是用rwx這三個字元來代表所有者、使用者組和其他使用者的權限。有時候,字元似乎過于麻煩,是以還有另外一種方法是以數字來表示權限,而且僅需三個數字。

r: 對應數值4

w: 對應數值2

x:對應數值1

-:對應數值0

數字設定的關鍵是mode的取值,一開始許多初學者會被搞糊塗,其實很簡單,我們将rwx看成二進制數,如果有則有1表示,沒有則有0表示,那麼rwx r-x r- -則可以表示成為:

111 101 100

再将其每三位轉換成為一個十進制數,就是754。

例如,我們想讓a.txt這個檔案的權限為:

自己 同組使用者 其他使用者

可讀 是 是 是

可寫 是 是

可執行

那麼,我們先根據上表得到權限串為:rw-rw-r--,那麼轉換成二進制數就是110 110 100,再每三位轉換成為一個十進制數,就得到664,是以我 們執行指令:

[root@localhost ~]# chmod 664 a.txt

按照上面的規則,rwx合起來就是4+2+1=7,一個rwxrwxrwx權限全開放的檔案,數值表示為777;而完全不開放權限的檔案“---------”其數字表示為000。下面舉幾個例子:

-rwx------:等于數字表示700。

-rwxr―r--:等于數字表示744。

-rw-rw-r-x:等于數字表示665。

drwx―x―x:等于數字表示711。

drwx------:等于數字表示700。

在文本模式下,可執行chmod指令去改變檔案和目錄的權限。我們先執行ls -l 看看目錄内的情況:

[root@localhost ~]# ls -l

總用量 368

-rw-r--r-- 1 root root 12172 8月 15 23:18 conkyrc.sample

drwxr-xr-x 2 root root 48 9月 4 16:32 desktop

-r--r--r-- 1 root root 331844 10月 22 21:08 libfreetype.so.6

drwxr-xr-x 2 root root 48 8月 12 22:25 mymusic

-rwxr-xr-x 1 root root 9776 11月 5 08:08 net.eth0

-rwxr-xr-x 1 root root 9776 11月 5 08:08 net.eth1

-rwxr-xr-x 1 root root 512 11月 5 08:08 net.lo

drwxr-xr-x 2 root root 48 9月 6 13:06 vmware

可以看到當然檔案conkyrc.sample檔案的權限是644,然後把這個檔案的權限改成777。執行下面指令

[root@localhost ~]# chmod 777 conkyrc.sample

然後ls -l看一下執行後的結果:

-rwxrwxrwx 1 root root 12172 8月 15 23:18 conkyrc.sample

可以看到conkyrc.sample檔案的權限已經修改為rwxrwxrwx

如果要加上特殊權限,就必須使用4位數字才能表示。特殊權限的對應數值為:

s或 s (suid):對應數值4。

s或 s (sgid):對應數值2。

t或 t :對應數值1。

用同樣的方法修改檔案權限就可以了

例如:

[root@localhost ~]# chmod 7600 conkyrc.sample

-rws--s--t 1 root root 12172 8月 15 23:18 conkyrc.sample

加入想一次修改某個目錄下所有檔案的權限,包括子目錄中的檔案權限也要修改,要使用參數-r表示啟動遞歸處理。

[root@localhost ~]# chmod 777 /home/user 注:僅把/home/user目錄的權限設定為rwxrwxrw

[root@localhost ~]# chmod -r 777 /home/user 注:表示将整個/home/user目錄與其中的檔案和子目錄的權限都設定為rwxrwxrwx

使用指令chown改變目錄或檔案的所有權

檔案與目錄不僅可以改變權限,其所有權及所屬使用者組也能修改,和設定權限類似,使用者可以通過圖形界面來設定,或執行chown指令來修改。

我們先執行ls -l看看目錄情況:

可以看到conkyrc.sample檔案的所屬使用者組為root,所有者為root。

執行下面指令,把conkyrc.sample檔案的所有權轉移到使用者user:

[root@localhost ~]# chown user conkyrc.sample

-rwxrwxrwx 1 user root 12172 8月 15 23:18 conkyrc.sample

要改變所屬組,可使用下面指令:

[root@localhost ~]# chown :users conkyrc.sample

-rwxrwxrwx 1 user users 12172 8月 15 23:18 conkyrc.sample

要修改目錄的權限,使用-r參數就可以了,方法和前面一樣。

繼續閱讀