『學了就忘』Linux許可權管理 — 53、ACL許可權詳解
- 2021 年 11 月 29 日
- 筆記
- 測試基礎必會技能 - Linux系統
前面我們之前說過,Linux系統的許可權分為六種。有讀寫執行的基本許可權,umask
默認許可權。
今天我們來說一下ACL許可權。
提示:每一個文件,只能有一個所有者,只能有一個所屬組,剩下的都是other(其他人)。
1、什麼是ACL許可權
比如我是一個老師,創建可一個共享文件夾,這個文件夾的所有者肯定是我,我把所有的學生都加入到一個組裡,把文件夾的所屬組定義到學生組。這樣我就能夠分別定義我操作文件夾的許可權,和學生對文件夾的操作許可權,和其他人(其他班的同學)對文件夾的操作許可權。但是如果我的班級要有試聽同學,試聽同學對文件夾的操作許可權和班中同學的許可權肯定要不同。就會出現下面的情況。
- 如果定義所有者為試聽同學,肯定不行。
第一,我創建的文件夾,我已經是所有者了,雖然可以改,但是感覺會非常混亂。
第二,一個文件的所有者只能有一個,而試聽同學可能會有多個。 - 如果試聽同學定義成other(其他人),肯定不行。
因為試聽同學能看了,那其他班級的同學也就能看了。 - 如果試聽同學定義成所屬組,這樣也不行。
因為要求試聽同學要有一定的對文件夾操作的許可權,但是和班級的正式同學要有區別。
這時就會發現用戶對文件的身份不夠用了,這就需要用到ACL許可權了。
ACL概述:ACL是用於解決用戶對文件身份不足的問題的。
上邊的描述如下圖:
2、開啟ACL
# dumpe2fs命令是查詢指定分區詳細文件系統資訊的命令
[root@localhost ~]# dumpe2fs -h /dev/sda3
選項:
-h 僅顯示超級塊中資訊,而不顯示磁碟塊組的詳細資訊。
/dev/sda3
文件內容,如下圖:
這就表示Linux分區支援ACL許可權。默認開啟,查看一下,以防萬一。
如果沒有開啟,手工開啟分區的ACL許可權。
# 重新掛載根分區,並掛載加入acl許可權。(臨時生效)
[root@localhost ~]# mount -o remount,acl /
也可以通過修改/etc/fstab
文件,永久開啟ACL許可權。(永久生效)
注意:
/etc/fstab
文件要慎重修改,改錯了,系統可能啟動不了。
# 加入acl
[root@localhost ~]# vi /etc/fstab
UUID-c2ca6f57-b15c-43ea-bca0-f239083d8bd2 / ext4 defaults,acl(在/目錄的該位置添加上acl) 1 1
# 重新掛載文件系統或重啟動系統,使修改生效
[root@localhost ~]# mount -o remount /
3、ACL許可權的相關命令
(1)設定ACL許可權
[root@localhost ~]# setfacl [選項] 文件名
選項:
-m
:設定ACL許可權-b
:刪除ACL許可權-x
:刪除單個用戶的ACL許可權
例如:設置ACL許可權給用戶。
# 格式:
[root@localhost ~]# setfacl -m u:用戶名:許可權(數字和字母都行) 文件名
# 示例
[root@localhost ~]# setfacl -m u:st:5 /www/
查看一下/www/
文件夾,如下圖所示:
(2)查詢文件的ACL許可權
執行命令:[root@localhost ~]# getfacl 文件名
結果如下圖所示:
第一行有一個報錯,錯誤是說不識別左側的/
(根目錄標識),他推薦進入到根目錄,用相對路徑的方式進行查看。這個報錯並不影響我們查看結果,可以忽略。
說明欄位含義:
# file:www
:文件名。#owner: sc
:所有者。# group:tg
:所屬組。user::rwx
:所有者許可權。user:st:r-x
:這裡就是文件的ACL許可權。group::rwx
:所屬組許可權。mask::rwx
:最大有效許可權。other::--
:其他人許可權。
(3)設置文件ACL許可權給用戶組
# 命令格式
[root@localhost ~]# setfacl -m g:組名:許可權 文件名
# 示例
[root@localhost ~]# setfacl -g u:st:5 /www/
(4)給文件夾和裡邊的文件同時賦予ACL許可權
[root@localhost ~]# setfacl -m u:st:5 -R /www/
選項:-R
:遞歸
注意:賦予遞歸ACL許可權,只能賦予目錄。也就是說
# setfacl -m u:st:5 -R /www/
最後的/www/
位置,一定要是文件夾,不能是文件。
如果文件被賦予了ACL許可權,那麼我們用ll
命令查看到文件的許可權,可能是不準確的,如果想要看準確的,需要通過getfacl 文件名
命令查看。
如下圖所示:
(5)ACL默認許可權
上邊的目錄中如果再創建新的文件,新創建的文件是否有ACL許可權?
答案是沒有的。可以在命令中加入d
選項,設置ACL默認許可權,就可以解決。
[root@localhost ~]# setfacl -m d:u:aa:rwx -R /test
注意:默認許可權只能賦予目錄。
下圖為設置ACL默認許可權的文件夾,通過getfacl 文件名
命令查看許可權。
(6)總結
如果給目錄賦予ACL許可權,兩條命令都要輸入。
遞歸與默認的區別:
setfacl -m u:cc:rx -R soft/
——》只對已經存在的文件生效。setfacl -m d:u:aa:rwx -R /test
——》只對以後新建的文件生效。
拓展:
ACL許可權,一旦遞歸之後,不可避免的出現許可權溢出。
- 什麼是許可權溢出?
ACL許可權遞歸之後,目錄和目錄中的文件都會有相同的執行許可權。目錄的執行許可權是進入目錄,而文件的執行許可權就非常危險了,相當於賦予了文件最大許可權。這個問題是沒法解決的。
以後通過shell腳本,能解決ACL許可權遞歸造成的許可權溢出問題,判斷文件夾裡邊的文件類型,文件賦予4,文件夾賦予5,這樣就能解決。但這就不是一個單一命令了。所以正常情況下還是使用所有者,所屬組,其他人許可權來處理。
4、最大有效許可權mask
最大有效許可權mask
值,是用來控制文件的最大有效許可權的。
如下圖所示:
mask
值分別和所有者、所屬組、其他人、ACL許可權,相與的結果,來最終決定一個身份的許可權是什麼。
例如:設定一個文件的mask
許可權為rw-
。
使用m:許可權
格式:
[root@localhost www]# setfacl -m m:6 /www/
結果如下圖:
5、刪除ACL許可權
示例如下:
# 刪除指定用戶和用戶組的ACL許可權
[root@localhost ~]# setfacl -x u:st /project/
# 會刪除文件的所有的ACL許可權
[root@localhost ~]# setfacl -b project/