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 items |
| drwxr-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 items |
| drwxrwx--- - hadoopdeploy supergroup 0 2023-05-24 20:35 /projectA |
| [hadoopdeploy@hadoop01 ~]$ |

从上述代码中可知,我们创建了一个/projecetA
的目录,且给这个目录的权限为770
,那么其他人
对这个目录应该是没有访问权限的。 通过上述图片可知,我们用root
用户上传文件,发现没有权限。
3、开启acl权限
3.1 修改hdfs-site.xml
| |
| <property> |
| <name>dfs.namenode.acls.enabled</name> |
| <value>true</value> |
| </property> |

注意:
在低版本的hadoop上默认是禁用的,高版本默认是开启的。
3.2 重启hdfs集群
| [hadoopdeploy@hadoop01 ~]$ stop-dfs.sh |
| Stopping namenodes on [hadoop01] |
| Stopping datanodes |
| Stopping secondary namenodes [hadoop03] |
| [hadoopdeploy@hadoop01 ~]$ start-dfs.sh |
| Starting namenodes on [hadoop01] |
| Starting datanodes |
| Starting 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: supergroup |
| user::rwx |
| user:root:rwx |
| group::rwx |
| mask::rwx |
| other::--- |
| |
| [hadoopdeploy@hadoop01 ~]$ |

3.4 使用 root 用户测试文件上传
| [root@hadoop01 ~]# hdfs dfs -put anaconda-ks.cfg /projectA |
| [root@hadoop01 ~]# hdfs dfs -ls /projectA |
| Found 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: supergroup |
| user::rwx |
| user:root:rwx |
| group::rwx |
| mask::rwx |
| other::--- |
| |
| [hadoopdeploy@hadoop01 ~]$ hdfs dfs -ls / |
| Found 1 items |
| drwxrwx---+ - 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: supergroup |
| user::rwx |
| group::rwx |
| mask::rwx |
| other::--- |
| |
| [hadoopdeploy@hadoop01 ~]$ |

4.4 删除该目录所有的acl权限
| [hadoopdeploy@hadoop01 ~]$ hdfs dfs -setfacl -b /projectA |
| [hadoopdeploy@hadoop01 ~]$ hdfs dfs -getfacl /projectA |
| # file: /projectA |
| # owner: hadoopdeploy |
| # group: supergroup |
| user::rwx |
| group::rwx |
| other::--- |
| |
| [hadoopdeploy@hadoop01 ~]$ |
5、参考链接
1、https://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-common/FileSystemShell.html#setfacl
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统