Linux系統ACL許可權設定之setfacl和getfacl

lhrbest發表於2019-08-20


Linux系統ACL許可權設定之setfacl和getfacl


若/u01/app目錄許可權被誤操作,那麼在Linux環境中還可以透過getfacl和setfacl來進行操作:
① getfacl -pR /u01/app  > /tmp/bk_lhr_perm_u01_rac1.txt
③ setfacl --restore=/tmp/bk_lhr_perm_u01_rac1.txt


一、setfacl——設定檔案訪問控制列表

語法: setfacl [-bkndRLP] { -m|-M|-x|-X ... } file ...

  -m, --modify=acl 更改檔案的訪問控制列表

  -M, --modify-file=file 從檔案讀取訪問控制列表條目更改

  -x, --remove=acl 根據檔案中訪問控制列表移除條目

  -X, --remove-file=file 從檔案讀取訪問控制列表條目並刪除

  -b, --remove-all 刪除所有擴充套件訪問控制列表條目

  -k, --remove-default 移除預設訪問控制列表

      --set=acl 設定替換當前的檔案訪問控制列表

      --set-file=file 從檔案中讀取訪問控制列表條目設定

      --mask 重新計算有效許可權掩碼

  -n, --no-mask 不重新計算有效許可權掩碼

  -d, --default 應用到預設訪問控制列表的操作

  -R, --recursive 遞迴操作子目錄

  -L, --logical 依照系統邏輯,跟隨符號連結

  -P, --physical 依照自然邏輯,不跟隨符號連結

      --restore=file 恢復訪問控制列表,和“getfacl -R”作用相反

      --test 測試模式,並不真正修改訪問控制列表屬性

  -v, --version           顯示版本並退出

  -h, --help              顯示本幫助資訊

二、getfacl ——獲取檔案訪問控制列表

使用方法: getfacl  [-aceEsRLPtpndvh]  檔案 ...

  -a,  --access           僅顯示檔案訪問控制列表

  -d, --default           僅顯示預設的訪問控制列表

  -c, --omit-header     不顯示註釋表頭

  -e, --all-effective     顯示所有的有效許可權

  -E, --no-effective      顯示無效許可權

  -s, --skip-base         跳過只有基條目(base entries)的檔案

  -R, --recursive         遞迴顯示子目錄

  -L, --logical           邏輯遍歷(跟隨符號連結)

  -P, --physical          物理遍歷(不跟隨符號連結)

  -t, --tabular           使用製表符分隔的輸出格式

  -n, --numeric           顯示數字的使用者/組標識

  -p, --absolute-names    不去除路徑前的 '/' 符號

  -v, --version           顯示版本並退出

  -h, --help              顯示本幫助資訊

對於Access ACL,也就是對檔案而言的例子


1)例子

首先建立個521M的檔案


[root@centos7 test]# dd if=/dev/zero of=/test/file bs=521M count=1

記錄了1+0 的讀入

記錄了1+0 的寫出

546308096位元組(546 MB)已複製,120.211 秒,4.5 MB/秒

You have new mail in /var/spool/mail/root

[root@centos7 test]# 

檢視file(沒有額外屬性)

[root@centos2 test]# getfacl file 

# file: file

# owner: root

# group: root

user::rw-

group::r--

other::r--

 

讓zhangsan使用者對file擁有rw權

[root@centos2 ~]# setfacl -m u:zhangsan:rw- /test/file 

[root@centos2 ~]# cd /test/

[root@centos2 test]# ll

總用量 533512

-rw-rw-r--+ 1 root root 546308096 9月  14 22:53 file

注:在檔案permission的最後多了一個+號,當任何一個檔案擁有了ACL_USER或者ACL_GROUP的值以後我們就可以稱它為ACL檔案,這個+號就是用來提示我們的。

 

[root@centos2 test]# getfacl --omit-header file 

user::rw-

user:zhangsan:rw-    #可以看到zhangsan使用者在ACL裡面已經擁有了對檔案的讀寫權。

