3.3.4 簡介檔案的權限
Un*x
系統是為了多人使用而設計的,為了要讓大家在同一個系統上工作而不互相干擾,所以每個使用者都要在系統上有一個帳號才能登入使用系統,而且有『群組』(group)、『權限』(permission)的設計,每個帳號都可以隸屬於一個或一個以上的群組,每個檔案對不同帳號或群組都有不同的讀、寫與執行權利,一個好的
Linux
系統裡面的權限劃分非常清楚,以使不同使用者之間的工作不會相互干擾,使用者也可以利用權限對自己的文件作保護的動作,限制別人對自己檔案的讀與寫。
檔案 file.list 的權限 |
|
使用者 |
群組 |
他人 |
符號 |
rw- |
rw- |
r-- |
二進位 |
110 |
110 |
100 |
八進位 |
6 |
6 |
4 |
Linux
系統上的每個檔案都有檔案擁有人、檔案隸屬的群組,檔案的權限設定等等性質,這些資訊可以用
ls -l 來獲得,例如上面的例子:
[cle@h2 cle]$ ls -l
total 1
-rw-rw-r-- 1 cle cle 10 May 12 10:00 file.list
[cle@h2 cle]$
"ls -l"
顯示的資訊裡面,第一欄就是檔案的存取權限,第三欄是檔案擁有人的帳號,第四欄是檔案群組的帳號,接著是檔案大小,以
byte 為單位,再來是這個檔案最後被更動過的時間,最後則是檔名。
第一個欄位的這些字元,乍看之下有點奇怪,其實這些字元表示了這個檔案的種類與存取權限
(access permissions),這裡總共有 10
個欄位,每個欄位用一個英文字元來代表,第一個欄位是檔案的種類,可能的值有:
- 一般常規檔案
d 目錄
l 符號連結 (symbolic link)
s socket
b 區塊裝置 (block device)
c 字元裝置 (character device)
所以上面例子裡面的檔案 "file.list" 是一個一般檔案。
接下來的九個欄位代表這個檔案的存取權限,'r' 表示可讀,'w'
表示可寫,'x'
表示可執行,九個欄位裡面前三個表示檔案擁有人的權限,中間三個是屬於這個檔案同一群組裡的使用者所擁有的權限,最後三個是其他人的權限,以上面這個
"file.list" 為例子,"rw-rw-r-" 可以拆成使用者 ->
"rw-",群組 -> "rw-",他人 -> "r",所以使用者
(就是 cle) 可以讀、寫這個檔案,不能執行,同群組的人 (cle 群組)
可以讀、寫這個檔案,不能執行,其他人就只能讀了。
檔案的權限還常常用三個八進位的數目字來表示,分別把擁有人、群組、他人的權限用二進位來表示,有這個權限就是
1,沒有就是 0,如 "rw-" 就是 "110",如此可以得到三個數字,每個數字最大是
2^3,所以是八進位的,再以 file.list 為例,"rw-" ->
"110" ,二進位的 110 等於 6,"r-" -> "100" ->
4,所以 file.list 檔案權限就是 664。
底下便是對這個檔案權限推算方法做一個總結:
只要是檔案的擁有人就可以利用 "chmod"
指令來改變檔案的權限:
chmod MODE FILE... 改變檔案的權限
這個指令可以用兩種方式來指定要賦予檔案的權限 (MODE),一種是直接給定八進位的檔案權限,例如:
[cle@h2 cle]$ ls -l
total 1
-rw-rw-r-- 1 cle cle 10 May 12 10:00 file.list
[cle@h2 cle]$ chmod 777 file.list
[cle@h2 cle]$ ls -l
total 1
-rwxrwxrwx 1 cle cle 10 May 12 10:00 file.list
[cle@h2 cle]$ chmod 644 file.list
[cle@h2 cle]$ ls -l
total 1
-rw-r--r-- 1 cle cle 10 May 12 10:00 file.list
[cle@h2 cle]$
此外,也可以用代碼搭配來更改檔案的權限,代碼的形式類似於
"a+x",第一欄可以是 ugoa
四個字母的組合,用來指定影響的範圍,其意義如下:
u 檔案的擁有人 (user)
g 檔案的群組 (group)
o 他人 (others)
a 所有人 (all)
第二欄可以是 +-= 其中之一,意義如下:
+ 增加後面的權限
- 減去後面的權限
= 設定成後面的權限
第三欄用來指定權限,可以是 rwx 任意的組合。
例如 "chmod a+x"
就可以把所有的使用者對這個檔案的執行權限打開,檔案可被任何人執行:
[cle@h2 cle]$ ls -l
total 1
-rw-r--r-- 1 cle cle 10 May 12 10:00 file.list
[cle@h2 cle]$ chmod a+x file.list
[cle@h2 cle]$ ls -l
total 1
-rwxr-xr-x 1 cle cle 10 May 12 10:00 file.list
[cle@h2 cle]$
第一欄跟第三欄都不只限用一個字元:
[cle@h2 cle]$ ls -l
total 1
-rwxr-xr-x 1 cle cle 10 May 12 10:00 file.list
[cle@h2 cle]$ chmod go-rwx file.list
[cle@h2 cle]$ ls -l
total 1
-rwx------ 1 cle cle 10 May 12 10:00 file.list
[cle@h2 cle]$
以上簡單介紹了檔案權限的讀法跟改變檔案權限的指令 "chmod",其實這邊介紹得非常粗略。Un*x
系統發展了幾十年了,這些日子裡面為了系統的安全性與群組分工合作的需求,已經發展出了一套十分綿密複雜的權限設定系統,身為一個
Linux
系統的管理者,一定要能夠掌握好系統的權限設定、善用系統的權限設定,如
SUID、SGID
以及目錄的權限設定,筆者在這邊都沒有提及,有賴讀者自行再去學習了。[platin1]
|