hdfs中acl权限管理的简单实用

打印 上一主题 下一主题

主题 871|帖子 871|积分 2613

1、背景

在我们开发的过程中有这么一种场景, /projectA 目录是 hadoopdeploy用户创建的,他对这个目录有wrx权限,同时这个目录属于supergroup,在这个组中的用户也具有这个目录的wrx权限,对于其他人,不可访问这个目录。现在有这么一个特殊的用户root,我想root用户可以访问这个目录,在不修改root用户组和其他人的权限的情况下,还有什么方式可以实现这个功能呢?

由上图可以,root用户想访问/projectA目录,在hdfs中可以通过acl来实现。
2、环境准备
  1. # 创建目录
  2. [hadoopdeploy@hadoop01 ~]$ hdfs dfs -mkdir /projectA
  3. # 列出根目录下的文件夹
  4. [hadoopdeploy@hadoop01 ~]$ hdfs dfs -ls /
  5. Found 1 items
  6. drwxr-xr-x   - hadoopdeploy supergroup          0 2023-05-24 20:35 /projectA
  7. # 将 /projectA 目录的权限修改成 770, 即其他人没有这个目录的访问权限
  8. [hadoopdeploy@hadoop01 ~]$ hdfs dfs -chmod 770 /projectA
  9. # 再次查看发现修改成功
  10. [hadoopdeploy@hadoop01 ~]$ hdfs dfs -ls /
  11. Found 1 items
  12. drwxrwx---   - hadoopdeploy supergroup          0 2023-05-24 20:35 /projectA
  13. [hadoopdeploy@hadoop01 ~]$
复制代码

从上述代码中可知,我们创建了一个/projecetA的目录,且给这个目录的权限为770,那么其他人 对这个目录应该是没有访问权限的。 通过上述图片可知,我们用root用户上传文件,发现没有权限。
3、开启acl权限

3.1 修改hdfs-site.xml
  1. <property>
  2.     <name>dfs.namenode.acls.enabled</name>
  3.     <value>true</value>
  4. </property>
复制代码

注意: 在低版本的hadoop上默认是禁用的,高版本默认是开启的。
3.2 重启hdfs集群
  1. [hadoopdeploy@hadoop01 ~]$ stop-dfs.sh
  2. Stopping namenodes on [hadoop01]
  3. Stopping datanodes
  4. Stopping secondary namenodes [hadoop03]
  5. [hadoopdeploy@hadoop01 ~]$ start-dfs.sh
  6. Starting namenodes on [hadoop01]
  7. Starting datanodes
  8. Starting secondary namenodes [hadoop03]
  9. [hadoopdeploy@hadoop03 ~]$
复制代码
3.3 使用acl给root用户授权
  1. [hadoopdeploy@hadoop01 ~]$ hdfs dfs -setfacl -m user:root:rwx /projectA
  2. [hadoopdeploy@hadoop01 ~]$ hdfs dfs -getfacl /projectA
  3. # file: /projectA
  4. # owner: hadoopdeploy
  5. # group: supergroup
  6. user::rwx
  7. user:root:rwx
  8. group::rwx
  9. mask::rwx
  10. other::---
  11. [hadoopdeploy@hadoop01 ~]$
复制代码

3.4 使用 root 用户测试文件上传
  1. [root@hadoop01 ~]# hdfs dfs -put anaconda-ks.cfg /projectA
  2. [root@hadoop01 ~]# hdfs dfs -ls /projectA
  3. Found 1 items
  4. -rw-r--r--   2 root supergroup       1151 2023-05-24 21:10 /projectA/anaconda-ks.cfg
  5. [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
  1. hdfs dfs -setfacl -m user:root:rwx /projectA
复制代码
将/projectA这个目录授予root用户rwx权限。
4.2 查看acl
  1. [hadoopdeploy@hadoop01 ~]$ hdfs dfs -getfacl /projectA
  2. # file: /projectA
  3. # owner: hadoopdeploy
  4. # group: supergroup
  5. user::rwx
  6. user:root:rwx
  7. group::rwx
  8. mask::rwx
  9. other::---
  10. [hadoopdeploy@hadoop01 ~]$ hdfs dfs -ls /
  11. Found 1 items
  12. drwxrwx---+  - hadoopdeploy supergroup          0 2023-05-24 21:10 /projectA
  13. [hadoopdeploy@hadoop01 ~]$
复制代码
drwxrwx---+ 这个+表示有acl权限
4.3 移除某个用户的acl
  1. [hadoopdeploy@hadoop01 ~]$ hdfs dfs -setfacl -x user:root /projectA
  2. [hadoopdeploy@hadoop01 ~]$ hdfs dfs -getfacl /projectA
  3. # file: /projectA
  4. # owner: hadoopdeploy
  5. # group: supergroup
  6. user::rwx
  7. group::rwx
  8. mask::rwx
  9. other::---
  10. [hadoopdeploy@hadoop01 ~]$
复制代码

4.4 删除该目录所有的acl权限
  1. [hadoopdeploy@hadoop01 ~]$ hdfs dfs -setfacl -b /projectA
  2. [hadoopdeploy@hadoop01 ~]$ hdfs dfs -getfacl /projectA
  3. # file: /projectA
  4. # owner: hadoopdeploy
  5. # group: supergroup
  6. user::rwx
  7. group::rwx
  8. other::---
  9. [hadoopdeploy@hadoop01 ~]$
复制代码
5、参考链接

1、https://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-common/FileSystemShell.html#setfacl

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

光之使者

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表