Linux 檔案權限

前言

Linux 是一個多用戶的操作系統,在眾多的使用場景中,每個用戶都有可能會對檔案進行增刪與修改,如果都給予用戶最高權限,勢必會出現重要的系統檔案被誤刪的情況,或者試想某個用戶遭到駭客盜用,駭客就能在系統上為所欲為,刪光所有檔案,不對檔案進行保護對於系統來說是個災難,因此對於每個檔案、用戶設定權限格外重要。

本文將會介紹Linux 系統中,針對檔案的權限如何修改及設定。

檔案的所有權 (所有者、群組)

每個檔案都有2種類型的所有權 (ownership)

  • user : 擁有者
  • group : 擁有群組

修改檔案的擁有者 (chown)

只有文件擁有者、系統管理員帳號可以修改

chown 新的擁有者 檔名

例如 : chown austin72905 test-right

chown -R : 會對該目錄裡面所有的檔案進行遞歸修改權限

修改檔案的擁有群組 (chgrp)

只有文件擁有者、系統管理員帳號可以修改

chgrp 新的擁有全組 檔名

例如 : chown austin72905 test-right

檔案權限

只有文件擁有者、系統管理員帳號可以修改

每個檔案有 3 種類型的權限

  • r : 讀,沒有此權限無法 ls 查看目錄裡的文件
  • w : 寫,沒有此權限無法修改、刪除檔案
  • x : 執行,沒有此權限無法cd 進入該目錄

3 種權限針對不同的對象

  • u : 擁有者 (user)
  • g : 擁有群組 (group)
  • o : 其他人 (other),系統上其他的一般使用者

如何查看檔案權限 ?

使用ls -l 可以看到 類似於 drwxr-xr-x 的一串英文字共10個字符,把它拆成 1、3、3、3 的方式查看

檔案類型 擁有者權限 擁有群組權限 其他人權限
d rwx r-x r-x

由上方範例可知該檔案

  • 是一個目錄
  • 擁有者權限 : 讀、寫、執行
  • 擁有群組權限 : 讀、執行 (-代表沒有該權限)
  • 其他人權限 : 讀、執行 (-代表沒有該權限)

修改檔檔案權限 (chmod)

使用 +-

針對對象u、g、o,加上或減少+-,讀寫執行權限rwx

chmod (ugo)(+-)(rwx) 檔名

給檔案的 擁有者 去掉 權限

chmod u-w 檔名

給檔案 的 擁有者 加上 執行 權限

chmod u+rw 檔名

給檔案 的 擁有者、擁有群組 加上 執行 權限

chmod ug+rw 檔名

使用 數字

修改順序為 ugo

代表數字

  • 4 : r

  • 2: w

  • 1: u

所以要給一個檔案的擁有者 讀+寫 權限 4+2 = 6,給0就是關掉該權限,其他的數字都是由這三個數字相加而來

chmod 600 檔名

上面的範例 擁有者 有 讀+寫 權限 (4+2),擁有群組、其他人完全沒有權限 (0)

還有一個常見範例,權限全開
chmod 777 檔名

chmod -R : 會對該目錄裡面所有的檔案進行遞歸修改權限

針對特定用戶 or 特定群組設定權限 (ACL)

運行級別比 檔案權限還高

假設只想要給某個用戶有讀寫的權限,一般用戶只有讀權限,就可以使用ACL,給予單獨的用戶或群組設定權限

設定權限 (setfacl)

(set file acl)

setfacl -m u:用戶名:權限 檔名

setfacl -m g:群組名:權限 檔名

例如

setfacl -m u:test:rw test-right

setfacl -m g:test:rw test-right

針對目錄和 子目錄 跟 子文件 遞歸設定

setfacl -Rm u:用戶名:權限 檔名

刪除某個用戶的權限 (-x)

setfacl -x u:用戶名 檔名

刪除所有的acl 權限 (-b)

setfacl -b 檔名

獲取權限 (getfacl)

(get file acl)

getfacl 檔名

未設定前

# file: 檔名
# owner: 擁有者
# group: 擁有群組
user::rw-
group::r--
mask::r--
other::r--

設定後,會發現多個一個特別用戶的權限

# file: 檔名
# owner: 擁有者
# group: 擁有群組
user::rw-
user:特別用戶:rw-
group::r--
mask::r--
other::r--

mask作用

  • mask 表示在 ACL 中的使用者權限或群組權限的最大權限值,用於限制 ACL 權限的有效性

  • mask 的值在設置 ACL 時會自動計算,通常不需要手動更改。

  • 雖然 擁有者 和群組 本來應該有讀取和寫入權限(rw-),但由於 mask 設置為 r–,所以實際有效的權限為 r–,即只有讀取權限。


Linux 檔案權限
https://austin72905.github.io/2023/07/31/linux-file-access/
作者
Austin Lin
發布於
2023年7月31日
許可協議