HDFS權限管理以及ACL介紹

一篇文章搞懂HDFS權限管理

 

HDFS承載了公司內多個部門幾十條業務線的幾十PB數據,這些數據有些是安全級別非常高的用戶隱私數據,也有被廣泛被多個業務線使用的基礎數據,不同的業務之間有着複雜的數據依賴。因此,如何管理好這些數據的授權,並儘可能自動化低成本的做好權限管理,是很重要的一部分工作。本文系統的描述了HDFS權限管理體系中與用戶關聯最緊密的授權相關內容,希望通過本文讓大家對權限管理有一個清晰的瞭解。

HDFS的權限管理是被用戶最常問到的問題之一,HDFS實現了一個和POSIX系統類似的文件和目錄的權限模型,同時還支持POSIX ACLs規範,由於POSIX ACLs本身就比較複雜,還改變了一些傳統POSIX權限體系的語義,因此大部分用戶在使用過程中都會遇到以下一些困惑,例如:umask是幹什麼用的?ACLs裏的mask作用是什麼?爲什麼我明明給用戶A添加了rwx權限的ACLs,A卻仍然寫失敗?什麼權限會繼承?什麼權限不會繼承?爲什麼創建的這個目錄繼承的權限跟預期的不一致?

權限控制一般分爲兩部分,鑑權(Authentication)和授權(Authorization)。鑑權用於鑑定用戶身份(例如鑑定你是否是用戶foo),授權用於授予給定用戶指定的權限(例如將文件f授予用戶bar讀寫權限)。本文只討論HDFS的授權體系的工作機制,對於常用的權限管理命令先不做介紹,歡迎關注後續文章瞭解。

HDFS權限管理概述

HDFS實現了一個和POSIX系統類似的文件和目錄的權限模型。每個文件和目錄有一個所有者(owner)和一個組(group)。文件或目錄對其所有者、同組的其他用戶以及所有其他用戶(other)分別有着不同的權限。對文件而言,當讀取這個文件時需要有r權限,當寫入或者追加到文件時需要有w權限。對目錄而言,當列出目錄內容時需要具有r權限,當新建或刪除子文件或子目錄時需要有w權限,當訪問目錄的子節點時需要有x權限。總的來說,文件或目錄的權限就是它的模式(mode)。HDFS採用了Unix表示和顯示模式的習慣,包括使用八進制數來表示權限。當新建一個文件或目錄,它的所有者即客戶進程的用戶,它的所屬組是父目錄的組(BSD的規定)。

HDFS還提供了對POSIX ACLs(Access Control Lists)的支持,通過NameNode的配置項來控制對ACLs的支持是打開還是關閉。ACLs使得用戶可以在權限模型之外提供更加靈活的授權。由於傳統的POSIX權限模型對於大部分類Unix系統用戶來說都比較熟悉了,因此ACLs將是本文檔的重點。

下文會解決HDFS實現的傳統POSIX權限模型中最常見的疑問,然後系統的介紹ACLs,最後給出詳細的例子和場景來說明ACLs是如何工作的。

傳統的POSIX權限模型

HDFS實現的是類似於POSIX系統的權限模型,如前所述,使用過Linux/Unix系統的用戶對該模型應該都非常熟悉,就不再贅述。這裏先對下文中最常被問到的問題做一些說明:

1、訪問某個路徑時,用戶必須具備該路徑上每個目錄的執行(x)權限,路徑中最後一個目錄/文件除外。例如 ls /user/foo/data操作要求用戶必須具有根目錄(/),user目錄,foo目錄的執行權限。

2、創建一個文件或者目錄時,owner是客戶進程的用戶,group則繼承父目錄

3、新建文件或目錄的模式(mode)由client在rpc調用時傳遞給NameNode,它受配置參數umask的約束。新文件的模式是666 & ^umask,新目錄的模式是777 & ^umask,即文件默認是沒有執行(x)權限的。如果在 create(path, permission, …) 方法中指定了權限參數P,新文件的模式是P & ^umask & 666,如果在mkdirs(path, permission ) 方法中指定了權限參數P,新目錄的模式是P & ^umask & 777。

例1:如果umask是022(默認值),那麼新文件的模式就是644,新目錄的模式就是755,即umask擦除掉了group和other的寫權限。

