2021年1月6日 星期三

Linux 檔案權限

因為 Linux 是多人多工的 OS, 所以, 檔案系統必須要有一套嚴密的保護措施, 以免, 因為有意或無意的人為破壞, 造成混亂及損失.

. Linux 將檔案分成三種身份、四種權限:

三種身份是:

  • u: 自己(user)
  • g: 和自己同一組的人(group)
  • o: 其它人 (other)

而 a 則是代表所有的人.

每種身份皆有四種可能的權限:

  • r : 讀取權 (read)
  • w : 寫入權 (write)
  • x :執行權 (execute)

及: (上面這三種權限用得最多, 以下則較少用, 也請儘量不使用, 除非你確實知道你在做啥麼?!)

  • s : set user id / set group id 及 t : sticky bit (簡稱為 sst 模式)
    4000 : set user id, 2000 set group id, 1000 set sticky bit

Linux 用 9 個 bits 來代表檔案的權限, 如下所示:

-- - -- - -- -
-rwxrwxrwx
 擁有人同組人其它人

每三個形成一組, 由左至右, 分別代表擁有人、同組人、其它人的權限.

每一組的三個位置, 由左至右為: 讀取,寫入,執行的權限, 若該位置只有一條線, 則表示不具有該權限.

另外, 我們也用數字來代表不同的權限:

  • 讀取: 4
  • 寫入: 2
  • 執行: 1

如果某檔, 其擁有的權限為 rwx 的話, 那麼, 我們便把它們所代表的數字大小加起來, 即 4+2+1 =7

以下是可能的組合:

---0
--x1
-w-2
r--4
-wx2+1=3
r-x4+1=5
rw-4+2=6
rwx7

因為所有可能的組合, 其權限大小僅 0 ~ 7的範圍,

所以, 我們也將它視為一種八進位的數字系統, 並且常常用數字來表示某一個檔案的權限開放的程度.

例子:

            擁                       
檔          有                               
案          檔                              
種          案                   檔案大小 最近修改的
類 檔案權限 數 擁有人   組別    (byte單位)日期及時間   檔案名稱

drwx--x--x  7 kv   kv    4096  2月  3 14:25 .
drwxr-xr-x  7 root root  4096  2月  1 11:56 ..
-rw-------  1 kv   kv      10  2月  3 14:25 .bash_history
-rw-r--r--  1 kv   kv      24  2月  1 11:50 .bash_logout
-rw-r--r--  1 kv   kv     191  2月  1 11:50 .bash_profile
-rw-r--r--  1 kv   kv     124  2月  1 11:50 .bashrc
-rw-r--r--  1 kv   kv     238  2月  1 11:50 .emacs
-rw-------  1 kv   kv      88  2月  1 21:27 .forward
-rw-r--r--  1 kv   kv     120  2月  1 11:50 .gtkrc
drwxr-xr-x  2 kv   kv    4096  2月  3 14:19 html
drwxr-xr-x  3 kv   kv    4096  2月  1 11:50 .kde
drwx------  2 kv   kv    4096  2月  1 12:36 mail
drwx------  8 kv   kv    4096  2月  1 12:34 .openwebmail
-rw-------  1 kv   kv   12288  2月  1 21:27 .vacation
-rw-------  1 kv   kv     329  2月  1 21:27 .vacation.msg
drwxr-xr-x  2 kv   kv    4096  2月  3 14:23 webdisk

以上圖為例:

webdisk是一個普通的資料夾檔案, 其擁有人是 kv, 組別是kv, 該檔案的權限是:

  • 擁有人: 可讀,可寫,可執行
  • 同組人: 可讀,可執行 (但不可寫)
  • 其它人: 可讀,可執行 (但不可寫)

用八進位數字來表示, 該檔權限為: 755

試問: 以下權限其對應的八進位數字是多少?

rwx--x--x 
r--r--r-- 
rw-rw-rw- 
--x--x--x 
rwxrwxrwx 
r-xr-xr-x 

試問: 以下八進位數字其對應的權限為何?

611 
755 
666 
544 
733 
634 

 

2. 改變權限的方法.

有兩種改變檔案權限的方法:

  • 八進位數字模式
  • 符號模式

使用的指令是: chmod (change mode : change the access permissions of files)

方法如下:

chmod  權限  檔案/目錄

例:

  • chmod 666 myfile
  • chmod 777 myfile
  • chmod 755 myfile
  • chmod 111 myfile

以上是採八進位數字模式

  • chmod u+x myfile
  • chmod u-x myfile
  • chmod ug+x myfile
  • chmod g-x myfile
  • chmod o+x myfile
  • chmod o-x myfile
  • chmod a+x myfile
  • chmod a-x myfile
  • chmod a=x myfile
  • chmod u=wr myfile
  • chmod go=rx myfile

以上是採符號模式.

+ 表增加該種權限

- 表去掉該種權限

= 表設定作該種權限

3. 目錄的權限.

目錄的權限, 觀念及設法, 同於檔案的權限, 但其包含的意義則大不相同.

以 "可執行的" 這個權限而言, 對檔案來說, 若該檔設為可執行的話, 其意義很容易了解, 但如果將目錄設為可執行, 那麼難道目錄真的是可以執行的嗎? :-Q

當然不是.

Linux 對於目錄的權限, 另有一套看法:

r可列出目錄中的檔案名稱, 即 ls 有作用
w在該目錄中, 可刪檔,改檔名,建新檔
x可以進入該目錄之中(重要觀念, 用處大)

如果某一個目錄下, 尚有許多檔案和子目錄, 有無方法可以一次改變所有的檔案權限呢?

當然有.

chmod -R 權限 目錄名稱

其中 -R 表示 Recursively change permissions of directories and their contents, 意即遞迴地將其下的所有檔案、目錄全數改變.

4. 改變檔案的擁有者(owner) 或 組別 (group)

通常這只有 root 等級的使用者, 才有此項權力. (否則就天下大亂了! 不過, 某些 Uuix clone 開放有限制的作法)

方法如下:

chown [-R] owner:group 檔案/目錄

例:

chown -R 3slo:hacker /home/ols3

 

5. umask(檔案的安全濾網).

什麼是 umask ? umask 是在新建立一個檔案或目錄時, 檔案權限的遮罩值.

其運作方式是: 將系統的預設值減去 umask 值, 就是最後檔案/目錄的權限.

一般而言, 新建檔案的預設值是 666, 新建目錄的預設值是 777, 如果 umask 定為 022,

那麼一個新的檔案建立時, 其真正的權限應該是 666-022=644

新的目錄建立時, 其權限則是 777-022=755

有了 umask 的話, 新建的檔案及目錄, 會比較安全一點.

如何得知目前的 umask 值是多少呢?

下 umask


資料來源: http://s2.naes.tn.edu.tw/~kv/file.htm 


沒有留言: