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–,即只有讀取權限。