首頁 > 軟體

ACL許可權管理的作用及其意義

2020-06-16 16:48:56

普通許可權用途

在 Linux下,對一個檔案(或者資源)可以進行操作的物件被分為三類: file owner(檔案的擁有者),group(組,注意不一定是檔案擁有者所在的組), other (其他)而對於每一類別又分別定義了read, write and execute(rwx)許可權。即可讀許可權,可寫許可權以及執行許可權。在這裡我們用一個例子來看一下普通許可權的作用。

現在假設存在一個檔案test.txt,該檔案的owner位和group位有rwx許可權,而other位無任何許可權。現在有一個使用者lishyang想對其擁有可讀許可權,那麼我們可以怎麼做呢?(假設使用者lishuyang不是該檔案的owner,也不屬與該檔案的所屬組admin),我覺得可行的方法有三種:

  • 將test.txt檔案的other位許可權設定為r_x,那麼可以滿足我們的需求

chmod  o+rx  test.txt

  • 將使用者lishuyang新增至檔案的所有組admin,然後可以使用group的許可權達到目的

groupmems -g admin -a lishuyang

  • 通過suid許可權使使用者lishuyang暫時擁有fileowner許可權,以達到目的

chmod u+s test.txt

通過上面的用法來看,設定普通許可權就必須使得一個普通使用者與檔案的所屬人,所屬組建立聯絡。

ACL許可權用途及優勢

我們還以上述的test.txt檔案舉例,當我們按照上述的方式給使用者lishuyang設定許可權後,我們的確完成了要求,可是這中間卻存在幾個問題:
1.當我們通過放開other位許可權來賦予lishuyang許可權的同時,其它不屬於test.txt所屬組,不是test.txt所屬人的使用者也同樣可以通過other位來存取檔案,這樣檔案便共用了出來,顯然是不可以的。
2.當我們把lishuyang新增至admin組內時,雖然避免了上一個問題,但是lishuyang卻擁有了存在於admin內的其他檔案的許可權,lishuyang的許可權得到了放大,同樣是不可取的。
3.設定suid許可權是一個解決方案,但當檔案數量很多,我們需要對每個檔案都臨時獲取許可權時,這個方法也會顯得不靈活了。
那麼我們該如何既能避免上面這些問題,還能滿足我們的需求呢?
這個時候就需要acl許可權出馬了。什麼是ACL許可權呢? 其實很簡單,同樣是為了滿足需求給使用者設定許可權,普通許可權的設定需要聯絡上檔案的owner和group,但是acl許可權的設定不需要關注使用者和檔案的關係,也就是說,ACL許可權可以給特定的使用者,特定的組設定許可權,不受檔案所屬人和所屬組的影響。現在我們給test.txt設定acl許可權

這個時候lishuyang就只獲得了對檔案test.txt的rx許可權,成功避免了以上的問題。同樣的我們還可以對test.txt給一個無關組設定許可權,假設一個組為test組,則:

ACL許可權用途詳解:

1.開啟acl的方式 (因為CentOS6之前的版本,作業系統安裝時所建立的檔案系統預設未開啟acl,而操作安裝之後使用mkfs格式化的檔案系統預設未開啟acl,需要手工開啟,方法如下:
tune2fs -o acl  /dev/sda5
mount -o acl  /dev/sda5  /app

2.設定ACL

給指定使用者設定acl許可權
setfacl  -m  u:user:rwx  filename

給指定的組設定許可權

setfacl -m g:group:rwx filename

(註:避免使用系統組;避免使某個使用者的多個組都設定不同的acl許可權)

3.設定預設許可權
設定預設許可權,是針對目錄而言的,當我們給目錄設定了預設許可權之後,那麼目錄中的檔案以及未來所要建立的檔案的許可權都已經被設定了acl許可權,預設即繼承。

給指定目錄設定預設使用者許可權和組許可權

setfacl -Rm u:user:rwx testdir/

setfacl -Rm g:group:rwx testdir/

4.檢視檔案的acl許可權

getfacl  tesdir/

5.刪除acl許可權

逐一刪除acl許可權

setfacl -x  u:user testdir/

setfacl -x  g:group testdir/

刪除預設許可權

setfacl  -k  testdir/

刪除所有許可權,清空acl結構

setfacl  -b testdir/

許可權的閥值

許可權的閥值,就是許可權的上限,我們將其稱做mask值
當mask值為rwx時,檔案的任何許可權的上限都是rwx,而當我們的mask值有範圍時,那麼就算我們的許可權超過mask的值,那麼我們只能擁有mask範圍內的許可權。比如:

上圖為例,當我們的許可權超過mask值時,其右側出現#effective:,這表示雖然許可權超出,但是其有效許可權只有mask所包含的許可權。
mask值的設定

setfacl -m m:mask: filedir/

設定的mask值不難發現,其實是放在了group位上,所以在設定mask值時,同樣可以通過修改group位的許可權達到修改mask值的目的

chmod g=rwx testdir/

acl擴充套件屬性 打包工具不支援儲存
以備份檔案為例,當我們不小心毀壞或刪除掉含有acl許可權的檔案,然後通過備份檔案恢復原檔案時,我們將不會得到檔案的acl許可權,這個時候需要我們手動恢復acl許可權,模擬過程如下:
1.備份帶有acl許可權的檔案至tar
getfacl * >/root/acl.bak

2.利用tar備份檔案

tar cvf file.out

3.模擬檔案損壞

rm  -rf  *

4.恢復檔案

tar  xvf file.out

5.恢復acl

setfacl --restore /root/acl.bak

許可權對於Linux整體的學習是一個基礎而又不可或缺的內容,不僅僅是acl許可權,rwx,suid,sgid,sticky都是我們需要掌握的內容。

Linux公社的RSS地址:https://www.linuxidc.com/rssFeed.aspx

本文永久更新連結地址https://www.linuxidc.com/Linux/2018-08/153564.htm


IT145.com E-mail:sddin#qq.com