Linux權限管理之ACL權限

一、ACL權限簡介與開啓

        ACL權限是一種爲某個或某些用戶特殊設置的權限,這種權限不收到所有者、所屬組、其他用戶這三種權限設置的限制,即可以脫離它們而單獨設置權限。ACL權限就是爲了解決這三種權限不能實現的一些特殊情況而出現的。

        ACL權限不是某個目錄上支持的特性,而是分區(即文件系統)所支持的特性。使用dumpe2fs命令查看某個分區是否支持ACL權限。dumpe2fs是查詢指定分區詳細的文件系統信息的命令,-h選項是顯式超級塊的信息,而不是磁盤塊組的信息,例如:

        dumpe2fs  -h /dev/sda3   查看sda3分區是否支持ACL權限,如果有以下顯式表示支持:

       


        其實在Linux中所有分區掛在的時候默認都是支持了ACL權限的。如果不支持則需要重新掛在文件系統(即分區)並在掛載的時候設置掛載參數讓其支持ACL權限,

        例如:mount–o remount,acl  /dev/sda3

        這種方式是不用卸載分區即可開啓,因爲有些程序正在該分區上運行,也就是使用在聯機狀態下開啓。但是這方式是臨時開啓ACL權限支持,重啓系統之後就不生效了。如果要永久生效,那麼和掛在分區一樣需要編輯/etc/fstab文件,並在相應的分區上加入ACL參數。

         /etc/fstab文件中是不能配置可移動存儲設置的掛載信息的,例如光盤的掛載信息就不能配置到該文件中。因爲不能保證每次啓動系統都插入了光盤,如果系統找不到光盤則無法啓動,因爲對文件系統的檢測不通過。

         因爲Linux默認支持了ACL權限,所以fstab文件的最後一列如果是defaults則表示已經支持了ACL。如果不支持,那麼可以在defaults後使用逗號分割並寫入“acl”這個參數即可,例如:

       

        修改之後還需要使用mount–o remount /dev/sda3 重新掛載該分區或重啓系統之後配置才能生效。

        【注意】因爲fstab文件是系統啓動時讀取的對文件系統的掛在配置,如果編輯該文件錯誤則無法啓動。



二、ACL權限的查看與設置

        1.getfacl命令查看acl權限

        使用“getfacl文件名或目錄名”即可查看文件或目錄上是否設置了acl權限。

 

        2.setfacl命令設置acl權限

        該命令即可設置一個文件或目錄的acl權限

        語法:setfacl 選項  文件/目錄名

        可用選項如下:

        -m:設定acl權限

        -x:刪除指定的acl權限

        -b:刪除所有的acl權限

        -d:設定默認的acl權限

        -k:刪除默認的acl權限

        -R:遞歸設置acl權限


        補充gpasswd –axxx tgroup 即可將xxx這個用戶添加到tgroup這個組中。chownroot:tgroup  /abc 修改/abc目錄的所有者爲root,所屬組爲tgroup。

 

        爲某個用戶設置某個目錄的acl權限:

        setfacl –m u:st:rx /abc   爲st這個用戶設置對/abc目錄的rx權限,u表示用戶,如果是爲group設置則使用g即可,例如: setfacl –mg:tgroup:rx /abc。例如:

       

       

        如果爲某個文件或目錄設置了acl權限,那麼該文件或目錄的權限信息末尾會有一個“+”,表示具有了acl權限。如果要查看具體的acl權限,則可以使用getfacl命令,例如:

       

        可以看到第一個user後的::表示所有者的權限,第二個user之後就表示sunjiabo這個用戶對該目錄有acl權限,具體權限爲r-x。

        該命令的結果有一個報錯:getfacl:Removing leading '/' from absolute path names 意思是該命令不支持絕對路徑的寫法,但是並不影響最終結果。


