Linux文件權限詳解

原文來自Chris'Blog


一、文件和目錄權限概述
在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

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

-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看一下執行後的結果:

[root@localhost ~]# ls -l

總用量 368

-rwxrwxrwx 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文件的權限已經修改爲rwxrwxrwx

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

s或 S (SUID):對應數值4。

s或 S (SGID):對應數值2。

t或 T :對應數值1。

用同樣的方法修改文件權限就可以了

例如:

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

[root@localhost ~]# ls -l

總用量 368

-rwS--S--T 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

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

例如:

[root@localhost ~]# chmod 777 /home/user 注:僅把/home/user目錄的權限設置爲rwxrwxrwx

[root@localhost ~]# chmod -R 777 /home/user 注:表示將整個/home/user目錄與其中的文件和子目錄的權限都設置爲rwxrwxrwx

六、使用命令chown改變目錄或文件的所有權

文件與目錄不僅可以改變權限,其所有權及所屬用戶組也能修改,和設置權限類似,用戶可以通過圖形界面來設置,或執行chown命令來修改。

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

[root@localhost ~]# ls -l

總用量 368

-rwxrwxrwx 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文件的所屬用戶組爲root,所有者爲root。

執行下面命令,把conkyrc.sample文件的所有權轉移到用戶user:

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

[root@localhost ~]# ls -l

總用量 368

-rwxrwxrwx 1 user 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

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

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

[root@localhost ~]# ls -l

總用量 368

-rwxrwxrwx 1 user users 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

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

發佈了21 篇原創文章 · 獲贊 13 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章