本文節選至
http://www.chinalinuxpub.com/doc/manual/9.0/rhl-gsg-zh_CN-9/s1-navigating-ownership.html

所有權和許可權限

讀取、寫入、和執行是許可權限中的三個主要設置。既然用戶在他們的帳號創建之時就被編入一個組群,你還可以指定哪些組群可以讀取、寫入、或執行某一文件。

讓我們用帶有 -l (長)選項的 ls 命令來仔細查看一下文件 sneakers.txt

這里提供了許多細節。你可以看到誰能讀?。╮)和寫入(w)文件,以及誰創建了這個文件(test),所有者所在的組群(test)。請記住,按照默認設置,你的組群名和你的登錄名相同。

permiss1.png

sneakers.txt 的許可權限

在組群右側的信息包括文件大小、創建的日期和時間,以及文件名。

第一列顯示了當前的權限;它有十位。第一位代表文件類型。其余九位實際上是用于三組不同用戶的三組權限。

例如:

-rw-rw-r--

那三組是:文件的所有者,文件所屬的組群,和“其他人”,這是前面沒有包括的用戶和組群。

-?? (rw-)?(rw-) (r--) 1 test test
|???? |?????|???? |
類型 所有者 組群? 其他人

第一個項目指定文件類型,它可以顯示以下幾種:

  • d — 目錄

  • -(短線)— 常規文件(而不是目錄或鏈接)

  • l — 到系統上其它位置的另一個程序或文件的符號鏈接

在第一個項目之后的三組中,你可以看到下面幾種類型:

  • r — 文件可以被讀取

  • w — 文件可以被寫入

  • x — 文件可以被執行(如果它是程序的話)

當你在所有者、組群、或其他人中看到一個短線(“-”),這意味著相應的權限還沒有被授予。再看一看文件 sneakers.txt 的第一列,然后辯別它的許可權限。

ls -l sneakers.txt

-rw-rw-r-- 1 test test 39 3月 11 12:04 sneakers.txt

文件的所有者(這個情況下是 test)有讀取和寫入該文件的權限。組群test 也有讀取和寫入 sneakers.txt的權限。它不是一個程序,因此所有者和組群都沒有執行它的權限。

chmod 命令

使用 chmod 命令來改變權限。這個例子顯示了如何使用 chmod 命令來改變 sneakers.txt 文件的權限。

帶有初始權限設置的最初文件與下面相仿:

-rw-rw-r-- 1 test test 39 3月 11 12:04 sneakers.txt

如果你是這個文件的所有者或者你登錄為根用戶身份,你可以改變所有者、組群、和其他人的權限。

此刻,所有者和組群可以讀取和寫入文件,組群之外的任何人只能讀取文件(r--)。
caution.png小心
請記住,文件權限是一種安全措施。無論何時你允許其他人讀取、寫入或執行文件,你都在增加文件被篡改或刪除的危險。作為一種基本原則,你應該只給那些真正需要這些文件的人以讀寫權限。

在下面的例子中,你想給每個人以寫入文件的權限,因此他們可以讀取文件,在其中加注,并保存文件。這意味著你非得改變文件權限中的“其他人”部分不可了。

讓我們先來看一看這個文件。在 shell 提示下,鍵入:

ls -l sneakers.txt

前面的命令顯示了這個文件信息:

-rw-rw-r-- 1 test test 39 3月 11 12:04 sneakers.txt

現在,鍵入下面的命令:

chmod o+w sneakers.txt

o+w 命令告訴系統你想給其它人寫入文件 sneakers.txt 的權限。要查看結果,再次列出文件的細節?,F在,這個文件看起來與下面的輸出相仿:

-rw-rw-rw- 1 test test 39 3月 11 12:04 sneakers.txt

現在,每個人都可以讀取和寫入這個文件。

要從 sneakers.txt 中刪除讀寫權限,使用 chmod 命令來取消讀取和寫入這兩個的權限。

chmod go-rw sneakers.txt

通過鍵入 go-rw,你在告訴系統刪除文件 sneakers.txt 中組群和其它人的讀取和寫入權限。

結果與下面的輸出相似:

-rw------- 1 test test 39 3月 11 12:04 sneakers.txt

當你想用 chmod 命令來改變權限時,把它們當做速記符號來記憶,因為你實際要做的只是記住幾個符號而已。

下面是一個速記符號含義的列表:

身份

u — 擁有文件的用戶(所有者)

g — 所有者所在的組群

o — 其他人(不是所有者或所有者的組群)

