Linux學習—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
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