当先锋百科网

首页 1 2 3 4 5 6 7

概述

Hadoop分布式文件系统(HDFS)为共享大部分POSIX模型的文件和目录实现权限模型。每个文件和目录都与一个所有者和一个组相关联。该文件或目录对作为所有者的用户,作为该组成员的其他用户以及对所有其他用户具有单独的权限。对于文件需要r权限才能读取文件,而w权限才能写入或附加到文件。对于目录,需要r权限才能列出目录的内容,需要w权限来创建或删除文件或目录,并且需要x权限来访问目录的子级

  • 客户端在进行每次文件操时,系统会从用户身份认证数据访问授权两个环节进行验证。

  • 客户端的操作请求会首先通过用户身份验证机制来获得“凭证”(类似于身份证书),HDFS根据此“凭证”分辨出合法的用户名;

  • 然后HDFS再据此查看该用户所访问的数据是否已经授权,或者说该身份凭证是否具有权限做这件事。

  • 一旦这个流程中的某个环节出现异常,客户端的操作请求便会失败。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PZvjpwuC-1671473411302)(C:/Users/HWQ/AppData/Roaming/Typora/typora-user-images/image-20221217235838571.png)]

UGO权限管理

拥有者、所在组、其他用户组

  • HDFS文件权限与Linux/Unix系统的UGO模型类似,简单描述为:每个文件和目录都与一个拥有者和一个组相关联。

  • USER(文件的所有者):一般是创建该文件的用户,对该文件具有完全的权限。

  • GROUP(拥有者所在的组):和文件所有者属于同一组的用户。

  • OTHER(其他用户组):其他用户组的用户。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sfDg0v77-1671473411304)(C:/Users/HWQ/AppData/Roaming/Typora/typora-user-images/image-20221217235947578.png)]

读、写、执行权限

  • HDFS文件权限也细分为:读权限(r)、写权限(w)、执行权限(x)。

  • 在HDFS中,对于文件,需要r权限才能读取文件,而w权限才能写入或追加到文件。没有x可执行文件的概念。

  • 在HDFS中,对于目录,需要r权限才能列出目录的内容,需要w权限才能创建或删除文件或目录,并且需要x权限才能访问目录的子级。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QV78ZFLc-1671473411304)(C:/Users/HWQ/AppData/Roaming/Typora/typora-user-images/image-20221218000501064.png)]

  • 读权限(r)、写权限(w)、执行权限(x)可以使用数字表示,也可以使用字母表示。

umask权限掩码

  • 与Linux/Unix系统类似,HDFS也提供了umask掩码,用于设置在HDFS中默认新建的文件和目录权限位

  • 默认umask值有属性fs.permissions.umask-mode指定,默认值022。

  • 创建文件和目录时使用的umask,默认的权限就是

      		目录:777-022=755,也就是drwxr-xr-x
    
      		文件:777-022=755,因为HDFS中文件没有x执行权限的概念,所以是:-rw-r--r--
    

UGO权限相关命令

#变更目录或文件的权限 可以使用数字 也可以使用字母 u g o a + - r w x
hadoop fs -chmod [-R] 777 /user/itcast/foo
hadoop fs -chmod [-R] u+x,o-x /user/itcast/foo
#变更目录或文件的属主或用户组
hadoop fs -chown [-R] itcast /user/itcast/foo
hadoop fs -chown [-R] itcast:ogroup /user/itcast/foo
#变更用户组
hadoop fs -chgrp [-R] group1 /user/itcast/foo

Web页面修改UGO权限

  • Hadoop3.0之后,支持在HDFS Web页面上使用鼠标修改。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7f1bD8dJ-1671473411304)(C:/Users/HWQ/AppData/Roaming/Typora/typora-user-images/image-20221218005918941.png)]

Group Mapping组映射

  • 在通过用户身份认证拿到用户名后之后,NameNode还需要通过用户组映射服务获取该用户所对应的用户组列表,用于后期的用户组权限校验

  • HDFS中用户所属组的确认工作需要通过外部的用户组映射(Group Mapping)服务来获取。用户到组的映射可以使用系统自带的方案(使用NameNode服务器上的用户组系统),也可以通过其他实现类似功能的插件(LDAP、Ranger等)方式来代替。

