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設置權限後,我們的確完成了要求,可是這中間卻存在幾個問題:
- 當我們通過放開other位權限來賦予lishuyang權限的同時,其它不屬於test.txt所屬組,不是test.txt所屬人的用戶也同樣可以通過other位來訪問文件,這樣文件便共享了出來,顯然是不可以的。
- 當我們把lishuyang添加至admin組內時,雖然避免了上一個問題,但是lishuyang卻擁有了存在於admin內的其他文件的權限,lishuyang的權限得到了放大,同樣是不可取的。
- 設定suid權限是一個解決方案,但當文件數量很多,我們需要對每個文件都臨時獲取權限時,這個方法也會顯得不靈活了。
那麽我們該如何既能避免上面這些問題,還能滿足我們的需求呢?
這個時候就需要acl權限出馬了。什麽是ACL權限呢? 其實很簡單,同樣是為了滿足需求給用戶設置權限,普通權限的設置需要聯系上文件的owner和group,但是acl權限的設置不需要關註用戶和文件的關系,也就是說,ACL權限可以給特定的用戶,特定的組設置權限,不受文件所屬人和所屬組的影響。現在我們給test.txt設置acl權限
這個時候lishuyang就只獲得了對文件test.txt的rx權限,成功避免了以上的問題。同樣的我們還可以對test.txt給一個無關組設置權限,假設一個組為test組,則:
ACL權限用途詳解:
- 開啟acl的方式 (因為centos6之前的版本,操作系統安裝時所創建的文件系統默認未開啟acl,而操作安裝之後使用mkfs格式化的文件系統默認未開啟acl,需要手工開啟,方法如下:
tune2fs -o acl /dev/sda5 mount -o acl /dev/sda5 /app
- 設置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權限,模擬過程如下:
- 備份帶有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權限用途及其優勢