a — 每個人或全部(u、g、和 o

權限

r — 讀取權

w — 寫入權

x — 執行權

行動

+ — 添加權限

- — 刪除權限

= — 使它成為唯一權限

想測試一下你的許可權限技巧么?從文件 sneakers.txt 中刪除所有權限 — 包括每個人的權限。

-rw------- 1 test test 39 3月 11 12:04 sneakers.txt

現在,讓我們來看看你是否還能夠使用 cat sneakers.txt 來讀取這個文件,它所返回的輸出應如下所示:

cat: sneakers.txt: Permission denied

刪除所有的權限,包括你自己的,會成功地鎖住這個文件。但是由于這個文件屬于你,你可以隨時使用以下命令把它的權限改回來:

chmod u+rw sneakers.txt

使用命令 cat sneakers.txt 來試試看你作為文件所有者是否還能夠讀取該文件。

這里是幾個可以用在 chmod 命令設置上的常用例子:

  • g+w — 為組群添加寫入權

  • o-rwx — 刪除其它人的所有權限

  • u+x — 允許文件所有者執行這個文件

  • a+rw — 允許每個人讀取并寫入文件

  • ug+r — 允許所有者和組群讀取文件

  • g=rx — 只允許組群讀取和執行(不能寫入)

通過添加 -R 選項,你可以為整個目錄樹改變權限。

因為你不能象執行程序一樣地“執行”目錄,當你為目錄添加或刪除執行權限時,你實際上是在允許(或拒絕)在目錄中搜索的權限。

如果你不想給其它人對目錄 tigger 的執行權限,那么誰有讀取或寫入權限便無關緊要了。除非他們知道他們想要的確切文件名,沒人能夠進入那個目錄。

譬如,鍵入:

chmod a-x tigger

來刪除每個人的執行權限。

下面是當你試圖使用 cd 命令來進入 tigger 目錄時會發生的情況:

bash: tigger: Permission denied


下一步,恢復你自己和你的組群的權限:

chmod ug+x tigger


現在,如果你用 ls -dl 命令來檢查一下,你會發現只有其它人(others)被拒絕了到目錄 tigger 的訪問權。

13.14.2. 使用數字來改變權限

還記得關于 chmod 的速記符號的方法嗎?這里向你介紹另一個改變權限的方法,一開始,它可能會顯得有點復雜。

回到 sneakers.txt 文件的原始權限:

-rw-rw-r-- 1 test test 39 3月 11 12:04 sneakers.txt

每種權限設置都可以用一個數值來代表:

  • r = 4

  • w = 2

  • x = 1

  • - = 0

當這些值被加在一起,它的總和便用來設立特定的權限。譬如,如果你想有讀取和寫入的權限,你會得到一個值為 6 的總和;4(讀取)+ 2(寫入)= 6。

sneakers.txt 文件的數字權限設置如下:

- (rw-) (rw-) (r--)
| | |
4+2+0 4+2+0 4+0+0

所有者的總和為六,組群的總和為六,其他人的總和為四。這個權限設置讀作 664

如果你想改變 sneakers.txt 文件的權限,因此你的組群中的人沒有寫入權,但是仍舊能夠讀取文件的話,從這組數字中減掉二(2)就可以刪除寫入權限了。

然后,這組數值就變成六四四(644)。

要實現這些新設置,鍵入:

chmod 644 sneakers.txt

現在,列舉這個文件來校驗改變。鍵入:

ls -l sneakers.txt

輸出應為:

-rw-r--r-- 1 test test 39 3月 11 12:04 sneakers.txt

現在,組群和其他人都沒有了到文件 sneakers.txt 的寫入權。要歸還組群到文件的寫入權,在第二組權限中加上 w (2) 的值就可以了。

chmod 664 sneakers.txt
warning.png警告
把權限設為 666 會允許每個人對文件或目錄都有讀取和寫入的權限。把權限設為 777 允許每個人都有讀取、寫入和執行的權利。這些權限可能會允許對機密文件的篡改,因此,一般來說,使用這類設置是不明智的。

這里是一個某些常用設置、數值、以及它們的含義的列表:

  • -rw------- (600) — 只有所有者才有讀取和寫入的權限。

  • -rw-r--r-- (644) — 只有所有者才有讀取和寫入的權限;組群和其他人只有讀取的權限。

  • -rwx------ (700) — 只有所有者才有讀取、寫入、和執行的權限。

  • -rwxr-xr-x (755) — 所有者有讀取、寫入、和執行的權限;組群和其他人只有讀取和執行的權限。

  • -rwx--x--x (711) — 所有者有讀取、寫入、和執行權限;組群和其他人只有執行權限。

  • -rw-rw-rw- (666) — 每個人都能夠讀取和寫入文件。(請謹慎使用這些權限。)

  • -rwxrwxrwx (777) — 每個人都能夠讀取、寫入、和執行。(再重申一次,這種權限設置可能會很危險。)

下面列舉了一些對目錄的常見設置:

  • drwx------ (700) — 只有所有者能在目錄中讀取、寫入。

  • drwxr-xr-x (755) — 每個人都能夠讀取目錄,但是其中的內容卻只能被所有者改變。