1. 程式人生 > >Linux學習—ACL

Linux學習—ACL

mask 分析 們的 any tdi root store 失敗 res

ACL—-普通的權限設置方法只可以修改文件所屬人,所屬組和其他人的權限,如果想把文件權限設置的更加復雜,更加詳細的話,例如使每個用戶有不同的權限,傳統的修改權限的方法已經不夠用了,那麽我們需要用到訪問控制列表(ACL).



目錄

  • ACL是什麽

  • 開啟ACL方法

  • ACL的用法和作用

  • 優先順序

  • mask詳解

  • 備份和恢復ACL


一、ACL是什麽

即實現靈活的控制列表,對權限更加細化的設置,除了文件的所有者,所屬組和其它人,可以對更多的用戶設置權限。

Linux 下用戶對文件的操作權限有 r-讀, w-寫, x-可執行三種,而對linux 下的文件而言,用戶身份分為:所有者, 所屬組, 其它人, 且文件的所有者,所屬組都只能是一個,所以在對文件分配用戶的使用權限時,只能對這三種身份進行分配rwx 權限.

Linux 主要作為服務器系統使用,用戶眾多.所以在實際使用場景中,這三種身份並不能很好地實現資源權限分配問題,所以就有了ACL權限.ACL 權限就是為了解決linux 下三種身份不能滿足資源權限分配需求的問題的。


二、開啟ACL方法

CentOS 6 需要對新建分區手動開啟ACL:

①創建分區

fdisk /dev/sda

n

enter

+2G

w

②同步分區表

partx -a /dev/sda

③創建文件系統

mkfs.ext4 /dev/sda6

④開啟ACL支持

tune2fs -o acl /dev/sda6

⑤查看ACL

tune2fs -l /dev/sda6 |grep option

CentOS 7 默認開啟


三、ACL的用法和作用

ACL的用法格式:

getfacl file|directory 查看文件的ACL權限

setfacl -m u:wang:rwx file|directory 設置文件對於用戶wang的ACL權限

setfacl -Rm g:sales:rwx

directory 遞歸設置目錄下的所有文件的ACL權限

setfacl -M file.acl file|directory 按照file.acl的內容批量設置文件的ACL權限

例如: 編輯file.acl的內容

vim file.acl

u:lisi:rwx

u:wang:r-x

g:shuguo:---

:wq

setfacl -M file.acl test 這樣一次性給test文件設置多個ACL權限

setfacl -m g:salesgroup:rw file| directory 設置文件對於組salesgroup的ACL權限

setfacl -d -m u:wang:rx directory 設置以後在該目錄下創建文件和目錄時的默認ACL權限

setfacl -k file|directory 取消默認設置

setfacl -x u:wang file|directory 取消ACL權限

setfacl -X file.acl directory 按照文件file.acl批量取消

setfacl–b file 刪除所有ACL權限

********************************************************************************************************

結合案例分析ACL的作用:

①進入/app目錄下創建testdir目錄,查看該目錄的權限為755,其他人只能進入該目錄,不能創建在該目錄下文件

②增加用戶lisi

③登錄lisi用戶,進入/app/testdir/,嘗試創建文件,

結果顯示:Permission denied

setfacl -m u:lisi:rwx testdir/,然後查看去權限,發現多了個 +

⑤再次嘗試創建文件,這次成功

技術分享圖片技術分享圖片


四、優先順序

我們繼續做這個小實驗:

    chown lisi testdir
    chmod 555 testdir
    setfacl -m u:lisi:rwx testdir

這樣文件所屬人的權限位r-x,ACL設置文件所屬人的權限是rwx,這樣就產生了沖突,但實際上lisi用戶下創建testdir目錄下的文件時失敗.說明權限生效具有優先順序。

在沒有設置ACL的時候,權限的優先順序為:owner > group > other

在加入了ACL之後,分為了owner,ACL user,group,ACL group,other五個類別,他們的優先順序為:

owner > ACL user> group 和ACL group誰的權限多,誰優先 > other

總結:當設置ACL的時候,我們經常把文件所屬組設置成root,只需要使用ACL的權限。


五、mask詳解

定義:只影響除所有者other之外的人和組的最大權限,即ACL user,group,ACL group三類

格式:

setfacl -m m:rw- testdir/ 修改目錄testdir/的mask值為rw-

一旦設置了ACL權限,原來組的權限就變為不可改的狀態並且組的權限位也不在顯示的是組的權限,而是mask的權限,即使利用chmod g=***的方法修改的也是mask的值,而不是原來組的權限.

mask是實時更新的,每使用一次setfacl,mask更新一次,用戶的權限需要與mask進行邏輯與運算後,才能變成有效的權限,用戶或組的設置必須存在於mask權限設定範圍內才會生效.所以在所有的ACL都設置好了之後,最後修改mask,限制ACL權限.

案例:

原來的權限位r-x

技術分享圖片

getfacl /testdir

技術分享圖片

setfacl -m u:liubei:r-- testdir ,然後mask的值為r-x

技術分享圖片

setfacl -m g:guanyu:-w- testdir ,然後mask的值為rwx

技術分享圖片

setfacl -m m:--- testdir ,然後mask的值為---,並且剛才設置的ACL有效權限都變為---

技術分享圖片

setfacl -m u:zhangfei:--x testdir ,然後mask的值為rwx

技術分享圖片


六、備份和恢復ACL

主要的文件操作命令cp和mv都支持ACL,只是cp命令需要加上-p 參數。但是tar等常見的備份工具是不會保留目錄和文件的ACL信息。我們需要對ACL進行備份以至可以恢復ACL。

getfacl file|directory > acl.txt 備份

setfacl --restore acl.txt 恢復










Linux學習—ACL