HDFS開啟了許可權控制後,使用者訪問HDFS需要有合法的許可權才能正常操作HDFS,如讀取資料/建立檔案夾等。

添加配置

HDFS許可權相關的配置如下:

  • dfs.permissions.enabled

    開啟許可權檢查,即使該值為false, chmod/chgrp/chown/setfacl操作還是會進行許可權檢查。

  • dfs.datanode.data.dir.perm

    datanode使用的本地檔案夾路徑的許可權,預設755。

  • fs.permissions.umask-mode
    • 許可權掩碼,在建立檔案/檔案夾的時候的預設使用權限設定。
    • 建立檔案: 0666 & ^umask。
    • 建立檔案夾: 0777 & ^umask。
    • 預設umask值為022,即建立檔案許可權為644(666&^022=644),建立檔案夾許可權為755(777&^022=755)。
    • EMR的Kerberos安全叢集預設設定為027,對應建立檔案許可權為640,建立檔案夾許可權為750。
  • dfs.namenode.acls.enabled
    • 開啟ACL控制,開啟後除了可以對owner/group進行許可權控制外,還可以對其它使用者進行設定。
    • 設定ACL相關命令:
      hadoop fs -getfacl [-R] <path>
      hadoop fs -setfacl [-R] [-b |-k -m |-x <acl_spec> <path>] |[--set <acl_spec>   <path>]
      如:
      su test
       #test使用者建立檔案夾
       hadoop fs -mkdir /tmp/test
       #查看建立的檔案夾的許可權
       hadoop fs -ls /tmp
       drwxr-x---   - test   hadoop          0 2017-11-26 21:18 /tmp/test
       #設定acl,授權給foo使用者rwx
       hadoop fs -setfacl -m user:foo:rwx /tmp/test
       #查看檔案許可權(+號表示設定了ACL)
       hadoop fs -ls  /tmp/
       drwxrwx---+  - test   hadoop          0 2017-11-26 21:18 /tmp/test
       #查看acl
        hadoop fs -getfacl  /tmp/test
        # file: /tmp/test
      # owner: test
      # group: hadoop
      user::rwx
      user:foo:rwx
      group::r-x
      mask::rwx
      other::---
  • dfs.permissions.superusergroup

    超級使用者組,屬於該組的使用者都具有超級使用者的許可權

重啟HDFS服務

對於Kerberos安全叢集,已經預設設定了HDFS的許可權(umask設定為027),無需配置和重啟服務。

對於非Kerberos安全叢集需要添加配置並重啟服務。

其它

  • umask值可以根據需求自行修改
  • HDFS是一個基礎的服務,Hive/HBase等都是基於HDFS,所以在配置其它上層服務時,需要提前配置好HDFS的許可權控制。
  • 在HDFS開啟許可權後,需要設定好服務的(如spark的/spark-history、yarn的/tmp/$user/等)。
  • sticky bit:

    針對檔案夾可設定sticky bit,可以防止除了superuser/file owner/dir owner之外的其它使用者刪除該檔案夾中的檔案/檔案夾(即使其它使用者對該檔案夾有rwx許可權)。如:

    #即在第一位添加數字1
    hadoop fs -chmod 1777 /tmp
    hadoop fs -chmod 1777 /spark-history
    hadoop fs -chmod 1777 /user/hive/warehouse