當前位置:
首頁 > 知識 > Linux ACL 許可權

Linux ACL 許可權


來源:sparkdev


www.cnblogs.com/sparkdev/p/5536868.html



ACL 是什麼




ACL的全稱是 Access Control List (訪問控制列表) ,一個針對文件/目錄的訪問控制列表。它在UGO許可權管理的基礎上為文件系統提供一個額外的、更靈活的許可權管理機制。它被設計為UNIX文件許可權管理的一個補充。ACL允許你給任何的用戶或用戶組設置任何文件/目錄的訪問許可權。



本文的演示環境為 ubuntu 16.04。




ACL有什麼用




既然是作為UGO許可權管理的補充,ACL自然要有UGO辦不到或者很難辦到的本事,例如:






  1. 可以針對用戶來設置許可權



  2. 可以針對用戶組來設置許可權



  3. 子文件/目錄繼承父目錄的許可權




檢查是否支持ACL




ACL需要Linux內核和文件系統的配合才能工作,當前我們能見到的大多數Linux發行版本默認都是支持的。但最好還是能夠先檢查一下:





sudo

tune2fs

-

l

/

dev

/

sda1

|

grep

"Default mount options:"


Default

mount

options

:                

user_xattr    

acl




我們能夠看到默認情況下(Default mount options:)已經加入 acl 支持了。




如何設置ACL



我們可以使用setfacl和getfacl命令來設置或觀察文件/目錄的acl許可權。




setfacl



參數不多,直接列出來了:







getfacl





getfacl 文件/目錄名




下面我們通過一些示例來演示 ACL 許可權的基本用法。




針對用戶來設置許可權




筆者系統中的當前用戶是 nick,再創建兩個用戶 tester 和 tester1 用來進行測試:





$

sudo adduser

tester


$

sudo adduser

tester1




創建文件 aclfile,檢查其默認的許可權信息:







把用戶切換為 tester,發現沒有寫文件的許可權:







這是因為 other 沒有寫 aclfile 文件的許可權。




下面我們為 tester 用戶賦予讀寫 aclfile 文件的許可權:





$ setfacl -m u:tester:rw aclfile




修改成功後再次以 tester 用戶的身份向 aclfile 文件寫入數據,這次已經可以正常寫入了。查看 aclfile 文件的許可權:





$ ll aclfile







貌似並沒有發生什麼變化,只是在描述許可權的地方多出了一個 「+」 號。下面再看看 acl 許可權:





$ getfacl aclfile







多出了一些信息,其中比較重要的是 user:tester:rw-,就是它讓用戶 tester 具有了讀寫 aclfile 的許可權。




針對用戶組來設置許可權




和針對用戶的設置幾乎一樣,只是把小寫的 u 換成小寫的 g 就行了。




子文件/目錄繼承父目錄的許可權




這是一個很棒的例子,它能讓我們創建的子文件或者子文件夾繼承父文件夾的許可權設置!





$

mkdir

mydir


$

ll

-

d

mydir


$

setfacl

-

m

d

:

u

:

tester

:

rwx

mydir


$

getfacl

mydir




注意參數 d 在這裡起到了決定性的作用。下面是設置後的 mydir 目錄的許可權屬性:







這次多出了一些以 default 開頭的行,這些 default 許可權信息只能在目錄上設置,然後會被目錄中創建的文件和目錄繼承。下面分別在 mydir 目錄下創建文件 testfile 和目錄 testdir,並查看它們的 acl 許可權:





$

touch

testfile


$

mkdir

testdir


$

getfacl

testfile


$

getfacl

testdir







從上圖可以看到文件 testfile 繼承了父目錄的 acl 許可權,因此用戶 tester 對它有讀寫許可權。下面再看看 testdir 目錄:







從圖中可以看出,testdir 目錄不僅繼承了 tester 的訪問許可權,還繼承了父目錄上的 default 許可權。也就是說我們通過這種方式設置在目錄上的許可權可以被子目錄遞歸的繼承下去。




更改 ACL 許可權




