中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

HDFS如何實現權限管理

發布時間:2021-12-09 09:50:01 來源:億速云 閱讀:307 作者:小新 欄目:云計算

這篇文章給大家分享的是有關HDFS如何實現權限管理的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

1 HDFS的權限管理介紹

HDFS的權限管理分成2大部分:

  • 類似linux的基本權限管理(粗粒度)

    針對管理對象分三種:user、group、other方式的權限管理方式

    • user:即目錄或文件的owner

    • group:即上述owner所在的組

    • other:其他用戶的統稱

  • ACL方式的權限管理(細粒度)

    可以精確控制到某個user、某個group具有對應的權限

2種方式具體見下圖

HDFS如何實現權限管理

基本的權限方式如同linux中目錄或文件的權限管理方式,它是一種粗粒度的,不能控制到某一個用戶如t1。ACL的權限管理方式就可以,如下

user:t1:r-x

表示用戶t1具有讀和可執行的權限(在HDFS中沒有可執行的概念,暫且這么叫吧,這里的x權限就是進入目錄和列出目錄下的文件或內容的權限)

2 HDFS基本權限管理

創建一個文件或目錄,初始的基本權限是多少呢?經歷如下2過程:

2.1 默認的文件或目錄權限

創建文件或目錄的時候可以指定權限,沒有指定的話,就使用默認的權限,如下

目錄:777

文件:666

2.2 應用客戶端配置的uMask

注意:這個配置是客戶端可以配置的,即客戶端自己主宰創建文件或目錄的權限。

umask的作用:

就是對HDFS基本權限的限制,如022分別表示:0表示對owner沒有限制,2表示對group不允許有寫權限,2表示對other不允許有寫權限。

應用客戶端配置的umask其實就是拿用戶設置的權限減去上述umask權限,就得到文件或目錄的最終權限了。如創建目錄,默認777權限,然后減去umask權限022就等于755,即默認情況下owner擁有讀寫和可執行權限,owner所在group擁有讀和可執行權限,other擁有讀和可執行的權限

下面重點來說下umask的獲取過程:

  • 首先嘗試獲取配置文件中的fs.permissions.umask-mode屬性,如022,然后構建出umask權限對象

  • 如果上述屬性沒有配置的話,獲取dfs.umask屬性(過時了,推薦用第一種方式),這種方式的umask是10進制形式,如上述的022=2x8+2=18即這里的umask要配置成18

  • 如果上述屬性也沒有配置的話,默認使用18即022來構建出umask對象

至此,在沒有ACL設置的情況下創建文件或目錄的權限即上述過程了。

3 HDFS ACL權限管理

3.1 ACL權限管理模型

AclEntry對象,如

user:t1:r-x、group:g1:rwx、other::--x、mask::r-x

default:user:t1:r-x、default:group:g1:r-x、default:other::r-x、default:mask::r-x

包含4部分內容:

public class AclEntry {
  private final AclEntryType type;
  private final String name;
  private final FsAction permission;
  private final AclEntryScope scope;
}
  • name:即名稱,如上述的t1、g1,也可以為null如上述的mask::r-x

  • FsAction:權限信息,總共有如下權限

    NONE("---"),
    EXECUTE("--x"),
    WRITE("-w-"),
    WRITE_EXECUTE("-wx"),
    READ("r--"),
    READ_EXECUTE("r-x"),
    READ_WRITE("rw-"),
    ALL("rwx");


  • AclEntryScope:枚舉值,值為ACCESS、DEFAULT

    ACCESS:表示該條ACL是針對本目錄或文件的,前綴省略不寫

    DEFAULT:只存在于目錄中,前綴是default:,一旦在該目錄中創建子目錄或文件,子目錄或文件的ACL就會繼承該條ACL權限。即如果父目錄中含有一個default:user:t1:r-x記錄,則在創建子目錄或者文件的時候,都會自動加上一條user:t1:r-x的記錄

  • AclEntryType:枚舉值,值為USER、GROUP、OTHER、MASK

    USER:如上述的user:t1:r-x表示t1是一個用戶

    GROUP:如上述的group:g1:rwx表示g1是一個組

    OTHER:如上述的other::--x表示剩余的所有用戶的統稱

    MASK:如上述的mask::r-x,主要用于過濾,如上述的group:g1:rwx,雖然這里是rwx權限,但是真正在判定權限的時候,還是要與mask::r-x進行and操作,即過濾了w權限,所以group:g1:rwx的實際權限是group:g1:r-x,如下圖所示

    HDFS如何實現權限管理

    其實mask只作用在name值不為null的user和所有的group上,這個后面再詳細說明

基本權限也可以轉化成ACL權限,例子如基本權限如drwxr-xr-x,對應的ACL權限如

user::rwx 對應user權限

(group::r-x)對應group權限

mask::r-x 對應group權限

other::r-x 對應other權限

上述修改基本權限或者修改對應的ACL權限都會相互影響。有一個例外:上述的group::r-x在創建的時候依據基本權限中的group權限,但是直接修改ACL中的group::r-x權限,并不直接影響基本權限中的group權限,這也是比較坑的地方,即group::r-x權限被造出來之后就像被遺棄了。

3.2 ACCESS scope中的mask

3.2.1 mask值的主動修改

ACCESS scope中的mask對應的權限就是HDFS基本權限中的group權限。如下所示:

HDFS如何實現權限管理

