介紹如何在 Linux 系統上使用 setfacl 與 getfacl 更改與查詢檔案 ACL 細部權限設定。
查看 ACL 權限若要查看指定檔案或目錄的 ACL 權限設定,可以使用 getfacl 指令:
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 )權限:
setfacl -m u:myuser:rx myfile.txt 授予 mygroup 群組讀取與執行(rx )權限:
setfacl -m g:mygroup:rx myfile.txt 我們也可以透過 ACL 來禁止特定使用者存取檔案:
setfacl -m u:myuser:- myfile.txt 移除指定 ACL 權限若要移除指定的 ACL 權限,可以使用 -x 參數,移除 ACL 權限時可不需要指定權限內容:
setfacl -x u:myuser myfile.txt
setfacl -x g:mygroup myfile.txt 清除所有 ACL 設定如果想要清除指定檔案的所有 ACL 設定,可以使用 -b 或 --remove-all 參數:
setfacl -b myfile.txt 若要清除指定目錄中所有檔案或子目錄的任何 ACL 設定,可以再加上 -R 或 --recursive 參數,以遞迴的方式移除 ACL 設定:
setfacl -Rb myfolder 有效權限範圍setfacl 可以搭配遮罩(mask)來設定 ACL 的有效權限範圍,任何人的 ACL 權限都不能超過此範圍,超過的部分都無效。
舉例來說,假設既有的檔案已經授予 myuser 使用者 rx 權限:
setfacl -m u:myuser:rx myfile.txt 如果希望指定檔案對任何人都只開放讀取的權限,就可以這樣設定遮罩:
setfacl -m m:r myfile.txt 設定遮罩之後,超出遮罩範圍的權限就會失效:
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: :
setfacl -m d:u:myuser1:rx myfolder
setfacl -m d:u:myuser2:rx myfolder 設定好預設 ACL 權限之後,在目錄中建立的新檔案就會自動繼承這些 ACL 權限:
touch myfolder/myfile.txt
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 參數:
setfacl -k myfolder 複製 ACL 設定若要將 file1 的 ACL 權限設定複製到 file2 ,可以使用以下指令:
getfacl file1 | setfacl --set-file=- file2 若要將 myfolder 目前的 ACL 權限設定,直接設定為預設的 ACL 權限,讓以後新增的檔案自動繼承,可以執行以下指令:
getfacl --access myfolder | setfacl -d -M- myfolder
|