文件類型
Linux下的文件可以分為5種不同的類型:普通文件、目錄文件、鏈接文件、設備文件和管道文件。
1.普通文件
這是一類常見的文件,也是常使用的一類文件,其特點是不包含有文件系統的結構信息。通常所接觸到的文件,包括圖形文件、數據文件、文檔文件、聲音文件等都屬于這種文件。這種類型的文件按其內部結構又可細分為文本文件和二進制文件。
2.目錄文件
目錄文件是用于存放文件名及其相關信息的文件,是內核組織文件系統的基本節點。目錄文件可以包含下一級目錄文件或普通。對于習慣于使用
Windows的用戶來說,這可能有些難于理解,目錄怎么會是文件呢?的確,在Linux中,目錄文件是一種文件。但Linux的目錄文件和其它操作系統
中的“目錄”的概念不同,它是Linux文件中的一種。當然,在實際使用中可以不仔細區分這兩種說法。實際上,在很多Linux的書籍和資料中就是將目錄
文件簡稱為目錄的。不過,我們必需清楚此“目錄”非彼“目錄”。
3.鏈接文件
鏈接文件是一種特殊的文件,實際上是指向一個真實存在的文件的鏈接。這有點類似于Windows下的快捷方式。根據鏈接文件的不同,它又可以細分為硬鏈接文件和符號鏈接文件。
4.設備文件
設備文件是Linux中最特殊的文件。正是由于它的存在,使得Linux系統可以十分方便地訪問外部設備。Linux系統為外部設備提供一種
標準接口,將外部設備視為一種特殊的文件。用戶可以像訪問普通文件一樣訪問外部設備,使Linux系統可以很方便地適應不斷發展的外部設備。通常
Linux系統將設備文件放在/dev目錄下,設備文件使用設備的主設備號和次設備號來指定某外部設備。根據訪問數據方式的不同,設備文件又可以細分為塊
設備和字符設備文件。
5.管道文件
管道文件是一種很特殊的文件,主要用于不同進程間的信息傳遞。當兩個進程間需要進行數據或信息傳遞時,可以通過管道文件。一個進程將需傳遞的數據或信息寫入管道的一端,另一進程則從管道的另一端取得所需的數據或信息。通常管道是建立在調整緩存中。
文件的權限
Linux系統是一個典型的多用戶系統,不同的用戶處于不同的地位。為了保護系統的安全性,Linux系統對不同用戶訪問同一文件的權限做了不同的規定。
對于一個Linux系統中的文件來說,它的權限可以分為三種:讀的權限、寫的權限和執行的權限,分別用r、w和x表示。不同的用戶具有不同的讀、寫和執行的權限。
對于一個文件來說,它都有一個特定的所有者,也就是對文件具有所有權的用戶。同時,由于在Linux系統中,用戶是按組分類的,一個用戶屬于
一個或多個組。文件所有者以外的用戶又可以分為文件所有者的同組用戶和其它用戶。因此,Linux系統按文件所有者、文件所有者同組用戶和其它用戶三類規
定不同的文件訪問權限。
權限的概念
Linux文件系統安全模型是通過給系統中的文件賦予兩個屬性來起作用的,這兩個賦予每個文件的屬性稱為所有者(ownership)和訪問權限(access rights)。Linux下的每一個文件必須嚴格地屬于一個用戶和一個組。
??? 每個文件的目錄條目都是以下面類似的一些符號開始:
??? -rw-r--r--
這些符號用來描述文件的訪問權限類別,也就是常說的文件權限。這些訪問權限指導Linux根據文件的用戶和組所有權來處理所有訪問文件的用戶請求。總共有10種權限屬性,因此一個權限列表總是10個字符的長度。它的格式遵循下列規則:
◆
第1個字符表示一種特殊的文件類型。其中字符可為d(表示該文件是一個目錄)、b(表示該文件是一個系統設備,使用塊輸入/輸出與外界交互,通常為一個磁
盤)、c(表示該文件是一個系統設備,使用連續的字符輸入/輸出與外界交互,如串口和聲音設備),“.”表示該文件是一個普通文件,沒有特殊屬性。
◆
2~4個字符用來確定文件的用戶(user)權限,5~7個字符用來確定文件的組(group)權限,8~10個字符用來確定文件的其它用戶(other
user,既不是文件所有者,也不是組成員的用戶)的權限。其中,2、5、8個字符是用來控制文件的讀權限的,該位字符為r表示允許用戶、組成員或其它人
可從該文件中讀取數據。短線“-”則表示不允許該成員讀取數據。與此類似,3、6、9位的字符控制文件的寫權限,該位若為w表示允許寫,若為“-”表示不
允許寫。4、7、10位的字符用來控制文件的制造權限,該位若為x表示允許執行,若為“-”表示不允許執行。
任何列在/etc/passwd文件中的用戶都可以是一個文件的所有者,也稱為該文件的用戶。同樣任何列在/etc/group文件中的組都可以是文件組的所有者,也簡稱為文件的組。
下面來看兩個例子,以便加深理解。首先來看一看:
drwxrwxr-- 2 root root 4096 2月 11 10:36 guo
因為guo的第1個位置的字符是d,所以由此知道guo是一個目錄。第2至4位置上的屬性是rwx,表示用戶root擁有權限列表顯示guo
中所有的文件、創建新文件或者刪除guo中現有的文件,或者將guo作為當前工作目錄。第5至7個位置上的權限是rwx,表示root組的成員擁有和
root一樣的權限。第8至10位上的權限僅是r--,表示不是root的用戶及不屬于root組的成員只有對guo目錄列表的權限。這些用戶不能創建或
者刪除guo中的文件、執行junk中的可執行文件,或者將junk作為他們的當前工作目錄。
下面再來看一看:
-rwxr-xr-- 1 user admin 20480 11月 11 09:23 Readme.txt
在該項中,第1個位置是短線“-”,表示該文件是一個普通文件,沒有特殊屬性。該文件對任何人都可讀,只對user可寫,user和admin的組成員可以執行該文件。
另外需要注意的是,當用戶訪問一個文件時,權限檢查是從左到右的。假設上述的readme.txt文件具有以下權限:
-r--rw-r--
那么即使user是屬于admin組的一個成員,也不能對該文件進行寫操作,因為已經被左邊的寫權限設置拒絕了。
修改文件或者目錄權限
文件或者目錄的用戶能夠使用chmod命令修改文件的權限。Chmod命令有兩種方式:一種是字符方式,使用字符來修改文件的權限;另外一種是數字方式,使用3個數字的組合來修改文件的權限。
字符方式的基本語法是:chmod [ugoa] +或者-或者= [rwx] [文件...]
在上述命令中,使用“+”或者“-”是在保存原來權限設置的基礎上修改權限。當使用“=”時,權限被明確地賦予要修改的文件。其中字符u表示文件或者目錄的所有者,g表示文件或者目錄所屬組,o除所有者和所屬組以外的用戶,a表示全部用戶。
數字方式的基本語法是:chmod nnn 文件
其中第1、2、3個n分別表示用戶、組成員和所有其它用戶。各個位置上的n要么是一個0,或者是一個由賦予權限的相關值相加得到的單個阿拉伯數字之和。這些數字的意義如表1所示。
表1 數字的含義
值 表示的意義
4 表示文件或者目錄的讀權限
2 表示文件或者目錄的寫權限
1 表示文件或者目錄的執行權限
很顯然,當使用數字方式時,這3個數字必須為0至7中的一個。
一般而言,作為系統管理員,更喜歡使用數字方式,因為這種方式的速度明顯快得多。
很顯然,系統中各種文件的權限設置對特定用戶的數據安全有很大影響。但是要求用戶逐一明確設置系統中每個文件的權限也是不現實的,為此,需要
使用umask命令,該命令可以為用戶賬號中新文件的創建進行缺省設置。具體來說,umask是用來設置權限掩碼的,權限掩碼由3個數字組成,將現有的存
取權限減掉權限掩碼后,即可產生建立文件時默認的權限。例如,root的權限為777,若權限掩碼設為022,那么兩都相減后可得755。下面是在我的系
統更改umask的一些情況:
[root@linuxserver root]# umask
022
上述命令顯示表示我的系統的umask值為022。
[root@linuxserver root]# umask -S
u=rwx,g=rx,o=rx
當umask值為022時,默認情況下各用戶的權限。注意這里的參數“S”是大寫。
[root@linuxserver root]# umask 177
[root@linuxserver root]# umask -S
u=rw,g=,o=
上述兩行命令把umask值改為177,結果只有文件所有者具有讀寫文件的權限,其它用戶不能訪問該文件。這顯然是一種非常安全的狀態。
其它問題
事實上,一個系統中的文件安全是一個綜合問題,對于一些特殊的情況要做特殊的考慮。比如,對于設備文件的安全性、SUID/SGID的設置等。
一般來說,各Linux發行版在安裝時就已經把設備文件的設置做得非常不錯。但是對于磁盤設備而言,我認為惟一安全的還是只允許root用戶進行讀寫。否則,其它用戶的賬號一旦被攻破,黑客通過訪問磁盤很快就可以讓系統崩潰。要做到這一點,可以使用以下命令:
#cd /dev
#chmod 600 sd* hd *
Suid和Sgid是Linux系統中最復雜的屬性,它跟一個系統的安全息息相關。我們可以利用chmod命令來清除或者設置一個文件的Suid/Sgid屬性,具體方法如下所示。
將/usr/sbin/pppd程序設置為Suid/Sgid狀態,使用的命令是:
#chmod ug+s /usr/sbin/pppd
要清除Sgid狀態而保留Suid狀態,可用以下命令:
#chmod g-s /usr/sbin/pppd
此外,如何裝載文件系統,特別是將root文件系統裝載為只讀,以防止非授權的修改也比較重要。
總之,Linux下文件系統的安全問題是一個非常復雜的問題。通過本文的學習,讀者對此應該有了一個較全面的了解,并且可以處理日常工作中常見的有關文件系統安全問題。