文章目錄
- Linux檔案權限
-
- 1. 使用檔案權限符
- 2. 預設檔案權限
- 3. 改變權限
-
- 3.1 options
- 3.2 八進制模式
- 3.3 符号模式
- 4. 改變所屬關系
-
- 4.1 chown
- 4.2 chgrp
- 5. References
Linux檔案權限
1. 使用檔案權限符
ls指令可以檢視Linux系統上的檔案、目錄和裝置的權限
$ ls –l
total 68
-rw-rw-r-- 1 rich rich 50 2010-09-13 07:49 file1.gz
-rw-rw-r-- 1 rich rich 23 2010-09-13 07:50 file2
-rw-rw-r-- 1 rich rich 48 2010-09-13 07:56 file3
-rw-rw-r-- 1 rich rich 34 2010-09-13 08:59 file4
-rwxrwxr-x 1 rich rich 4882 2010-09-18 13:58 myprog
-rw-rw-r-- 1 rich rich 237 2010-09-18 13:58 myprog.c
drwxrwxr-x 2 rich rich 4096 2010-09-03 15:12 test1
drwxrwxr-x 2 rich rich 4096 2010-09-03 15:12 test2
$
輸出結果的第一個字段就是描述檔案和目錄權限的編碼。這個字段的第一個字元代表了對象的類型:
-代表檔案
d代表目錄
l代表連結
c代表字元型裝置
b代表塊裝置
n代表網絡裝置
之後有3組三字元的編碼,每組定義了3種通路權限:
r代表對象是可讀的
w代表對象是可寫的
x代表對象是可執行的
若沒有某種權限,在該權限位會出現單破折線。這3組權限分别對應對象的3個安全級别:
- 對象的屬主
- 對象的屬組
- 系統的其他使用者
例子:
-rwxrwxr-x 1 rich rich 4882 2010-09-18 13:58 myprog
檔案myprog有下面3組權限:
rwx: 檔案的屬主(設為登入名rich)
rwx: 檔案的屬組(設為組名rich)
r-x: 系統上的其他人
這些權限說明登入名為rich的使用者可以讀取、寫入以及執行這個檔案(可以看作有全部權限)。類似地,rich組的成員也可以讀取、寫入和執行這個檔案。然而不屬于rich組的其他使用者隻能讀取和執行這個檔案:w被單破折線取代了,說明這個安全級别沒有寫入權限。
2. 預設檔案權限
umask指令用來設定所建立檔案和目錄的預設權限。
$ touch newfile
$ ls -al newfile
-rw-r--r-- 1 rich rich 0 Sep 20 19:16 newfile
$
touch指令用配置設定給我的使用者賬戶的預設權限建立了這個檔案。umask指令可以顯示和設定這個預設權限。
$ umask
0022
$
第一位代表了一項特别的安全特性,叫作粘着位(sticky bit),後面的3位表示檔案或目錄對應的umask八進制值。要了解umask是怎麼工作的,得先了解八進制模式的安全性設定。
八進制模式的安全性設定先擷取這3個rwx權限的值,然後将其轉換成3位二進制值,用一個八進制值來表示。在這個二進制表示中,每個位置代表一個二進制位。是以,如果讀權限是唯一置位的權限,權限值就是
r--
,轉換成二進制值就是100,代表的八進制值是4。下表列出了可
能會遇到的組合。
八進制模式先取得權限的八進制值,然後再把這三組安全級别(屬主、屬組和其他使用者)的八進制值順序列出。是以,八進制模式的值664代表屬主和屬組成員都有讀取和寫入的權限,而其他使用者都隻有讀取權限。
八進制的umask值是0022,而上面所建立的檔案的八進制權限卻是644。umask值隻是個掩碼,它會屏蔽掉不想授予該安全級别的權限。要把umask值從對象的全權限值中減掉。對檔案來說,全權限的值是666(所有使用者都有讀和寫的權限);而對目錄來說,則是777(所有使用者都有讀、寫、執行權限)。是以在上例中,檔案一開始的權限是666,減去umask值022之後,剩下的檔案權限就成了644。
在大多數Linux發行版中,umask值通常會設定在/etc/profile啟動檔案中,可以用umask指令為預設umask設定指定一個新值。
$ umask 026
$ touch newfile2
$ ls -l newfile2
-rw-r----- 1 rich rich 0 Sep 20 19:46 newfile2
$
在把umask值設成026後,預設的檔案權限變成了640,是以新檔案現在對組成員來說是隻讀的,而系統裡的其他成員則沒有任何權限。umask值同樣會作用在建立目錄上。
$ mkdir newdir
$ ls -l
drwxr-x--x 2 rich rich 4096 Sep 20 20:11 newdir/
$
由于目錄的預設權限是777,umask作用後生成的目錄權限不同于生成的檔案權限。umask值026會從777中減去,留下來751作為目錄權限設定。
3. 改變權限
chmod指令用來改變檔案和目錄的安全性設定。該指令的格式如下:
chmod options mode file
mode參數可以使用 八進制模式 或 符号模式 進行安全性設定。八進制模式設定非常直覺,直接用期望賦予檔案的标準3位八進制權限碼即可。
3.1 options
-c或--changes:效果類似“-v”參數,但僅回報更改的部分
-f或--quiet或--silent:不顯示錯誤資訊
-R或--recursive:遞歸處理,将指令目錄下的所有檔案及子目錄一并處理
-v或--verbose:顯示指令執行過程
3.2 八進制模式
$ chmod 760 newfile
$ ls -l newfile
-rwxrw---- 1 rich rich 0 Sep 20 19:16 newfile
$
八進制檔案權限會自動應用到指定的檔案上。
3.3 符号模式
與通常用到的3組三字元權限字元不同,chmod指令采用了另一種方法。下面是在符号模式下指定權限的格式。
[ugoa…][[+-=][rwxXstugo…]
- 第一組字元定義了權限作用的對象:
u代表使用者 g代表組 o代表其他 a代表上述所有
- 第二組的符号表示在現有權限基礎上增權重限(+),還是在現有權限基礎上移除權限(-),或是将權限設定成後面的值(=)。
- 第三組符合代表作用到設定上的權限
例子:X:如果對象是目錄或者它已有執行權限,賦予執行權限。 s:運作時重新設定UID或GID。 t:保留檔案或目錄。 u:将權限設定為跟屬主一樣。 g:将權限設定為跟屬組一樣。 o:将權限設定為跟其他使用者一樣。
不管其他使用者在這一安全級别之前都有什麼權限,$ chmod o+r newfile $ ls -lF newfile -rwxrw-r-- 1 rich rich 0 Sep 20 19:16 newfile* $
都給這一級别添加讀取權限。o+r
$ chmod u-x newfile $ ls -lF newfile -rw-rw-r-- 1 rich rich 0 Sep 20 19:16 newfile $
移除了屬主已有的執行權限。注意ls指令的-F選項,它能夠在具有執行權限的檔案名後加一個星号。u-x
options為chmod指令提供了另外一些功能。-R選項可以讓權限的改變遞歸地作用到檔案和子目錄。你可以使用通配符指定多個檔案,然後利用一條指令将權限更改應用到這些檔案上。
4. 改變所屬關系
4.1 chown
chown指令用來改變檔案的屬主,格式如下:
chown options owner[.group] file
可用登入名或UID來指定檔案的新屬主。
# chown dan newfile
# ls -l newfile
-rw-rw-r-- 1 dan rich 0 Sep 20 19:16 newfile
#
chown指令也支援同時改變檔案的屬主和屬組。
# chown dan.shared newfile
# ls -l newfile
-rw-rw-r-- 1 dan shared 0 Sep 20 19:16 newfile
#
可以隻改變一個目錄的預設屬組。
# chown .rich newfile
# ls -l newfile
-rw-rw-r-- 1 dan rich 0 Sep 20 19:16 newfile
#
如果Linux系統采用和使用者登入名比對的組名,可以隻用一個條目就改變二者。
# chown test. newfile
# ls -l newfile
-rw-rw-r-- 1 test test 0 Sep 20 19:16 newfile
#
chown指令采用一些不同的選項參數。-R選項配合通配符可以遞歸地改變子目錄和檔案的所屬關系。-h選項可以改變該檔案的所有符号連結檔案的所屬關系。
隻有root使用者能夠改變檔案的屬主。任何屬主都可以改變檔案的屬組,但前提是屬主必須是原屬組和目标屬組的成員。
4.2 chgrp
chgrp指令用來改變檔案的預設屬組。
$ chgrp shared newfile
$ ls -l newfile
-rw-rw-r-- 1 rich shared 0 Sep 20 19:16 newfile
$
使用者賬戶必須是這個檔案的屬主,除了能夠更換屬組之外,還得是新組的成員。現在shared組的任意一個成員都可以寫這個檔案了。這是Linux系統共享檔案的一個途徑。
5. References
《Linux指令行與shell腳本程式設計大全》Richard Blum Christine Bresnahan
http://man.linuxde.net/chmod