-m 選項其實是在更改文件和目錄的 ACL 許可權






  • 當一個用戶或組的 ACL 許可權不存在時,-m 選項執行的是添加操作,



  • 如果一個用戶或組的 ACL 許可權已經存在時,-m 選項執行的是更新操作。




我們重新創建一個 aclfile 文件,通過下面的命令設置 tester 用戶對它的訪問許可權:





$ setfacl -m u:tester:rwx aclfile







這時 -m 選項是在添加 ACL 許可權。然後我們修改 tester 用戶的許可權,移除其對 aclfile 的執行許可權:





$ setfacl -m u:tester:rw aclfile







這時 -m 選項是在更改現有的 ACL 許可權。接下來再讓我們試一下為不同的用戶或組設置 ACL 許可權:





$ setfacl -m g:tester1:rwx aclfile







這次是新添加了 group tester1 的許可權,並且沒有影響 tester 用戶的許可權。




–set 選項會先清除掉原有的 ACL 許可權,然後添加新的許可權



我們接著設置 aclfile 文件的 ACL 許可權:





$ setfacl --set u::rw,u:tester2:rwx,g::r,o::- aclfile







需要注意的是一定要包含 UGO 許可權的設置,不能象 -m 一樣只包含 ACL 許可權。o::- 是另一個需要注意的地方,其完整的寫法是 other::-,就像 u::rw 的完整寫法是 user::rw- 一樣。通常我們可以把 「-」 省略,但是當許可權位只包含 「-」 時,就至少要保留一個。如果寫成了o::,就會報錯。




刪除 ACL 許可權




有添加就有刪除,我們可以通過 setfacl 命令的 -x 選項來刪除指定用戶或組的 ACL 許可權,還可以通過 -b 選項來清除文件和目錄上所有的 ACL 許可權。



我們創建一個新的測試文件 aclfile,並設置下面的 ACL 許可權:





$ setfacl -m u:tester:rwx,u:tester1:rw,g:tester2:rwx aclfile



下面通過 -x 選項刪除 group tester2 的 ACL 許可權(注意命令中只指定了組的名稱而沒有指定許可權信息):





$ setfacl -x g:tester2 aclfile




查看一下結果,發現下圖中已經沒有 group:tester2 的許可權信息了:







下面通過 -b 選項一次性刪除 aclfile 上所有的 ACL 許可權:





$ setfacl -b aclfile







-b 選項直接清除了文件上的所有 ACL 許可權。這個行為對於目錄來說也是一樣的,這裡就不再演示了。




備份和恢復 ACL 許可權




常見的文件操作命令 cp 和 mv 等都支持 ACL 許可權,只是 cp 命令需要加上 -p 參數。但是 tar 等常見的備份工具不會保留目錄和文件的 ACL 許可權信息。如果希望備份和恢復帶有 ACL 許可權的文件和目錄,可以先把 ACL 許可權信息備份到一個文件里,然後再用 -restore 選項來恢復這些信息。下面演示 ACL 許可權的保存和恢復。我們先創建下面的目錄結構:







並分別為 acldir 目錄和 aclfile 文件設置 ACL 許可權:







然後使用下面的命令導出 acldir 目錄的 ACL 許可權信息並保存到文件 acldir.acl 文件中:





$ getfacl -R acldir > acldir.acl




接下來刪除掉 acldir 目錄的 ACL 許可權:





$ setfacl -R -b acldir







現在 acldir 目錄及其子文件上的 ACL 許可權都被刪除掉了。最後我們再通過下面的命令把它們的 ACL 許可權都恢復回來:





$ setfacl --restore acldir.acl







之前刪除的 ACL 許可權全都恢復回來了!




●編號611,輸入編號直達本文



●輸入m獲取文章

目錄

推薦↓↓↓

 



運維


更多推薦

18個技術類微信公眾號


涵蓋:程序人生、演算法與數據結構、黑客技術與網路安全、大數據技術、前端開發、Java、Python、Web開發、安卓開發、iOS開發、C/C++、.NET、Linux、資料庫、運維等。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 Linux學習 的精彩文章:

Linux 27 歲了!盤點 Linux 的 27 件趣事
17個案例帶你3分鐘搞定Linux正則表達式

TAG:Linux學習 |