天天看點

Linux檔案權限筆記Linux檔案權限

文章目錄

  • 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個安全級别:

  • 對象的屬主
  • 對象的屬組
  • 系統的其他使用者
Linux檔案權限筆記Linux檔案權限

例子:

-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。下表列出了可

能會遇到的組合。

Linux檔案權限筆記Linux檔案權限

八進制模式先取得權限的八進制值,然後再把這三組安全級别(屬主、屬組和其他使用者)的八進制值順序列出。是以,八進制模式的值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
    $
               

    u-x

    移除了屬主已有的執行權限。注意ls指令的-F選項,它能夠在具有執行權限的檔案名後加一個星号。

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

繼續閱讀