1. 程式人生 > >ACL權限用途及其優勢

ACL權限用途及其優勢

sticky 詳解 安裝 rest RoCE 刪除acl權限 gid acl權限 發現

普通權限用途

在 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都是我們需要掌握的內容。

ACL權限用途及其優勢