三、最大有效權限

        在getfacl命令結果中還有一個mask的行,mask是用來設置最大的acl有效權限的。如果我們給用戶賦予了acl權限,是需要和mask的權限進行“與”之後才能得到用戶最終的權限。mask默認就是rwx,所以默認給用戶設置了什麼權限,最終其得到的就是什麼權限。

        可以通過修改mask權限來修改分配acl權限時用戶或組最終得到的權限。不過一般不用這麼麻煩,直接讓其默認rwx即可。

        例如mask:rw-,那麼即使爲用戶分配了acl權限的rwx,最終用戶得到的也只有rw權限,因爲-和x進行與運算之後就是假,所以最終爲-。其實就是可以修改mask來決定最大給用戶分配的acl權限。例如mask設置爲r-x,那麼爲用戶或組分配acl權限時其最大得到的權限就是r-x。有時候mask也是非常有用的。

        修改mask權限還是使用setfacl命令,但是參數不是u或g,而是m,例如:

       

        【注意mask是對某個文件或目錄設置的,就是該目錄可以分配給用戶或組的最大acl權限,而同同於系統對文件或目錄的權限掩碼,權限掩碼是全局的,對所有文件和目錄生效。


四、刪除acl權限

        有兩種方式刪除文件或目錄上的acl權限。使用u或g指定刪除某個用戶或組對該文件或目錄的acl權限,使用-b選項刪除某個文件或目錄上的所有用戶和組的acl權限。

        1.刪除指定用戶對某個文件或目錄的acl權限

        setfacl–x u:dog  /abc   刪除dog用戶對/abc目錄的acl權限。  u該爲g就是刪除組的acl權限

        

        2.刪除指定文件或目錄上的所有用戶和組的acl權限

        setfacl–b /abc   刪除了/abc目錄上所有用戶和組對該目錄的acl權限

       

        刪除之後可以看到該目錄上已經沒有了acl權限。其實即使該文件或目錄已經沒有了哪個用戶或組的acl權限,該文件或目錄還是有acl權限被設置了這個特點,除非使用-b選項刪除所有的acl權限,例如:

       

        可以看到即使上面已經刪除了/home/dog目錄上唯一一個有acl權限用戶對該目錄的acl權限,但是權限信息最後一個還是“+”,表示該目錄還具有acl權限(實質已經沒有了),必須使用-b完全刪除纔可以。

        通過上面刪除acl權限再查看acl權限發現,刪除acl權限之後mask變爲---,使用-b刪除所有acl權限之後mask行就消失了。


五、遞歸ACL權限

        遞歸acl權限是針對目錄的,也就是設置父目錄的acl權限之後,其中的所有文件以及子目錄都應用父目錄的設置。命令如下:

        setfacl  -m  u:用戶名:權限–R  目錄名

        setfacl–m u:dog:rwx –R /abc  爲dog用戶設置/abc目錄的acl權限爲rwx,並且遞歸設置。

 

        但是之後在該目錄中新創建的文件或目錄就不會應用到此設置。爲了解決這個問題還需要使用到默認acl權限,也就是爲父目錄設置了acl權限之後,不僅當前的文件和子目錄都具有了父目錄上設置的acl權限,並且以後新增的文件或目錄也自動繼承父目錄上的acl權限。只需要在設置命令上增加一個“d:”即可,例如:

        setfacl  –m  d:u:dog:rw  –R /abc       該命令爲dog用戶設置/abc目錄的acl權限,並且以後在該目錄中新增的文件和子目錄都會繼承對/abc目錄的設置。即dog用戶對/abc目錄中新增的文件和目錄也具有了rw權限。

        注意此時還需要有-R,如果沒有那麼/abc的子目錄中新增的文件和目錄貌似就不會再繼承默認acl權限?

 

        並且在使用d選項設置默認acl權限之前,目錄中有文件和子目錄,那麼執行該命令之後這些文件和子目錄並不會應用上所設置的acl權限。因爲增加了d選項之後,是針對/abc目錄中未來出現的文件和目錄進行設置默認的acl權限,而不是針對當前的文件和目錄設置,所以爲了保險期間,可以執行如下兩條命令:

        setfacl–m u:dog:rx –R /abc  先設置/abc目錄中現有的文件和子目錄的acl權限

        setfacl–m u:dog:rx –R /abc  再設置/abc目錄中未來出現的文件和子目錄的默認acl權限



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章