天天看點

Linux系列教程(十六)——Linux權限管理之ACL權限

本篇部落格我們介紹了權限管理的ACL權限,通過設定 ACL 權限,我們為某個使用者指定某個檔案的特定權限,在實際權限管理中還是用的比較多的。

  通過前面的兩篇部落格我們介紹了Linux系統的使用者管理,Linux使用者和使用者組管理之相關配置檔案 講解了使用者管理的相關配置檔案,包括使用者資訊檔案/etc/passwd,使用者密碼檔案/etc/shadow;然後介紹了使用者組資訊檔案/etc/group,使用者組密碼檔案/etc/gshadow。使用者的家目錄,以及使用者的模闆目錄;Linux使用者和使用者組管理之使用者管理指令 講解了管理使用者和使用者組的指令,包括建立、修改、檢視等等以及用的比較多的切換使用者指令 su。那麼使用者管理結束之後,我們将進入linux的權限管理介紹,本篇部落格介紹的是Linux權限管理的ACL權限。

1、什麼是 ACL 權限?

  比如有如下場景:

  某大牛在QQ群内直播講解Linux系統的權限管理,講解完之後,他在一個公有的Linux系統中建立了一個 /project 目錄,裡面存放的是課後參考資料。那麼 /project 目錄對于大牛而言是所有者,擁有讀寫可執行(rwx)權限,對于QQ群内的所有使用者他們都配置設定的一個所屬組裡面,也都擁有讀寫可執行(rwx)權限,而對于 QQ 群外的其他人,那麼我們不給他通路/project 目錄的任何權限,那麼 /project 目錄的所有者和所屬組權限都是(rwx),其他人權限無。

  問題來了,這時候直播有旁聽的人參與(不屬于QQ群内),聽完之後,我們允許他通路/project目錄檢視參考資料,但是不能進行修改,也就是擁有(r-x)的權限,這時候我們該怎麼辦呢?我們知道一個檔案隻能有一個所屬組,我們将他配置設定到QQ群所在的所屬組内,那麼他擁有了寫的權限,這是不被允許的;如果将這個旁聽的人視為目錄/project 的其他人,并且将/project目錄的其他人權限改為(r-x),那麼不是旁聽的人也能通路我們/project目錄了,這顯然也是不被允許的。怎麼解決呢?

  

Linux系列教程(十六)——Linux權限管理之ACL權限

  我們想想windows系統裡面給某個檔案配置設定權限的辦法:

Linux系列教程(十六)——Linux權限管理之ACL權限

  如上圖,我們想要讓某個使用者不具備某個權限,直接不給他配置設定這個目錄的相應權限就行了。那麼對應到Linux系統也是這樣,我們給指定的使用者指定目錄配置設定指定的權限,也就是 ACL 權限配置設定。

2、檢視分區 ACL 權限是否開啟:dump2fs

  我們看某個檔案(Linux系統中目錄也是檔案,一切皆是檔案)是否支援 ACL 權限,首先要看檔案所在的分區是否支援 ACL 權限。

  ①、檢視目前系統有哪些分區:df -h

Linux系列教程(十六)——Linux權限管理之ACL權限

  ②、檢視指定分區詳細檔案資訊:dumpe2fs -h 分區路徑

  下面是檢視 根分區/ 的詳細檔案資訊

Linux系列教程(十六)——Linux權限管理之ACL權限

3、開啟分區 ACL 權限

  ①、臨時開啟分區 ACL 權限

mount -o remount,acl /
      

  重新挂載根分區,并挂載加入 acl 權限。注意這種指令開啟方式,如果系統重新開機了,那麼根分區權限會恢複到初始狀态。

  ②、永久開啟分區 ACL 權限

  一、修改配置檔案 /etc/fstab

Linux系列教程(十六)——Linux權限管理之ACL權限

  上面是修改根分區擁有 acl 權限