group::r--

mask::rw-

other::r--

 

讓財務組有file的r許可權


[root@centos2 test]# setfacl -m g:caiwu:r-- file 

[root@centos2 test]# getfacl file 

# file: file

# owner: root

# group: root

user::rw-

user:zhangsan:rw-

group::r--

group:caiwu:r--  #財務部裡的成員都有了r許可權

mask::rw-

other::r--

這裡需要重點講一下ACL_MASK,因為這是掌握ACL的另一個關鍵,在Linux file permission裡面大家都知道比如對於rw-rw-r--來說, 當中的那個rw-是指檔案組的permission. 但是在ACL裡面這種情況只是在ACL_MASK不存在的情況下成立。如果檔案有ACL_MASK值,那麼當中那個rw-代表的就是mask值而不再是group permission了。

2)例子


檢視 file2.sh 檔案


[root@centos2 test]# ls -lh file2.sh

-rwxrw-r--. 1 root caiwu 0 9月  15 00:10 file2.sh

[root@centos2 test]# 

讓使用者zhang也對file2.sh具有和root一樣的permission。

[root@centos2 test]# setfacl -m user:zhang:rwx file2.sh

[root@centos2 test]# getfacl --omit-header file2.sh

user::rwx

user:root:rwx

group::rw-

mask::rwx

other::r--

[root@centos2 test]# 

這裡我們看到zhang已經擁有了rwx的permission,mask值也被設定為rwx,那是因為它規定了ACL_USER,ACL_GROUP和ACL_GROUP_OBJ的最大值,現在我們再來看file2的Linux permission,它已經變成了:

[root@centos2 test]# ls -lh file2.sh

-rwxrwxr--+ 1 root caiwu 0 9月  15 00:10 file2.sh

[root@centos2 test]# 

那麼如果現在zhang組的使用者想要執行file2.sh的程式會發生什麼情況呢?它會被permission deny。原因在於實際上caiwu組的使用者只有read and write permission,這裡當中顯示的rwx是ACL_MASK的值而不是group的permission。

所以從這裡我們就可以知道,如果一個檔案後面有+標記,我們都需要用getfacl來確認它的permission,以免發生混淆。

下面我們再來繼續看一個例子,假如現在我們設定file2.sh的mask為read only,那麼caiwu組的使用者還會有write permission嗎?


[root@centos2 test]# setfacl -m mask::r-- file2.sh

[root@centos2 test]# getfacl file2.sh

# file: file2

# owner: root

# group: caiwu

user::rwx

user:root:rwx #effective:r--

group::rw- #effective:r--

mask::r--

other::r--

 

[root@centos2 test]# 

這時候我們可以看到ACL_USER和ACL_GROUP_OBJ旁邊多了個#effective:r--,這是什麼意思呢?讓我們再來回顧一下ACL_MASK的定義。它規定了ACL_USER,ACL_GROUP_OBJ和ACL_GROUP的最大許可權。那麼在我們這個例子中他們的最大許可權也就是read only。雖然我們這裡給ACL_USER和ACL_GROUP_OBJ設定了其他許可權,但是他們真正有效果的只有read許可權。

這時我們再來檢視file.sh的Linux file permission時它的group permission也會顯示其mask的值(r--)


[root@centos2 test]# ls -lh file2.sh

-rwxr--r--+ 1 root caiwu 0 9月  15 00:10 file2.sh

[root@centos2 test]# 

Default ACL

Default ACL是指對於一個目錄進行Default ACL設定,並且在此目錄下建立的檔案都將繼承此目錄的ACL。


1)例子


在root使用者建立了一個testdir目錄;希望所有在此目錄下建立的檔案都可以被ming使用者所訪問,那麼我們就應該對testdir目錄設定Default ACL。


[root@centos2 /]# setfacl -d -m user:ming:rw testdir/

[root@centos2 /]# getfacl testdir/

# file: testdir/

# owner: root

# group: root

user::rwx

group::r-x

other::r-x