所以如下2種方式都可以更改基本權限中的group權限:

  • hdfs dfs -chmod 751

    如修改基本權限為751,則mask取group權限則為5,即r-x權限,如下圖所示

    HDFS如何實現權限管理

  • 直接修改mask acl中的權限值

    如hdfs dfs -setfacl -m mask::--x /user/lg/acl,修改了mask值,同時也修改了基本權限中的group權限

    HDFS如何實現權限管理

3.2.2 mask值的被動重新計算

當acl新添加或者刪除的時候,都會觸發mask的重新計算,計算方式就是:

所有name不為null的user類型的acl和所有的group類型的acl的權限取并集

例子如下:

HDFS如何實現權限管理

這時候基本權限中的group權限也會隨著mask的改變而改變。

目前到這里總結下mask:

主要設計成對其他user和group類型的權限過濾,你主動去設置mask,此時會起到一定的過濾作用,

但是一旦重新添加或者刪除acl的時候,mask的值就被重新計算了,也就是說你之前設置的沒啥用了,這個就意味著mask沒啥鳥用,當你無意間執行chmod修改權限,就可能會造成別人如t1用戶突然少了某些權限,一旦新增一個t2用戶的acl權限,t1用戶的權限又突然回來了,這個也算是個坑吧,不知道為啥這樣設計,歡迎來討論。

3.3 DEFAULT scope中的mask

DEFAULT scope中的mask和ACCESS scope中的mask基本類似,都是用于過濾權限。

3.3.1 mask值主動修改

上述ACCESS scope中mask值有2種方式,而DEFAULT scope中只有一種方式,就是

直接修改mask acl中的權限值

如hdfs dfs -setfacl -m default:mask::--x /user/lg/acl

HDFS如何實現權限管理

修改之后上述default:user:t1:r-x 的實際權限就只是 --x了,即與default mask執行and操作的結果

3.3.2 mask值被重新計算

當acl新添加或者刪除的時候,都會觸發mask的重新計算,計算方式就是:

所有name不為null的user類型的acl和所有的group類型的acl的權限取并集。這里不再說明了,見ACCESS scope中的mask重新計算。

3.4 過程分析

前面介紹的是一些基本概念和理論,現在來看看下面幾個過程具體會發生什么操作

3.4.1 權限驗證過程

例子: 驗證用戶u1是否對路徑/user/lg/acl有讀權限

  • 1 檢查u1是否是該路徑的owner

    如果是owner,則直接使用基本權限中的user權限來判定,代碼如下

    HDFS如何實現權限管理

  • 2 遍歷該路徑的所有ACCESS scope的ACL權限

    如果當前ACL類型是user,并且用戶名匹配,如user:u1:r-x,在判定時還需要將該r-x權限和基本權限中的group權限(即mask權限)執行and操作來作為實際的權限,如果此時mask::--x,執行and操作之后實際權限變成了--x權限,即仍然沒有讀權限

    如果當前ACL類型是group,并且該u1用戶所屬的groups中包含該group,同上述一樣,仍然需要將該條ACL權限與基本權限中的group權限(即mask權限)執行and操作來判定最終的權限

    代碼如下:

    HDFS如何實現權限管理

  • 3 一旦該用戶在上述權限中都沒匹配到,則使用基本權限中的other權限來判定

    注意這里的沒有匹配到的含義:如果有user:u1:--x權限,即匹配到了用戶,但是該ACL并沒有讀權限,此時并不會去執行這部分的other權限

    HDFS如何實現權限管理

  • 4 以上還未能找到相關權限則判定該用戶無權限

3.4.2 創建文件或目錄

  • 1 如果創建文件或者目錄時沒有指定基本權限權限,則使用默認的基本權限權限

    目錄:777

    文件:666

  • 2 在上述基本權限的基礎上應用客戶端配置的umask權限,默認是022,則目錄和文件分別變成

    目錄:755

    文件:644

  • 3 如果父目錄中含有DEFAULT scope的ACL權限信息

    default:user::rwx和上述文件或目錄基本權限中的user權限執行and操作作為最終的基本權限中的user權限 default:mask::r-x和上述文件或目錄基本權限中的group權限執行and操作作為最終的基本權限中的group權限 default:other::--x和上述文件或目錄基本權限中的other權限執行and操作作為最終的基本權限中的other權限

    例子如下:

    HDFS如何實現權限管理

    default中的其他權限直接作為子目錄或文件的ACCESS權限

    代碼見:

    HDFS如何實現權限管理

  • 4 如果創建的是子目錄,則將全部的default權限復制給子目錄作為子目錄的default權限

  • 5 然后重新計算子文件或目錄的基本權限(因為上述過程可能會修改基本權限)

    代碼見

    HDFS如何實現權限管理

3.4.3 修改ACL

新增或刪除或修改ACL操作的時候都會重新計算mask的值

ACCESS scope中的ACL變動會重新計算ACCESS scope中的mask

DEFAULT scope中的ACL變動會重新計算DEFAULT scope中的mask

mask的計算方式上面就說明了。

感謝各位的閱讀!關于“HDFS如何實現權限管理”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

孝感市| 两当县| 睢宁县| 措勤县| 漾濞| 都兰县| 灵川县| 葵青区| 于田县| 宁明县| 大渡口区| 额尔古纳市| 武隆县| 苏尼特右旗| 韩城市| 扶绥县| 南投县| 榆树市| 新丰县| 临猗县| 绍兴县| 且末县| 莱州市| 门头沟区| 贵阳市| 京山县| 钟山县| 武川县| 武汉市| 平和县| 贵阳市| 富裕县| 宜兰市| 东兴市| 株洲县| 沙坪坝区| 伊宁市| 石河子市| 屏东县| 洪泽县| 天门市|