UUID=490ed737-f8cf-46a6-ac4b-b7735b79fc63 /                       ext4    defaults,acl        1 1
      

  二、重新挂載檔案系統或重新開機系統,使得修改生效

mount -o remount /
      

4、設定 ACL 權限:setfacl 選項 檔案名

Linux系列教程(十六)——Linux權限管理之ACL權限

  ①、給使用者設定 ACL 權限:setfacl -m u:使用者名:權限 指定檔案名

  ②、給使用者組設定 ACL 權限:setfacl -m g:組名:權限 指定檔案名

  注意:我們給使用者或使用者組設定 ACL 權限其實并不是真正我們設定的權限,是與 mask 的權限“相與”之後的權限才是使用者的真正權限,一般預設mask權限都是rwx,與我們所設定的權限相與就是我們設定的權限。mask 權限下面我們會詳細講解

  範例:所有者root使用者在根目錄下建立一個檔案目錄/project,然後建立一個QQ群所屬組,所屬組裡面建立兩個使用者zhangsan和lisi。所有者和所屬組權限和其他人權限是770。

     然後建立一個旁聽使用者 pt,給他設定/project目錄的 ACL 為 r-x。

   

Linux系列教程(十六)——Linux權限管理之ACL權限

  目錄 /project 的所有者和所屬組其他人權限設定為 770。接下來我們建立旁聽使用者 pt,并賦予 acl 權限 rx

Linux系列教程(十六)——Linux權限管理之ACL權限

  為了驗證 pt 使用者對于 /project 目錄沒有寫權限,我們用 su 指令切換到 pt 使用者,然後進入 /project 目錄,在此目錄下建立檔案,看是否能成功:

Linux系列教程(十六)——Linux權限管理之ACL權限

  上面提示權限不夠,說明 acl 權限賦予成功,注意如下所示,如果某個目錄或檔案下有 + 标志,說明其具有 acl 權限。

Linux系列教程(十六)——Linux權限管理之ACL權限

5、檢視 ACL 權限:getfacl 檔案名

Linux系列教程(十六)——Linux權限管理之ACL權限

6、最大有效權限 mask

  前面第4點我們講過,我們給使用者或使用者組設定 ACL 權限其實并不是真正我們設定的權限,是與 mask 的權限“相與”之後的權限才是使用者的真正權限,一般預設mask權限都是rwx,與我們所設定的權限相與就是我們設定的權限。

  我們通過 getfacl 檔案名 也能檢視 mask 的權限,那麼我們怎麼設定呢?

setfacl -m m:權限 檔案名
      
Linux系列教程(十六)——Linux權限管理之ACL權限

7、删除 ACL 權限

  ①、删除指定使用者的 ACL 權限

setfacl -x u:使用者名 檔案名
      

  ②、删除指定使用者組的 ACL 權限

setfacl -x g:組名 檔案名
      

  ③、删除檔案的所有 ACL 權限

setfacl -b 檔案名
      

8、遞歸 ACL 權限

  通過加上選項 -R 遞歸設定檔案的 ACL 權限,所有的子目錄和子檔案也會擁有相同的 ACL 權限。

setfacl -m u:使用者名:權限 -R 檔案名
      

9、預設 ACL 權限

  如果給父目錄設定了預設的 ACL 權限,那麼父目錄中所有建立的子檔案會繼承父目錄的 ACL 權限。

setfacl -m d:u:使用者名:權限 檔案名
      

10、總結

  本篇部落格我們介紹了權限管理的ACL權限,通過設定 ACL 權限,我們為某個使用者指定某個檔案的特定權限,在實際權限管理中還是用的比較多的。

作者:IT可樂

出處:http://www.cnblogs.com/ysocean/

資源:微信搜【IT可樂】關注我,回複 【電子書】有我特别篩選的免費電子書。

本文版權歸作者所有,歡迎轉載,但未經作者同意不能轉載,否則保留追究法律責任的權利。

繼續閱讀