概述
Hadoop分布式文件系统(HDFS)为共享大部分POSIX模型的文件和目录实现权限模型。每个文件和目录都与一个所有者和一个组相关联。该文件或目录对作为所有者的用户,作为该组成员的其他用户以及对所有其他用户具有单独的权限。对于文件,需要r权限才能读取文件,而w权限才能写入或附加到文件。对于目录,需要r权限才能列出目录的内容,需要w权限来创建或删除文件或目录,并且需要x权限来访问目录的子级。
- 客户端在进行每次文件操时,系统会从用户身份认证和数据访问授权两个环节进行验证。
- 客户端的操作请求会首先通过用户身份验证机制来获得“凭证”(类似于身份证书),HDFS根据此“凭证”分辨出合法的用户名;
- 然后HDFS再据此查看该用户所访问的数据是否已经授权,或者说该身份凭证是否具有权限做这件事。
- 一旦这个流程中的某个环节出现异常,客户端的操作请求便会失败。
UGO权限管理
拥有者、所在组、其他用户组
- HDFS文件权限与Linux/Unix系统的UGO模型类似,简单描述为:每个文件和目录都与一个拥有者和一个组相关联。
- USER(文件的所有者):一般是创建该文件的用户,对该文件具有完全的权限。
- GROUP(拥有者所在的组):和文件所有者属于同一组的用户。
- OTHER(其他用户组):其他用户组的用户。
读、写、执行权限
- HDFS文件权限也细分为:读权限(r)、写权限(w)、执行权限(x)。
- 在HDFS中,对于文件,需要r权限才能读取文件,而w权限才能写入或追加到文件。没有x可执行文件的概念。
- 在HDFS中,对于目录,需要r权限才能列出目录的内容,需要w权限才能创建或删除文件或目录,并且需要x权限才能访问目录的子级。
- 读权限(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页面上使用鼠标修改。
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文件中的一条记录。
- /etc/group
- 文件中每一行各代表一个用户组,每行记录又被冒号(:)分隔为4个字段,其格式和具体含义如下:组名:密码:GID:该用户组中的用户列表其中最后一个字段列出每个群组包含的所有用户。需要注意的是,如果该用户组是这个用户的初始组,则该用户不会写入这个字段,可以这么理解,该字段显示的用户都是这个用户组的附加用户。
- 此方案的优点在于组映射服务十分稳定,不易受外部服务的影响。
- 但是用户和用户组管理涉及到root权限等,同时会在服务器上生成大量的用户组,后续管理,特别是自动化运维方面会有较大影响。
ACL权限管理
- ACL是Access Control List(访问控制列表)的缩写,ACL提供了一种方法,可以为特定的用户或组设置不同的权限,而不仅仅是文件的所有者和文件的组。
ACLShell命令
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 ~]$ echo1>>1.txt
[allenwoon@node1 ~]$ hadoop fs -put1.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 ~]$ echo2>>2.txt
[itcast@node2 ~]$ hadoop fs -put2.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 02021-01-06 20:59 /data
drwxr-xr-x - root supergroup 02020-12-31 11:59 /itcast
drwxrwxr-x+ - root supergroup 02021-01-07 19:38 /itheima
drwx------ - root supergroup 02020-12-31 11:56 /tmp
drwxr-xr-x - root supergroup 02020-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
版权归原作者 摸鱼的老山羊 所有, 如有侵权,请联系我们删除。