• 跳至主要導覽
  • 跳至主要內容
  • 跳至主要資訊欄
Office 指南

Office 指南

辦公室工作實用教學

  • Excel
  • Word
  • PowerPoint
  • Windows
  • PowerShell
  • R

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

介紹如何在 Linux 系統上使用 setfacl 與 getfacl 更改與查詢檔案 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

參考資料

  • LinuxConfig.org:How to manage ACLs on Linux
  • 鳥哥的 Linux 私房菜:Linux 帳號管理與 ACL 權限設定

分類:Linux

主要資訊欄

搜尋

近期文章

  • Python 使用 PyAutoGUI 自動操作滑鼠與鍵盤
  • Ubuntu Linux 以 WireGuard 架設 VPN 伺服器教學與範例
  • Linux 網路設定 ip 指令用法教學與範例
  • Windows 使用 TPM 虛擬智慧卡保護 SSH 金鑰教學與範例
  • Linux 以 Shamir’s Secret Sharing 分割保存金鑰教學與範例
  • Linux 以 Cryptsetup、LUKS 加密 USB 隨身碟教學與範例
  • Linux 以 Cryptsetup 與 LUKS 加密磁碟教學與範例
  • Linux 使用 age 簡潔的加密、解密工具使用教學與範例

推薦網站

  • Udemy 線上教學課程
  • Coursera 線上教學課程

關注本站

  • 電子郵件
  • Facebook

公益

  • 家扶基金會
  • 台灣世界展望會
  • Yahoo 奇摩公益
  • igiving 公益網
  • 兒福聯盟

Copyright © 2021 · Office Guide