類UNIX系統基礎:文件安全與權限
當創建一個文件的時候,系統保存了有關該文件的全部信息,包括:
" 文件的位置。
" 文件類型。
" 文件長度。
" 哪位用戶擁有該文件,哪些用戶可以訪問該文件。
" i節點。
" 文件的修改時間。
" 文件的權限位。
讓我們用touch命令創建一個文件:
CODE:$ touch temp創建了一個空文件,現在用ls -l命令查看該目錄下文件的屬性(我這里用中文版):
如下:
CODE:[root@Linux_chenwy temp]# ls -l
總用量 36
-rw-r--r--1 rootroot 34890 10月 19 20:17 httpd.conf
-rw-r--r--1 rootroot 0 10月 19 20:16 tempCODE:總用量 36:是ls所列出的入口占用空間的字節數(以K為單位)。
1該文件硬鏈接的數目。
root:文件屬主。
root:文件屬組(一般是文件屬主所在的缺省組。)
34890:字節來表示的文件長度,記住,不是K字節!
10月 19 20:17:件的更新時間。
temp or httd.conf :件名。QUOTE:原帖由 "sunsroad " 發表:
BTW:要檢查該目錄所有文件占用的空間應該用這個命令:du。
譬如說前面說的36是如何計算出來:
首先我們要先了解你所用的文件系統的IO BLOCK(中文叫作簇)為多少,在你所使用的這個文件系統的IO BLOCK大小是4096 Bytes。
他意義是文件系統最小的讀寫及分配單位,每次讀寫操作你都不能小于這個尺寸。即使你的文件是只有一個字節。而且文件在硬盤上的存儲也是以這個為單位,就是說如果文件尺寸小于這個值,那么它在磁盤上占用的空間就是4096字節。
占用空間的具體算法是:(進一(文件尺寸/4096))×4096。根據這個你就可以計算出你所列舉的例子中的文件的空間使用狀況:34890除以4096,大約等于8.5,進一法取得為9,就是說文件在磁盤上占用了9個BLOCk,每個BLOCK為4K,所以這兩個文件占用的空間就是36K。
這個規則也適合于目錄,不過不會出現為0的目錄,即使是空目錄
-rw-r--r-- :這是該文件的權限位。
第一個橫杠:指定文件類型,表示該文件是一個普通文件。(所創建的文件絕大多數都是普通文件或符號鏈接文件)。
除去最前面的橫杠,一共是9個字符,他們分別對應9個權限位。通過這些權限位,可以設定用戶對文件的訪問權限。對這兩個文件的精確解釋是:
CODE:rw-:前三位,文件屬主可讀、寫
r--:中間三位,組用戶可讀
r--:最后三位,其他用戶只可讀
在創建的時候并未給屬主賦予執行權限,在用戶創建文件時,系統不會自動地設置執行權限位。這是出于加強系統安全的考慮。
現在分開詳細說明:
文件類型
前面提到的第一條橫杠,表示該文件是普通文件型
文件類型有七種,它可以從ls -l命令所列出的結果的第一位看出。
七種類型:
CODE:d 目錄。
l 符號鏈接(指向另一個文件)。
s 套接字文件。
b 塊設備文件。
c 字符設備文件。
p 命名管道文件。
- 普通文件,或者更準確地說,不屬于以上幾種類型的文件。
文件的權限位中中每一組字符中含有三個權限位:
CODE:r 讀權限
w 寫/更改權限
x 執行該腳本或程序的權限
如:
CODE:r-- --- --- 文文件屬主可讀,但不能寫或執行
r-- r-- --- 文文件屬主和屬組用戶(一般來說,是文件屬主所在的缺省組)可讀
r-- r-- r- - 文任何用戶都可讀,但不能寫或執行
rwx r-- r- - 文文件屬主可讀、寫、執行,屬組用戶和其他用戶只可讀
rwx r-x --- 文文件屬主可讀、寫、執行,屬組用戶可讀、執
rwx r-x r- x 文文件屬主可讀、寫、執行,屬組用戶和其他用戶可讀、執行
rw- rw- --- 文文件屬主和屬組用戶可讀、寫
rw- rw- r- - 文文件屬主和屬組用戶可讀、寫,其他用戶可讀
rw- rw- --- 文文件屬主和屬組用戶及其他用戶讀可以讀、寫,慎用這種權限
設置,因為任何用戶都可以寫入該文件
使用chmod來改變權限位
這一命令有符號模式和絕對模式。
符號模式
chmod命令的一般格式為:
chmod [who] operator [permission] filename
w h o的含義是:
CODE:u 文件屬主權限。
g 屬組用戶權限。
o 其他用戶權限。
a 所有用戶(文件屬主、屬組用戶及其他用戶)。
o p e r a t o r的含義:
CODE:+ 增加權限。
- 取消權限。
= 設定權限。
p e r m i s s i o n的含義:
CODE:r 讀權限。
w 寫權限。
x 執行權限。
s 文件屬主和組set-ID。
t 粘性位*。
l 給文件加鎖,使其他用戶無法訪問。
u,g,o 針對文件屬主、屬組用戶及其他用戶的操作。
*在列文件或目錄時,有時會遇到“ t位。“t代表了粘性位。如果在一個目錄上出現“t位,這就意味著該目錄中的文件只有其屬主才可以刪除,即使某個屬組用戶具有和屬主同等的權限。不過有的系統在這一規則上并不十分嚴格。
如果在文件列表時看到“ t,那么這就意味著該腳本或程序在執行時會被放在交換區(虛存)。
對"t"還沒弄清楚這是"sunsroad"的解釋:
QUOTE:原帖由 "sunsroad"]"t"權限用在文件上面是沒有意義的,不是什么在交換區的概念,它跟文件的執行沒有關系,而主要是為了文件共享設置的。 [/quote 發表:
[quote]原帖由 "風流涕淌" 發表:
1,t 權限是粘著位,例:TMP目錄下,任何人都有讀寫執行權限,但是不是任何人對里邊的可寫權限的文件就可以刪除呢,當然不是了,這個就是粘著位的做用,只有所有者才有權刪除自已的文件,當然,ROOT除外
2,關于文件安全的另一種權限,
i權限 也就是不可修改權限 例:chattr u+i aaa 則aaa文件就不可修改,無論任何人,如果刪除就用u-i就好了
a權限 也就是只追加權限, 對于日志系統很好用,這個權限讓目標文件只能追加,不能刪除,而且不能通過編輯器追加。方法和i權限一樣加
如果想要看某個文件是不是有這個權限,用lsattr filename就行了
例如
CODE:chmod a-x temp //rw- rw- rw- 收回所有用戶的執行權限
chmod og-w temp //rw- r-- r- - 收回屬組用戶和其他用戶的寫權限
chmod g+w temp //rw- rw- r- - 賦予屬組用戶寫權限
chmod u+x temp //rwx rw- r- - 賦予文件屬主執行權限
chmod go+x temp //rwx rwx r- x 賦予屬組用戶和其他用戶執行權限
舉如
當創建temp文件時,它具有這樣的權限:
CODE:-rw-r--r--1 rootroot 0 10月 19 20:16 temp
如果要使屬主和屬組用戶具有有執行權限,并取消其他用戶(所有其他用戶)的寫權限,可以用:
CODE:$ chmod ug+x temp
$ chmod o-w temp
這樣,該文件的權限變為:
CODE:-rwxr--r--1 rootroot 0 10月 19 20:16 temp
現在已經使文件屬主對temp文件具有讀、寫執行的權限,屬組用戶真有讀寫權限,其它用戶沒有權限了。
絕對模式chm d命令絕對模式的一般形式為:
chmod [mode] file
其中m o d e是一個八進制數。
在絕對模式中,權限部分有著不同的含義。每一個權限位用一個八進制數來代表,如
CODE:0 4 0 0 文件屬主可讀
0 2 0 0 文件屬主可寫
0 1 0 0 文件屬主可執行
0 0 4 0 屬組用戶可讀
0 0 2 0 屬組用戶可寫
0 0 1 0 屬組用戶可執行
0 0 0 4 其他用戶可讀
0 0 0 2 其他用戶可寫
0 0 0 1 其他用戶可執行
在設定權限的時候,只需按照上面查出與文件屬主、屬組用戶和其他用戶所具有的權限相對應的數字,并把它們加起來,就是相應的權限表示。
可以看出,文件屬主、屬組用戶和其他用戶分別所能夠具有的最大權限值就是7。
再來看看前面舉的例子:
CODE:-rwxr--r-- 1 root 0 10月 19 20:16 temp
相應的權限是:
CODE:rwx-:0400 + 0200 +0100 (文件屬主可讀、寫、執行) = 0 7 0 0
r--:0 0 4 0 (屬組用戶可讀) = 0 0 4 0
r--:0 0 4 0 (屬組用戶可讀) = 0 0 4 0
0 7 4 4
有一個計算八進制權限表示的更好辦法,如下:
CODE:文件屬主:r w x:4 + 2 + 1
屬組用戶:r w x:4 + 2 + 1
其他用戶:r w x:4 + 2 + 1
這上面這相,更容易地計算出相應的權限值,只要分別針對文件屬主、屬組用戶和其他用戶把相應權限下面的數字加在一起就可以了。
temp文件具有這樣的權限:
CODE:r w xr - - r - -
4+2+1 44
把相應權限位所對應的值加在一起,就是7 4 4。
如:
CODE:chmod 666 rw- rw- rw- 賦予所有用戶讀和寫的權限
chmod 644 rw- r-- r- - 賦予所有文件屬主讀和寫的權限,所有其他用戶讀權限
chmod 744 rwx r-- r- - 賦予文件屬主讀、寫和執行的權限,所有其他用戶讀的權限
chmod 664 rw- rw- r- - 賦予文件屬主和屬組用戶讀和寫的權限,其他用戶讀權限
chmod 70