default:user::rwx

default:user:ming:rw-

default:group::r-x

default:mask::rwx

default:other::r-x

注:這裡我們可以看到ACL定義了default選項,ming使用者擁有了default的read, write, excute/search permission。所有沒有定義的default都將從file permission裡copy過來;

在root使用者在testdir目錄下建立一個test.txt檔案。


[root@centos2 /]# touch /testdir/test.txt

[root@centos2 /]# ls -l /testdir/test.txt

-rw-rw-r--+ 1 root root 0 9月  15 00:48 /testdir/test.txt

[root@centos2 /]# getfacl --omit-header /testdir/test.txt 

user::rw-

user:ming:rw-

group::r-x #effective:r--

mask::rw-

other::r--

注:我們看到在testdir下建立的檔案ming使用者自動就有了read and write permission

 


注:這裡還有一個chacl是用來改變檔案和目錄的Access ACL and Default ACL,它的具體引數大家可以去看man page。我只想提及一下chacl -B。它可以徹底刪除檔案或者目錄的ACL屬性(包括Default ACL),比如你即使用了setfacl -x刪除了所有檔案的ACL屬性,那個+號還是會出現在檔案的末尾,所以正確的刪除方法應該是用chacl -B用cp來複制檔案的時候我們現在可以加上-p選項。

這樣在複製檔案的時候也將複製檔案的ACL屬性,對於不能複製的ACL屬性將給出警告。

mv命令將會預設地移動檔案的ACL屬性,同樣如果操作不允許的情況下會給出警告。  


需要注意的幾點 如果你的檔案系統不支援ACL的話,你也許需要重新mount你的file system:mount -o remount, acl [mount point] 如果用chmod命令改變Linux file perm

 ission的時候相應的ACL值也會改變,反之改變ACL的值,相應的file permission也會改變。


 

參考:  https://www.cnblogs.com/baichuanhuihai/p/7931865.html






About Me

........................................................................................................................

● 本文作者:小麥苗,部分內容整理自網路,若有侵權請聯絡小麥苗刪除

● 本文在itpub、部落格園、CSDN和個人微 信公眾號( xiaomaimiaolhr)上有同步更新

● 本文itpub地址: http://blog.itpub.net/26736162

● 本文部落格園地址: http://www.cnblogs.com/lhrbest

● 本文CSDN地址: https://blog.csdn.net/lihuarongaini

● 本文pdf版、個人簡介及小麥苗雲盤地址: http://blog.itpub.net/26736162/viewspace-1624453/

● 資料庫筆試面試題庫及解答: http://blog.itpub.net/26736162/viewspace-2134706/

● DBA寶典今日頭條號地址:

........................................................................................................................

● QQ群號: 230161599(滿) 、618766405

● 微 信群:可加我微 信,我拉大家進群,非誠勿擾

● 聯絡我請加QQ好友 646634621 ,註明新增緣由

● 於 2019-08-01 06:00 ~ 2019-08-31 24:00 在西安完成

● 最新修改時間:2019-08-01 06:00 ~ 2019-08-31 24:00

● 文章內容來源於小麥苗的學習筆記,部分整理自網路,若有侵權或不當之處還請諒解

● 版權所有,歡迎分享本文,轉載請保留出處

........................................................................................................................

小麥苗的微店

小麥苗出版的資料庫類叢書http://blog.itpub.net/26736162/viewspace-2142121/

小麥苗OCP、OCM、高可用網路班http://blog.itpub.net/26736162/viewspace-2148098/

小麥苗騰訊課堂主頁https://lhr.ke.qq.com/

........................................................................................................................

使用 微 信客戶端掃描下面的二維碼來關注小麥苗的微 信公眾號( xiaomaimiaolhr)及QQ群(DBA寶典)、新增小麥苗微 信, 學習最實用的資料庫技術。

........................................................................................................................

歡迎與我聯絡

 

 



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26736162/viewspace-2654228/,如需轉載,請註明出處,否則將追究法律責任。

相關文章