例2:如果umask是027,那麼新文件的模式就是650,新目錄的模式就是750,即umask擦除掉了group的寫權限,以及other的讀寫執行權限。

4、umask通過client端hdfs-site.xml中的fs.permissions.umask-mode配置項來指定,默認是022。

5、只有超級用戶纔可以調用chown來修改目錄和文件的owner。

權限管理

權限三組:擁有者 (file owner),羣組 (group),及 其它 (other)

屬性三種:讀取 (read),寫入 (write),及 執行(executable)

 

 

我們將rwx看成二進制數,如果有則有1表示,沒有則有0表示,那麼rwx r-x r- -則可以表示成爲: 111 101 100 再將其每三位轉換成爲一個十進制數,就是754。

存取控制清單 (Access Control List,簡稱 ACL)


ACL 實爲現有權限機制的延伸,在三個基本設定 (擁有者,羣組及其它)外,允許我們加入對某指定使用者或羣組的存取權限設定。

大家常用的文件系統,如:ext3、xfs、jfs和 ReiserFS,都能使用ACL

要查看一個文件或目錄的 ACL,需要使用 “getfacl” 指令:getfaclreport.doc

如果需要更改一個檔案或目錄的 ACL,可以使用setfacl 指令,其用法如下:

setfacloption rules files

Glusterfs之POSIX ACL文件權限管理


在服務端啓用POSIXAccess Control Lists (ACLs)

如果需要使用POSIX Access Control Lists (ACLs) ,那麼在服務器端掛接邏輯卷時就需要指定acl選項,如下所示:

#mount -o acl /dev/sda1 /export1

在/etc/fstab文件中可以這樣配置:

LABEL=/work/export1 ext3 rw, acl 14

在客戶端啓用POSIXAccess Control Lists (ACLs)

#mount -t glusterfs -o acl 198.192.198.234:glustervolume /mnt/gluster

設置POSIX ACLs


一般地,你可以設置兩種類型的POSIX ACLs,access ACLs和default ACLs。前者用於對一個指定的目錄或文件設置訪問策略,而後者則爲目錄及目錄中的文件提供一種默認的訪問控制策略。你可以基於每個用戶、用戶組以至於不在文件屬組內的其它用戶,來設置ACLs。

設置access ACLs命令格式:# setfacl -m file

下表爲可以設置的權限項目和格式要求,其中<permission>必須是r (read), w (write),and x (execute)的組合形式。

ACLEntry

Description

u:uid:\<permission>

Setsthe access ACLs for a user. You can specify user name or UID

g:gid:\<permission>

Setsthe access ACLs for a group. You can specify group name or GID.

m:\<permission>

Setsthe effective rights mask. The mask is the combination of all accesspermissions of the owning group and all of the user and group entries.

o:\<permission>

Setsthe access ACLs for users other than the ones in the group for the file.

 授權對象可以是文件,也可以是目錄。例如,爲用戶antony授權testfile的讀寫權限。

[root@pc3test-disperse]# setfacl -m u:antony:rw /mnt/gluster/data/testfile

設置defaultACLs的命令格式:# setfacl -d -m

例如,設置/data目錄的默認ACLs爲向不在文件所屬用戶組內的其它所有用戶,開放只讀的權限:

[root@pc3test-disperse]# setfacl -d -m o::r /mnt/test-disperse

注:如果同時設置了default acls和access acls,則access acls優先級更高。

查看已經設置的POSIXACLs

查看文件的access acls:[root@pc3 test-disperse]# getfacl targetfile

查看目錄的default acls:

[root@pc3test-disperse]# getfacl /mnt/test-disperse

getfacl:Removing leading '/' from absolute path names

#file: mnt/test-disperse

#owner: root

#group: root

user::rwx

group::r-x

other::r--

移除POSIX ACLs

例如,移除用戶antony對test-file的所有訪問權限:

[root@pc3test-disperse]# setfacl -x u:antony /mnt/gluster/data/test-file

Samba and ACLs

如果你使用Samba訪問GlusterFS FUSE掛接的存儲卷,那麼POSIX ACLs會默認被啓用

https://blog.csdn.net/qq417782857/article/details/79474705

https://blog.csdn.net/hongtaq156136/article/details/86498657

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章