Linux

Linux ACL 檔案權限設定 setfacl、getfacl 指令使用教學與範例

介紹如何在 Linux 系統上使用 setfaclgetfacl 更改與查詢檔案 ACL 細部權限設定。

查看 ACL 權限

若要查看指定檔案或目錄的 ACL 權限設定,可以使用 getfacl 指令:

# 查看檔案 ACL 權限
getfacl myfile.txt
# file: myfile.txt
# owner: ubuntu
# group: ubuntu
user::rw-
group::rw-
other::r--

修改 ACL 設定

setfacl 在設定檔案或目錄的 ACL 權限時,可以透過以下的權限格式來指定 ACL 權限。

語法 說明 範例
u:使用者:權限 使用者權限 u:myuser:rx
user:使用者:權限 使用者權限(同上) user:myuser:rx
g:群組:權限 群組權限 g:mygroup:rx
group:群組:權限 群組權限(同上) group:mygroup:rx
o:權限 其他使用者權限 o:rx
other:權限 其他使用者權限(同上) other:rx
m:權限 有效權限 m:rx
mask:權限 有效權限(同上) mask:rx

若要修改檔案的 ACL 權限,可以使用 setfacl 搭配 -m--modify 參數,並指定 ACL 權限。例如授予 myuser 使用者讀取與執行(rx)權限:

# 授予 myuser 使用者 rx 權限
setfacl -m u:myuser:rx myfile.txt

授予 mygroup 群組讀取與執行(rx)權限:

# 授予 mygroup 群組 rx 權限
setfacl -m g:mygroup:rx myfile.txt

我們也可以透過 ACL 來禁止特定使用者存取檔案:

# 禁止 myuser 使用者存取
setfacl -m u:myuser:- myfile.txt

移除指定 ACL 權限

若要移除指定的 ACL 權限,可以使用 -x 參數,移除 ACL 權限時可不需要指定權限內容:

# 移除 myuser 使用者 ACL 權限
setfacl -x u:myuser myfile.txt

# 移除 mygroup 群組 ACL 權限
setfacl -x g:mygroup myfile.txt

清除所有 ACL 設定

如果想要清除指定檔案的所有 ACL 設定,可以使用 -b--remove-all 參數:

# 移除檔案所有 ACL 設定
setfacl -b myfile.txt

若要清除指定目錄中所有檔案或子目錄的任何 ACL 設定,可以再加上 -R--recursive 參數,以遞迴的方式移除 ACL 設定:

# 遞迴移除目錄下所有檔案所有 ACL 設定
setfacl -Rb myfolder

有效權限範圍

setfacl 可以搭配遮罩(mask)來設定 ACL 的有效權限範圍,任何人的 ACL 權限都不能超過此範圍,超過的部分都無效。

舉例來說,假設既有的檔案已經授予 myuser 使用者 rx 權限:

# 授予 myuser 使用者 rx 權限
setfacl -m u:myuser:rx myfile.txt

如果希望指定檔案對任何人都只開放讀取的權限,就可以這樣設定遮罩:

# 設定遮罩,只開放讀取權限
setfacl -m m:r myfile.txt

設定遮罩之後,超出遮罩範圍的權限就會失效:

# 查看檔案 ACL 權限
getfacl myfile.txt
# file: myfile.txt
# owner: ubuntu
# group: ubuntu
user::rw-
user:myuser:r-x                 #effective:r--
group::rw-                      #effective:r--
mask::r--
other::r--

當遮罩設定之後,會顯示每個 ACL 權限設定的有效權限,這裡的 effective:r-- 就代表有效的權限只有讀取而已。

繼承 ACL 設定

如果希望在特定目錄之下,所有新建立的檔案都可以自動繼承特定的 ACL 權限設定,可以在目錄上加上預設的 ACL 權限,預設 ACL 權限的表示法就是在一般 ACL 權限之前加上 d:default:

# 設定目錄預設 ACL 權限
setfacl -m d:u:myuser1:rx myfolder
setfacl -m d:u:myuser2:rx myfolder

設定好預設 ACL 權限之後,在目錄中建立的新檔案就會自動繼承這些 ACL 權限:

# 建立新檔案
touch myfolder/myfile.txt

# 查看檔案 ACL 權限
getfacl myfolder/myfile.txt
# file: myfolder/myfile.txt
# owner: ubuntu
# group: ubuntu
user::rw-
user:myuser1:r-x                #effective:r--
user:myuser2:r-x                #effective:r--
group::rwx                      #effective:rw-
mask::rw-
other::r--

若要清除預設的 ACL 權限設定,可以使用 -k--remove-default 參數:

# 移除預設 ACL 權限設定
setfacl -k myfolder

複製 ACL 設定

若要將 file1 的 ACL 權限設定複製到 file2,可以使用以下指令:

# 複製 ACL 權限設定
getfacl file1 | setfacl --set-file=- file2

若要將 myfolder 目前的 ACL 權限設定,直接設定為預設的 ACL 權限,讓以後新增的檔案自動繼承,可以執行以下指令:

# 將目前 ACL 權限設定為預設 ACL 權限
getfacl --access myfolder | setfacl -d -M- myfolder

參考資料

Share
Published by
Office Guide

Recent Posts

Python 使用 PyAutoGUI 自動操作滑鼠與鍵盤

本篇介紹如何在 Python ...

1 年 ago

Ubuntu Linux 以 WireGuard 架設 VPN 伺服器教學與範例

本篇介紹如何在 Ubuntu ...

1 年 ago

Linux 網路設定 ip 指令用法教學與範例

本篇介紹如何在 Linux 系...

1 年 ago

Linux 以 Cryptsetup、LUKS 加密 USB 隨身碟教學與範例

介紹如何在 Linux 系統中...

1 年 ago