天天看點

系統管理:檔案通路權限之ACL

ACL(acess control list)

傳統UNIX檔案系統:檔案通路權限包含三個部分,user / group / others,這類檔案系統簡潔而功能相對完善,在很長時間内被證明可以被應用于大多數場合,其典型表示如圖

系統管理:檔案通路權限之ACL

但是某些特殊場合,僅僅擁有三種權限判定類别是不夠的。是以出現了ACL這樣新型的檔案系統設計,進而指定更多具體的使用者其通路權限

ACL标準

标準名稱 備注
POSIX ACL 最初制定的ACL草案,但是由于資金問題并沒有成為正式的标準。但是在UNIX陣營被廣泛的實作
Windows ACL 微軟公司制定了自己的Windows ACL,該方案相比POSIX差異很大并且更加複雜
NFSv4 ACL 鑒于沒有一個權威的ACL标準,在制定此标準的時候:基于POSIX ACL,相容Windows ACL

ACL 實作

檔案系統 作業系統 支援ACL
ReiserFS Linux POSIX ACL
XFS Linux POSIX ACL
JFS Linux POSIX ACL
BtrFS Linux POSIX ACL
ext* Linux POSIX ACL
UFS Solaris POSIX ACL
VxFS HP-UX POSIX ACL
ZFS Solaris NFSv4 ACL
JFS2 AIX NFSv4 ACL
  • POSIX ACL

ACL通路表文法格式

文法 語義
user::rw- 屬主權限,可讀可寫
user:wein:r– 特定使用者wein,隻讀
group::r– 檔案屬組,隻讀
group:ruby:r-x 特定使用者組ruby,可執行
other::rwx 其它使用者,讀寫,可執行
mask::perms 影響除屬主和其它之外的所有成員

ACL權限判定

  • 判斷程序有效使用者ID是否和屬主相同,如果相同,最終通路權限為user::這一項決定(與mask無關)
  • 繼續判斷有效使用者ID是否和其它特定使用者相同,如果相同,最終通路權限為user:name:一項與mask決定
  • 繼續判斷有效使用者ID所屬諸多組别是否和ACL中有比對項,如果比對,最終通路權限為group:*:與mask決定
  • 以上都不成立,權限取決于other::項(于mask無關)
  • ACL繼承

POSIX ACL實驗

01 最小ACL(實際ACL并沒有存儲,隻是把9bits翻譯成為ACL輸出),通過ls -l 輸出最後沒有提示"+“符号判斷是否存儲ACL

系統管理:檔案通路權限之ACL

手動編輯最小ACL,事實上仍然隻是修改9bit權限位

系統管理:檔案通路權限之ACL

02真實ACL

setfacl 把寫權限提供給使用者wein(wein不在jianleya這個組當中),實驗發現wein确實可以寫入檔案。此時檔案已經真實需要一個ACL存儲,從檔案末尾的”+“符号可以看出這一點

系統管理:檔案通路權限之ACL

03 當檔案末尾有一個”+"符号,意味着檔案需要單獨存儲ACL:

這個時候使用chmod 指令改變組權限将會産生一個問題,chmod g+w 或者g-w修改的是mask這個字段,并不會影響group::

系統管理:檔案通路權限之ACL

example檔案開始組權限隻讀,使用chmod g+w發現ls指令顯示組已經有了寫權限,但是ACL中mask增加了w掩碼字,group::仍然是隻讀(這個時候屬于jianleya這個組的成員對該檔案是沒有寫權限的)。顯然ls -l 的輸出有些問題,為了真正賦予組寫權限需要編輯ACL group::

  • NFSv4 ACL

繼續閱讀