Contents

Linux - ACL 多帳號權限控管

Linux 最早設計時僅能對 user 及 group 對檔案或是目錄進行控管,不過這勢必會有一些問題,如一個群組內有 N 個人都可以訪問 example 檔案,惟群組內 John 要禁止他訪問,除了將他移出群組之外就沒有別的方式了,故 ACL 誕生解決上述問題。

1. ACL 介紹

ACL 全名 Access Control Lists , 在 Linux 常使用的權限控制工具 chmod 可以對 user 、group 、other 進行管理, ACL 可以針對某個 user 、 group 做更細緻的管理。

1.1 基本權限

Linux 不同的帳號、角色對於目錄及檔案有以下三種種類:

  • User (or user owner)
  • Group (or owner group)
  • Other (everyone else)

擁有者可以依不同執行權限進行控管《 R、W、X 》:

  • Read
  • Write
  • eXecute

1.2 是否啟用 ACL

在 RHEL 系列的 XFS 檔案系統中已經預設啟用 ACL ,不過在 EXT 系列檔案系統需要額外設定才能使用,最常見的方式就是在 /etc/fstab 掛載 ext 檔案系統加上 acl 參數,範例如下:

1
/dev/vdb1       /mnt    ext4    defailts,acl    0 0

1.3 哪些檔案/目錄已經使用 ACL 權限控管?

在檔案權限最後面顯示為 + 表示使用 ACL 權限管理,而一般的權限管理檔案後面顯示為 .

1
2
3
4
[root@servera ~]# ls -l
total 4
-rwxr--r--+ 1 root root    0 Feb 11 09:59 acl-example
-rw-------. 1 root root 1331 Feb 10 12:53 anaconda-ks.cfg

2. ACL 基本用法

2.1 查看檔案權限

1
getfacl <file>/<dir>
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
[root@servera ~]# getfacl acl-example 
# file: acl-example
# owner: root
# group: root
user::rwx
user:test1:---
group::r--
group:tests:r--
mask::r--
other::r--

2.2 修改檔案/目錄權限

參數一 參數二 參數三
u <user name> r
g <group name> w
o <省略> x
-
1
setfacl -Rm   $arg1:$arg2:$arg3 <file>/<dir>
Note
-R 與 chmod 功能一樣,表示遞迴,將該目錄下所有檔案目錄統一配置權限

舉例 : example 檔案 user 及 group 都為 root , 其它人都不能訪問, 新增 test1 使用者有 r、w 權限, tests 群組有 r 權限

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
# 設定 other 沒有任何權限
[root@servera tmp]# setfacl -m  o::- example
# 設定 test1 帳號有 rw 權限
[root@servera tmp]# setfacl -m u:test1:rw example
# 設定 tests 群組有 r 權限
[root@servera tmp]# setfacl -mv g:tests:r example
# 查看 acl
[root@servera tmp]# getfacl example 
# file: example
# owner: root
# group: root
user::rw-
user:test1:rw-
group::r--
group:tests:r--
mask::rw-
other::---

2.3 修改目錄預設權限 (Default)

此功能可以限定在該目錄底下所創建的檔案預設帳號歸屬哪一個權限

參數一 參數二 參數三
u <user name> r
g <group name> w
o <省略> x
-
1
setfacl -m   d:$arg1:$arg2:$arg3 <file>/<dir>

舉例 : file 目錄 user、group 均為 root , test3 使用者是沒有任何權限、tests 群組創建的檔案都有 rwx 權限,另外 other 擁有 rwx 權限。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
[root@servera tmp]# setfacl -Rm d:u:test3:- file/
[root@servera tmp]# setfacl -Rm d:g:tests:rwx file/
[root@servera tmp]# getfacl file/
# file: file/
# owner: root
# group: root
user::rwx
group::r-x
other::rwx
default:user::rwx
default:user:test3:---
default:group::r-x
default:group:tests:rwx
default:mask ::rwx
default:other::r-x

切換至 test3 使用並嘗試創建檔案,是會自動被禁止的

1
2
3
[test3@servera ~]$ cd /tmp/test
[test3@servera test]$ touch test3-file
touch: cannot touch 'test3-file': Permission denied
Tip
-R 參數需注意與 chmod 工具一樣,如果希望某些不應該提升為 x (執行) 權限檔案,可以使用 大寫的 X,僅會提升本來就有 x (執行) 權限,詳細請參考 chmod 這篇文章

3. ACL 延伸

3.1 移除指定 ACL

參數一 參數二
u <user name>
g <group name>
o
1
setfacl -x $arg1:$arg2 <file>/<dir>

3.2 移除 Defult ACL

1
setfacl -k  <dir>

3.3 移除全部 ACL

1
setfacl -b  <file>/<dir>

4. 小結

ACL 不一定會用到,不過只要熟悉 ACL 操作方式,對於多個角色要進行管理可是非常的方便。



如果你還沒有註冊 Like Coin,你可以在文章最下方看到 Like 的按鈕,點下去後即可申請帳號,透過申請帳號後可以幫我的文章按下 Like,而 Like 最多可以點五次,而你不用付出任何一塊錢,就能給我寫這篇文章的最大的回饋!