2007年9月11日 星期二

檔案權限的應用 -2(Application of Permission -2)

昨天,我說明了有關WINDOWS的檔案權限,今天就針對LINUX來稍做介紹吧!

其實我一開始就有說過,WINDOWS與LINUX的檔案權限原本就有點類似,除了在安全性(預設值)的差別之外,不過...因為WINDOWS對於圖形介面還是比文字介面人性化一點(就像玩LINUX的人用它的圖形化設定,有時也會霧煞煞一樣)。

所以在LINUX上的檔案權限設定,筆者就會以文字模式來做介紹,如有遺漏之處,還請大家留言或指正(最近一直被網友們抓到發現自己的疏忽...ORZ),不過這一篇文章會比較類似我去上LPI課時的筆記,所以會比較「生硬」一些!

檔案權限的觀念:
1.不是繼承的模式(跟WINDOWS系統的預設值不同)。
2.每個權限都是獨立的(可寫入不代表可讀取)。
3.管理員(SUPER USER = root)有絕對的權限。

LINUX的檔案格式:共有十個欄位(特殊權限外,其餘為三個一組)
       3
        ↓
例:-rw-r--r--(為了標示方便,故以全型表示)
  ↑  ↑      ↑
  1 2     4

欄位說明:
1.檔案類型:用來標示該檔案或資料夾種類。
 (-:一般檔案、d:資料夾、l:連結資料)
2.擁有者的權限:用來設定此檔案或資料夾擁有者的權限。
3.擁有群組的權限:用來設定此檔案或資料夾擁有群組的權限。
4.其它人的權限:用來設定此檔案或資料夾給其它人的權限。

其中,對於檔案權限的設定方式以二進位(1、2、4)或文字(r、w、x)代表

說明:
1.二進位:1=執行、2=寫入、4=讀取
2.文字法:x=執行、w=寫入、r=讀取

 rwx = 4+2+1=7
 rw- = 4+2+0=6
 r-x = 4+0+1=5
 r-- = 4+0+0=4
 -wx = 0+2+1=3
 -w- = 0+2+0=2
 --r = 0+0+1=1
 --- = 0+0+0=0
          5
           ↓
實例:  -rwxr-x--x
      ↑  ↑      ↑
 二進位:0  7     1

說明: 特殊權:無
    使用者:有讀取、寫入和執行的權限
   使用群組:有讀取和執行的權限
    其它人:有執行的權限

對於檔案、資料夾都具備權限的觀念,可是意義上卻有很大的不同之處:

         檔案(FILE)   資料夾(DIR.)
  -------------------------
    r │   可讀取   │  只能讀檔名  │
  ----│---------│---------│
    w │   可寫入   │  能搬移目錄  │
  ----│---------│---------│
    x │   可執行   │  能進入目錄  │
  ----│---------│---------│

變更權限的指令:chmod
用法:chmod 777 test(改變test檔案成全部人都能讀取、寫入和執行)
   chmod g+w test(針對test檔案的群組,加入寫入的權限)
   chmod ugo+w test(test檔案的擁有者、群組和其它人都加入寫入權限)

變更擁有者/群組的指令:chown/chgrp
用法:chown test file(改變file的擁有者為test)
   chgrp test file(改變file的群組為test)
   chown test.test file(改變file的擁有者和群組皆為test)

說明:在LINUX中檔案預設有擁有者、群組兩種特性,兩者間可用「.」區隔。

特殊權限說明:實例可參考(#ls -al /usr/bin/passwd)

      setgid
       ↓
例:-rwsr-xr-x 1 root root ... /usr/bin/passwd
    ↑      ↑
   setuid    sticky

特殊權限:(加在原有權限上)
     111   111   111   111
    特殊權限   擁有者   群組    其它人
            u     g     o
    小寫      s     s     t(原有x權限)
    大寫      S     S     T(原無x權限) 

例:chmod 4766 file(file的u、g和o權限中都加上特殊權限)
  =chmod u+s file(原有x權限)
   chmod g+S file(原無x權限)
   chmod o+T file(原無x權限)

特殊權限說明:
           檔案(FILE)        資料夾(DIR.)
 ------------------------------------
 setuid │暫時切換該執行檔擁有者│      系統會忽略     │
 -------│-----------│----------------│
 setgid │暫時切換該執行檔的群組│建立檔案的擁有群組會與該目錄相同│
 -------│-----------│----------------│
 sticky │與上述相同(系統忽略)│其它人不能夠刪除不屬於自己的檔案│
 -------│-----------│----------------│

遮罩說明系統內建的umask=022(例:test建立一個檔案與資料夾)

系統中預設權限:檔案=666、資料夾=777
加上系統的遮罩:umask=022

預設建立值:檔案=644、資料夾=755(不是666-022=644或777-022=755!)

其實加上遮罩的方式,是運算後的結果:
 
   defalut│ 0 │ 0 │ 1 │ 1 │
  --------│---│---│---│---│
    umask │ 0 │ 1 │ 0 │ 1 │
  --------│---│---│---│---│
     end  │ 0 │ 0 │ 1 │ 0 │

例:檔案=666、umask=022

  default  110(6) 110(6) 110(6)

  umask  000(0) 010(2) 010(2)
-----------------------------
  End   110    100    100  
  數值  4+2=6  4+0=4  4+0=4

不知道經過筆者冗長的解說之後,對於LINUX的檔案權限有沒有更瞭解一點(老實說!除非真的有需要的人才會來看吧!?),我知道對一般人來說這些真的太過生澀,但是...這就是LINUX的檔案權限

我在內文中,也有一些外部的連結,是原文的相關說明,有興趣的人也可參照一番!說不定我又有那兒寫錯了!還請大家不吝指教(最近寫啥都有點怕怕的...),謝謝!