作者:未知 整理:蘭陵生 為了防止未授權用戶訪問你的文件,可以在文件和目錄上設置權限位。還可以設定文件在創建時所具有的缺省權限:這些只是整個系統安全問題中的一小部分。在這裡我們並不想對系統安全問題的方方面面進行全面的探討,只是介紹一下有關文件和目錄的安全問題。 本章包含以下內容: • 文件和目錄的權限。 • setuid。 • chown和chgrp。 • umask。 • 符號鏈接。 創建文件的用戶和他(她)所屬於的組擁有該文件。文件的屬主可以設定誰具有讀、寫、執行該文件的權限。當然,根用戶或系統管理員可以改變任何普通用戶的設置。一個文件一經創建,就具有三種訪問方式: 1) 讀,可以顯示該文件的內容。 2) 寫,可以編輯或刪除它。 3) 執行,如果該文件是一個shell腳本或程序。 按照所針對的用戶,文件的權限可分為三類: 1) 文件屬主,創建該文件的用戶。 2) 同組用戶,擁有該文件的用戶組中的任何用戶。 3) 其他用戶,即不屬於擁有該文件的用戶組的某一用戶。 1.1 文件 當你創建一個文件的時候,系統保存了有關該文件的全部信息,包括: • 文件的位置。 • 文件類型。 • 文件長度。 • 哪位用戶擁有該文件,哪些用戶可以訪問該文件。 • i節點。 • 文件的修改時間。 • 文件的權限位。 讓我們使用ls -l命令,來看一個典型的文件: 第一部分shell 下面讓我們來分析一下該命令所得結果的前面兩行,看看都包含了哪些信息: $ls total 4232 -rwxr-xr-x 1 root root 3756 Oct 14 04:44 dmesg -r-xr-xr-x 1 root root 12708 Oct 3 05:40 ps -rwxr-xr-x 1 root root 5388 Aug 5 1998 pwd total 4232:這一行告訴我們該目錄中所有文件所占的空間。 -rwxr-xr-x:這是該文件的權限位。如果除去最前面的橫槓,這裡一共是9個字符,他們分別對應9個權限位。通過這些權限位,可以設定用戶對文件的訪問權限。這9個字符可以分為三組: r w x:文件屬主權限這是前面三位 r-x:同組用戶權限這是中間三位 r-x:其他用戶權限這是最後三位 後面我們還將對這些權限位作更詳細的介紹。出現在r、w、x位置上的橫槓表示相應的訪問權限被禁止。 1 該文件硬鏈接的數目。 root 文件的屬主。 root 文件的屬主root所在的缺省組(也叫做root )。 3578 用字節來表示的文件長度,記住,不是K字節! Oct 14 04:44 文件的更新時間。 dmesg 文件名。 1.2 文件類型 還記得前面一節所提到的文件權限位前面的那個字符嗎?我們現在就解釋一下這個橫槓所代表的意思,文件類型有七種,它可以從ls -l命令所列出的結果的第一位看出,這七種類型是: d 目錄。 l 符號鏈接(指向另一個文件)。 s 套接字文件。 b 塊設備文件。 c 字符設備文件。 p 命名管道文件。 - 普通文件,或者更准確地說,不屬於以上幾種類型的文件。 1.3 權限 讓我們用toUCh命令創建一個文件: $ touch myfile 現在對該目錄使用ls -l命令: $ls -l -rw-r--r-- 1 dave admin 0 Feb 19 22:05 myfile 我們已經創建了一個空文件,正如我們所希望的那樣,第一個橫槓告訴我們該文件是一個普通文件。你將會發現所創建的文件絕大多數都是普通文件或符號鏈接文件(後面將會出現更多的符號鏈接文件)。 文件屬主權限組用戶權限其他用戶權限 rw-r--r— 接下來的三個權限位是文件屬主所具有的權限;再接下來的三位是與你同組用戶所具有的權限,這裡是admin組;最後三位是其他用戶所具有的權限。在該命令的結果中,我所屬於的缺省組也顯示了出來。下面是對該文件權限的精確描述: 表1-1 ls -l命令輸出的含義 (第一個字符) - 普通文件 (接下來的三個字符) rw- 文件屬主的權限 (再接下來的三個字符) r-- 同組用戶的權限 (最後三個字符) r-- 其他用戶的權限 因此,這三組字符(除了第一個字符)分別定義了: 1) 文件屬主所擁有的權限。 2) 文件屬主缺省組(一個用戶可以屬於很多的組)所擁有的權限。 3) 系統中其他用戶的權限。 在每一組字符中含有三個權限位: r 讀權限 w 寫/更改權限 x 執行該腳本或程序的權限 這裡我們采用另外一種方式來表示剛才所列出myfile的文件權限: -rw-r--r-- 文件類型為普通文件文件屬主可以讀、寫同組用戶可以讀其他用戶可以讀 你可能已經注意到了,myfile在創建的時候並未給屬主賦予執行權限,在用戶創建文件時,系統不會自動地設置執行權限位。這是出於加強系統安全的考慮。必須手工修改這一權限位: 後面講到umask命令時,你就會明白為什麼沒有獲得執行權限。然而,你可以針對目錄設置執 行權限位,但這與文件執行權限位的意義有所不同,這一點我們將在後面討論。 上面這段關於權限位的內容可能不太好理解,讓我們來看幾個例子(見表1 - 2 )。更令人迷惑的是,對於文件屬主來說,在只有讀權限位被置位的情況下,仍然可以通過文件重定向的方法向該文件寫入。過一會兒我們就會看到,能否刪除一個文件還依賴於該文件所在目錄權限位的設置。 表1-2 文件權限及含義,權限所代表的含義 r-- --- --- 文文件屬主可讀,但不能寫或執行 r-- r-- --- 文文件屬主和同組用戶(一般來說,是文件屬主所在的缺省組)可讀 r-- r-- r- - 文任何用戶都可讀,但不能寫或執行 rwx r-- r- - 文文件屬主可讀、寫、執行,同組用戶和其他用戶只可讀 rwx r-x --- 文文件屬主可讀、寫、執行,同組用戶可讀、執行 權限所代表的含義 rwx r-x r- x 文文件屬主可讀、寫、執行,同組用戶和其他用戶可讀、執行 rw- rw- --- 文文件屬主和同組用戶可讀、寫 rw- rw- r- - 文文件屬主和同組用戶可讀、寫,其他用戶可讀 rw- rw- --- 文文件屬主和同組用戶及其他用戶讀可以讀、寫,慎用這種權限 設置,因為任何用戶都可以寫入該文件 1.4 改變權限位 對於屬於你的文件,可以按照自己的需要改變其權限位的設置。在改變文件權限位設置之前,要仔細地想一想有哪些用戶需要訪問你的文件(包括你的目錄)。可以使用chmod命令來改變文件權限位的設置。這一命令有比較短的絕對模式和長一些的符號模式。我們先來看一看符號模式。 1.4.1 符號模式 chmod命令的一般格式為: chmod [who] operator [permission] filename who的含義是: u 文件屬主權限。 g 同組用戶權限。 o 其他用戶權限。 a 所有用戶(文件屬主、同組用戶及其他用戶)。 operator的含義: + 增加權限。 - 取消權限。 = 設定權限。 permission的含義: r 讀權限。 w 寫權限。 x 執行權限。 s 文件屬主和組s e t - I D。 t 粘性位*。 l 給文件加鎖,使其他用戶無法訪問。 u,g,o 針對文件屬主、同組用戶及其他用戶的操作。 *在列文件或目錄時,有時會遇到“ t”位。“t”代表了粘性位。如果在一個目錄上出現 “t”位,這就意味著該目錄中的文件只有其屬主才可以刪除,即使某個同組用戶具有和屬主 同等的權限。不過有的系統在這一規則上並不十分嚴格。 如果在文件列表時看到“ t”,那麼這就意味著該腳本或程序在執行時會被放在交換區(虛 存)。不過由於當今的內存價格如此之低,大可不必理會文件的“t”的使用。 1.4.2 chmod命令舉例 現在讓我們來看一些使用chmod命令的例子。 假定myfile文件最初具有這樣的權限:rwx rwx rwx : 命令結果含義 chmod a-x myfile rw- rw- rw- 收回所有用戶的執行權限 chmod og-w myfile rw- r-- r- - 收回同組用戶和其他用戶的寫權限 chmod g+w myfile rw- rw- r- - 賦予同組用戶寫權限 chmod u+x myfile rwx rw- r- - 賦予文件屬主執行權限 chmod go+x myfile rwx rwx r- x 賦予同組用戶和其他用戶執行權限 當創建myfile文件時,它具有這樣的權限: -rw-r--r-- dave admin 0 Feb 19 22:05 myfile 如果這是我寫的一個腳本,我希望能夠具有執行權限,並取消其他用戶(所有其他用戶)的寫權限,可以用: $ chmod u+x o-w myfile 這樣,該文件的權限變為: -rwx r-- --- dave admin 0 Feb 19 22:05 myfile 現在已經使文件屬主對myfile文件具有讀、寫執行的權限,而admin組的用戶對該文件具有讀權限。如果希望某個腳本文件對你自己來說可執行,而且你對該文件的缺省權限很放心,那麼只要使它對你來說具有執行權限即可。 $ chmod u+x dt 1.4.3 絕對模式 chmod命令絕對模式的一般形式為: chmod [mode] file 其中mode是一個八進制數。 在絕對模式中,權限部分有著不同的含義。每一個權限位用一個八進制數來代表,如表1 – 3下所示。下面用八進制目錄/文件權限表示,八進制數含義八進制數含義如下: 八進制數 含義 0 4 0 0 文件屬主可讀 0 2 0 0 文件屬主可寫 0 1 0 0 文件屬主可執行 0 0 4 0 同組用戶可讀 0 0 2 0 同組用戶可寫 0 0 1 0 同組用戶可執行