1、背景
在咱们开发的过程中有这么一种场景, /projectA
目录是 hadoopdeploy
用户创立的,他对这个目录有wrx
权限,同时这个目录属于supergroup
,在这个组中的用户也具备这个目录的wrx
权限,对于其他人,不可拜访这个目录。当初有这么一个非凡的用户root
,我想root用户能够拜访这个目录,在不批改root用户组和其他人的权限的状况下,还有什么形式能够实现这个性能呢?
由上图能够,root
用户想拜访/projectA
目录,在hdfs
中能够通过acl
来实现。
2、环境筹备
# 创立目录[hadoopdeploy@hadoop01 ~]$ hdfs dfs -mkdir /projectA# 列出根目录下的文件夹[hadoopdeploy@hadoop01 ~]$ hdfs dfs -ls /Found 1 itemsdrwxr-xr-x - hadoopdeploy supergroup 0 2023-05-24 20:35 /projectA# 将 /projectA 目录的权限批改成 770, 即其他人没有这个目录的拜访权限[hadoopdeploy@hadoop01 ~]$ hdfs dfs -chmod 770 /projectA# 再次查看发现批改胜利[hadoopdeploy@hadoop01 ~]$ hdfs dfs -ls /Found 1 itemsdrwxrwx--- - hadoopdeploy supergroup 0 2023-05-24 20:35 /projectA[hadoopdeploy@hadoop01 ~]$
从上述代码中可知,咱们创立了一个/projecetA
的目录,且给这个目录的权限为770
,那么其他人
对这个目录应该是没有拜访权限的。 通过上述图片可知,咱们用root
用户上传文件,发现没有权限。
3、开启acl权限
3.1 批改hdfs-site.xml
<!-- 开启acl访问控制权限,默认就开启了 --><property> <name>dfs.namenode.acls.enabled</name> <value>true</value></property>
留神:
在低版本的hadoop上默认是禁用的,高版本默认是开启的。
3.2 重启hdfs集群
[hadoopdeploy@hadoop01 ~]$ stop-dfs.shStopping namenodes on [hadoop01]Stopping datanodesStopping secondary namenodes [hadoop03][hadoopdeploy@hadoop01 ~]$ start-dfs.shStarting namenodes on [hadoop01]Starting datanodesStarting secondary namenodes [hadoop03][hadoopdeploy@hadoop03 ~]$
3.3 应用acl给root用户受权
[hadoopdeploy@hadoop01 ~]$ hdfs dfs -setfacl -m user:root:rwx /projectA[hadoopdeploy@hadoop01 ~]$ hdfs dfs -getfacl /projectA# file: /projectA# owner: hadoopdeploy# group: supergroupuser::rwxuser:root:rwxgroup::rwxmask::rwxother::---[hadoopdeploy@hadoop01 ~]$
3.4 应用 root 用户测试文件上传
[root@hadoop01 ~]# hdfs dfs -put anaconda-ks.cfg /projectA[root@hadoop01 ~]# hdfs dfs -ls /projectAFound 1 items-rw-r--r-- 2 root supergroup 1151 2023-05-24 21:10 /projectA/anaconda-ks.cfg[root@hadoop01 ~]#
能够看到文件上传胜利了。
4、acl的一些简略命令
hdfs dfs -setfacl -m user:root:rwx /projectA
对root
用户设置hdfs dfs -setfacl -m group:root:rwx /projectA
对root
组设置
4.1 设置acl
hdfs dfs -setfacl -m user:root:rwx /projectA
将/projectA
这个目录授予root
用户rwx
权限。
4.2 查看acl
[hadoopdeploy@hadoop01 ~]$ hdfs dfs -getfacl /projectA# file: /projectA# owner: hadoopdeploy# group: supergroupuser::rwxuser:root:rwxgroup::rwxmask::rwxother::---[hadoopdeploy@hadoop01 ~]$ hdfs dfs -ls /Found 1 itemsdrwxrwx---+ - hadoopdeploy supergroup 0 2023-05-24 21:10 /projectA[hadoopdeploy@hadoop01 ~]$
drwxrwx---+
这个+
示意有acl
权限
4.3 移除某个用户的acl
[hadoopdeploy@hadoop01 ~]$ hdfs dfs -setfacl -x user:root /projectA[hadoopdeploy@hadoop01 ~]$ hdfs dfs -getfacl /projectA# file: /projectA# owner: hadoopdeploy# group: supergroupuser::rwxgroup::rwxmask::rwxother::---[hadoopdeploy@hadoop01 ~]$
4.4 删除该目录所有的acl权限
[hadoopdeploy@hadoop01 ~]$ hdfs dfs -setfacl -b /projectA[hadoopdeploy@hadoop01 ~]$ hdfs dfs -getfacl /projectA# file: /projectA# owner: hadoopdeploy# group: supergroupuser::rwxgroup::rwxother::---[hadoopdeploy@hadoop01 ~]$
5、参考链接
1、https://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-common/FileSystemShell.html#setfacl