温馨提示:如果使用电脑查看图片不清晰,可以使用手机打开文章单击文中的图片放大查看高清原图。


Fayson的github:

​https://github.com/fayson/cdhproject​


提示:代码块部分可以左右滑动查看噢


1

文档编写目的


HDFS支持POSIX访问控制列表(ACLs),以及已支持的传统POSIX权限模型。ACL通过给特定命名的user和group设置不同的权限的方法来控制HDFS文件的访问。ACL的方式增强了传统权限模型,因为它可以让你给任意组合的user和group来定义访问控制,而不是为单个owner/user或单个group。本文Fayson主要介绍如何使用Cloudera Manager开启HDFS的ACL,以及如何在HDFS中使用ACL。


  • 测试环境:

1.CDH6.2

2.集群已开启Kerberos

3.RedHat7.4


2

如何开启HDFS ACL


1.通过Cloudera Manager进入HDFS服务的配置页面,并搜索acl。


0630-6.2-什么是HDFS ACL_子目录


2.勾选“启用访问控制列表”,并保存。


0630-6.2-什么是HDFS ACL_hadoop_02


3.保存配置修改后,回到CM主页按照提示部署客户端配置以及重启相关服务。


0630-6.2-什么是HDFS ACL_hdfs_03


重启过程略,重启完成后,HDFS ACL开启完毕。


3

命令


要设置和获取文件的访问控制列表(ACLs),可以使用文件系统的shell命令,setfacl和getfacl。


3.1

getfacl


hdfs dfs -getfacl [-R] <path>

<!-- COMMAND OPTIONS
<path>: 需要列出ACLs的文件或者目录的路径。
-R: 使用递归的方式列出所有文件和目录的ACLs。
-->


例子:

1.列出目录/fayson/fayson1的ACLs


[root@ip-172-31-6-83 ~]# hadoop fs -getfacl /fayson/fayson1


0630-6.2-什么是HDFS ACL_子目录_04


2.以递归的方式列出/fayson/fayson1目录及其子目录和文件的所有ACLs。


[root@ip-172-31-6-83 ~]# hadoop fs -getfacl -R /fayson/fayson1


0630-6.2-什么是HDFS ACL_子目录_05


3.2

setfacl


hdfs dfs -setfacl [-R] [-b|-k -m|-x <acl_spec> <path>]|[--set <acl_spec> <path>]

<!-- COMMAND OPTIONS
<path>: 需要设置ACLs的文件或者目录的路径。
-R:以递归方式将操作应用于所有文件和目录。
-b: 撤回基本ACL条目以外的所有条目。保留用户,组和其他条目以与权限位兼容。
-k: 移除default ACL。
-m: 修改ACL。新条目将添加到ACL,并保留现有条目。不会影响已有的权限。
-x: 仅移除指定的ACL。
<acl_spec>: 逗号分隔的ACL权限。
--set: 完全替换ACL,丢弃所有现有条目。 acl_spec必须包含用户,组和其他条目,以便与权限位兼容。
-->


例子:

1.赋予用户ben对/fayson/fayson1目录有read&write权限,赋予group fayson1对/fayson/fayson1目录有所有权限。


[root@ip-172-31-6-83 ~]# hdfs dfs -setfacl -m user:ben:rw- /fayson/fayson1                  
[root@ip-172-31-6-83 ~]# hdfs dfs -setfacl -m group:fayson1:rwx /fayson/fayson1
[root@ip-172-31-6-83 ~]# hdfs dfs -getfacl /fayson/fayson1


0630-6.2-什么是HDFS ACL_hdfs_06


2.从目录/fayson/fayson1中移除用户ben的ACL条目


[root@ip-172-31-6-83 ~]# hdfs dfs -setfacl -x user:ben /fayson/fayson1
[root@ip-172-31-6-83 ~]# hdfs dfs -getfacl /fayson/fayson1


0630-6.2-什么是HDFS ACL_子目录_07


3.赋予hadoop对/fayson/fayson1目录有读写权限,group或者others有只读权限。


[root@ip-172-31-6-83 ~]# hdfs dfs -setfacl --set user::rwx,group::r--,other::r--,user:fayson1:rw- /fayson/fayson1
[root@ip-172-31-6-83 ~]# hdfs dfs -getfacl /fayson/fayson1


0630-6.2-什么是HDFS ACL_hadoop_08


4

HDFS ACL示例


此示例演示了用户(“fayson”)如何与另一个团队的同事(“hadoopdev”)共享文件夹访问权限,以便hadoopdev团队可以协作处理该文件夹的内容; 这是通过更新该目录的ACL来完成的:


1.使团队“hadoopdev”可以读取目录中创建的文件和子目录:


[root@ip-172-31-6-83 ~]# hadoop fs -mkdir /project
[root@ip-172-31-6-83 ~]# hdfs dfs -setfacl -m group:hadoopdev:r-x /project
[root@ip-172-31-6-83 ~]# hdfs dfs -getfacl /project


0630-6.2-什么是HDFS ACL_hadoop_09


2.为父目录设置default的ACL


[root@ip-172-31-6-83 ~]# hdfs dfs -setfacl -m default:group:hadoopdev:r-x /project
[root@ip-172-31-6-83 ~]# hdfs dfs -getfacl /project


0630-6.2-什么是HDFS ACL_hadoop_10


3.创建一个子目录


hdfs dfs -mkdir /project/dev


4.检查新的子目录的ACL,以验证是否已经继承了父目录ACL的default的值。


hdfs dfs -getfacl -R /project


0630-6.2-什么是HDFS ACL_hdfs_11


注意:

1.在创建子目录时,default的ACL会从父目录复制到子目录。对父目录默认ACL的后续更改不会影响现有子目录的ACL。

2.对于目录的创建者也叫owner可以直接设置该目录的ACL,否则你需要切换到hdfs用户后才能灵活的给各个目录设置ACL。


自此HDFS ACL的安装使用介绍完毕。


参考:

​https://www.cloudera.com/documentation/enterprise/latest/topics/cdh_sg_hdfs_ext_acls.html​


提示:代码块部分可以左右滑动查看噢


为天地立心,为生民立命,为往圣继绝学,为万世开太平。

温馨提示:如果使用电脑查看图片不清晰,可以使用手机打开文章单击文中的图片放大查看高清原图。


推荐关注Hadoop实操,第一时间,分享更多Hadoop干货,欢迎转发和分享。

0630-6.2-什么是HDFS ACL_hadoop_12

原创文章,欢迎转载,转载请注明:转载自微信公众号Hadoop实操