基于Linux/Unix系统的用户和用户组

  • Linux/Unix系统上的用户和用户组信息存储在/etc/passwd和/etc/group文件中

  • 默认情况下,HDFS会通过调用外部的 Shell 命令来获取用户的所有用户组列表。

  • /etc/passwd

  • 一行记录对应着一个用户,每行记录又被冒号(:)分隔为7个字段,其格式和具体含义如下:

    用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell

    其中组标识号字段记录的是用户所属的用户组。它对应着/etc/group文件中的一条记录。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UwW2Xg8g-1671473411305)(C:/Users/HWQ/AppData/Roaming/Typora/typora-user-images/image-20221220015354829.png)]

  • /etc/group

  • 文件中每一行各代表一个用户组,每行记录又被冒号(:)分隔为4个字段,其格式和具体含义如下:

    组名:密码:GID:该用户组中的用户列表

    其中最后一个字段列出每个群组包含的所有用户。需要注意的是,如果该用户组是这个用户的初始组,则该用户不会写入这个字段,可以这么理解,该字段显示的用户都是这个用户组的附加用户。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-biOSXcNT-1671473411305)(C:/Users/HWQ/AppData/Roaming/Typora/typora-user-images/image-20221220015522246.png)]

  • 此方案的优点在于组映射服务十分稳定,不易受外部服务的影响。

  • 但是用户和用户组管理涉及到root权限等,同时会在服务器上生成大量的用户组,后续管理,特别是自动化运维方面会有较大影响。

ACL权限管理

  • ACL是Access Control List(访问控制列表)的缩写,ACL提供了一种方法,可以为特定的用户或组设置不同的权限,而不仅仅是文件的所有者和文件的组

ACL Shell 命令

hadoop fs -getfacl [-R] <path>
#显示文件和目录的访问控制列表(ACL)。如果目录具有默认ACL,则getfacl还将显示默认ACL。
hadoop fs [generic options] -setfacl [-R] [{-b|-k} {-m|-x <acl_spec>} <path>]|[--set <acl_spec> <path>]
#设置文件和目录的访问控制列表(ACL)。
hadoop fs -ls <args>
#ls的输出将在带有ACL的任何文件或目录的权限字符串后附加一个'+'字符。

ACL操作实战

  • 使用root超级用户在HDFS上创建一个名为itheima的文件夹
hadoop fs -mkdir /itheima
  • 使用普通用户allenwoon去操作/itheima 发现没有权限
[allenwoon@node1 ~]$ echo 1 >> 1.txt
[allenwoon@node1 ~]$ hadoop fs -put 1.txt /itheima
put: Permission denied: user=allenwoon, access=WRITE, inode="/itheima":root:supergroup:drwxr-xr-x
  • 接下来使用ACL给allenwoon用户单独添加权限 而/itheima文件夹本身权限不变
hadoop fs -setfacl -m user:allenwoon:rwx /itheima
setfacl: The ACL operation has been rejected.  Support for ACLs has been disabled by setting dfs.namenode.acls.enabled to false.
  • 发现报错 原因是ACL功能默认是关闭的。

  • 在hdfs-site.xml中设置dfs.namenode.acls.enabled=true 开启ACL,重启HDFS集群。

  • 设置成功之后查看ACL权限

hadoop fs -setfacl -m user:allenwoon:rwx /itheima
hadoop fs -getfacl /itheima
[root@node1 ~]# hadoop fs -getfacl /itheima
# file: /itheima
# owner: root
# group: supergroup
user::rwx
user:allenwoon:rwx     发现allenwoon权限配置成功
group::r-x
mask::rwx
other::r-x
  • 再使用普通用户allenwoon去操作,发现可以成功了
  • 如果切换其他普通用户比如itcast 发现还是无法操作
[itcast@node2 ~]$ echo 2 >> 2.txt
[itcast@node2 ~]$ hadoop fs -put 2.txt /itheima
put: Permission denied: user=itcast, access=WRITE, inode="/itheima":root:supergroup:drwxrwxr-x
  • ACL其他操作命令
1、带有ACL的任何文件或目录的权限字符串后附加一个'+'字符
[root@node1 ~]# hadoop fs -ls /
Found 5 items
drwxr-xr-x   - root supergroup          0 2021-01-06 20:59 /data
drwxr-xr-x   - root supergroup          0 2020-12-31 11:59 /itcast
drwxrwxr-x+  - root supergroup          0 2021-01-07 19:38 /itheima
drwx------   - root supergroup          0 2020-12-31 11:56 /tmp
drwxr-xr-x   - root supergroup          0 2020-12-31 11:56 /user
2、删除指定的ACL条目
hadoop fs -setfacl -x user:allenwoon /itheima
3、删除基本ACL条目以外的所有条目。保留用户,组和其他条目以与权限位兼容。
hadoop fs -setfacl -b /itheima

4、设置默认的ACl权限,以后在该目录中新建文件或者子目录时,新建的文件/目录的ACL权限都是之前设置的default ACLs
[root@node1 ~]# hadoop fs -setfacl -m default:user:allenwoon:rwx /itheima
[root@node1 ~]# hadoop fs -getfacl /itheima                              
# file: /itheima
# owner: root
# group: supergroup
user::rwx
group::r-x
other::r-x
default:user::rwx
default:user:allenwoon:rwx
default:group::r-x
default:mask::rwx
default:other::r-x
5、删除默认ACL权
hadoop fs -setfacl -k /itheima 
6、--set: 完全替换ACL,丢弃所有现有条目。 acl_spec必须包含用户,组和其他条目,以便与权限位兼容。
hadoop fs -setfacl --set user::rw-,user:hadoop:rw-,group::r--,other::r-- /file