setfacl 命令設置ACL權限。getfacl 命令用於顯示文件上設置的 ACL 信息。
ACL( Access Control List (訪問控制列表))提供的是在所有者、所屬組、其他人的讀/寫/執行權限之外的特殊權限控制。通俗來講,基於普通文件或目錄設置 ACL 其實就是針對指定的用戶或用戶組設置文件或目錄的操作權限。
getfacl命令格式
getfacl [參數] [目標文件名]
一般用到的參數有以下幾種
參數 | 作用 |
---|---|
a | 僅顯示文件acl |
d | 僅顯示默認的acl |
R | 遞歸顯示子目錄acl |
setfacl命令格式
setfacl [參數] [ugm]:[用戶名]:[rwx] [目標文件名]
第二欄參數,u代表用戶,g代表群組,而使用m參數可修改最大有效訪問權限
setfacl參數
參數 | 作用 |
---|---|
m | 設置acl參數,不可與-x合用 |
x | 刪除acl參數 |
b | 刪除全部的acl參數 |
R | 針對目錄設置acl權限,其子目錄會繼承其權限,需要與m、x等結合使用 |
d | 為目錄添加默認acl,需要與m結合使用 |
k | 刪除默認的acl參數 |
下面對一些常用命令進行展示
用於測試的用戶:root、wang
用於測試的樣例文件關系
- ~
- testsetfacl
- test
- testfacl.txt
- testsetfacl
獲取testsetfacl的acl權限
[root@master ~]# getfacl testsetfacl
# file: testsetfacl 文件名
# owner: root 文件所有者,ls -l 第三列信息
# group: root 文件所屬群組, ls -l 第四列信息
user::rwx 所有者權限
group::r-x 所屬群組權限
other::r-x 其他用戶權限
查看用戶wang的權限
[root@master ~]# su wang
[wang@master root]$ cd testsetfacl 可以進入testsetfacl文件
[wang@master testsetfacl]$ exit
修改wang用戶的權限為0
[root@master ~]# setfacl -Rm u:wang:--- testsetfacl
[root@master ~]# getfacl -R testsetfacl
# file: testsetfacl
# owner: root
# group: root
user::rwx
user:wang:--- #增加了此行,權限為0
group::r-x
mask::r-x
other::r-x
# file: testsetfacl/test
# owner: root
# group: root
user::rwx
user:wang:---
group::r-x
mask::r-x
other::r-x
# file: testsetfacl/testsetfacl.txt
# owner: root
# group: root
user::rw-
user:wang:---
group::r--
mask::r--
other::r--
切換到wang用戶,執行cd命令,wang用戶已經不能進入testsetfacl目錄
嘗試修改預設acl
[root@master ~]# setfacl -dm u:wang:rwx testsetfacl
[root@master ~]# getfacl -R testsetfacl
# file: testsetfacl
# owner: root
# group: root
user::rwx
user:wang:---
group::r-x
mask::r-x
other::r-x
default:user::rwx #testsetfacl增加了五行default
default:user:wang:rwx #即預設acl,在其下創建子目錄
default:group::r-x #會繼承預設acl,
default:mask::rwx
default:other::r-x
# file: testsetfacl/test
# owner: root
# group: root
user::rwx
user:wang:---
group::r-x
mask::r-x
other::r-x
# file: testsetfacl/testsetfacl.txt
# owner: root
# group: root
user::rw-
user:wang:---
group::r--
mask::r--
other::r--
測試目錄文件繼承效果
[root@master ~]# cd testsetfacl
[root@master testsetfacl]# mkdir testd
[root@master testsetfacl]# getfacl testd
# file: testd
# owner: root
# group: root
user::rwx
user:wang:rwx
group::r-x
mask::rwx
other::r-x
default:user::rwx
default:user:wang:rwx
default:group::r-x
default:mask::rwx
default:other::r-x
#創建的目錄完全繼承了testsetfacl的預設acl
#注意,若文件夾或文件在增加預設acl前就已經創建,則其不會繼承
#預設acl,其子文件及目錄也不會繼承。
測試一般文件繼承效果
[root@master testsetfacl]# touch test.txt
[root@master testsetfacl]# getfacl test.txt
# file: test.txt
# owner: root
# group: root
user::rw-
user:wang:rwx #effective:r--
group::r-x #effective:r--
mask::r--
other::r--
#一般文件則只繼承群組和特定用戶acl,其他權限則和
#沒有acl的情況下創建文件的權限一樣
從以上命令結果可以看到增加了effective一欄信息,實際上是與mask一行權限有關。mask一行即為最大有效訪問權限,作用是控制文件的訪問權限,其他用戶或組設定ACL實際權限都是與mask最大有效權限相與的結果。test.txt 文件的mask權限為 :r-- 。group和指定用戶wang 的權限雖為 r-x、rwx,但與 r-- 相與運算后 ,均為 r–。只能讀取test.txt。
修改默認mask權限可通過以下命令。
setfacl -Rm m:--- testsetfacl