Hadoop 的代理用户(Proxy User) 功能解释
在$HADOOP_HOME/etc/hadoop下的core-site.xml 配置里,可以新增hadoop集群的代理用户。 在集成配置中,会经常用到。它属于 Hadoop 安全机制的一部分。
以下是对该配置效果的详细说明及示例:
配置效果
<!-- 允许用户 hadoop 从主机 hadoop01 代理用户 alice 和 bob -->
<property><name>hadoop.proxyuser.hadoop.hosts</name><value>hadoop01</value>
</property>
<property><name>hadoop.proxyuser.hadoop.users</name><value>alice,bob</value>
</property>
此配置允许 用户 hadoop 从 主机 hadoop01 发起请求,并模拟 用户 alice 或 bob 执行 Hadoop 集群操作(如读写 HDFS、提交 MapReduce/YARN 作业)。
实际场景示例
场景 1:HiveServer2 代理用户访问 HDFS
-
背景:
- HiveServer2 服务以
hadoop用户运行在hadoop01主机上。 - 用户
alice通过 HiveServer2 提交查询,需要访问 HDFS 路径/user/alice/data。
- HiveServer2 服务以
-
配置生效后的行为:
- HiveServer2 以
hadoop用户的身份,模拟alice用户 访问 HDFS。 - HDFS 会认为请求来自
alice,并检查alice的权限(而非hadoop的权限)。
- HiveServer2 以
-
权限验证:
- 若
/user/alice/data的权限为drwxr-x--- alice supergroup:alice用户有读写权限。hadoop用户无权限,但通过代理机制可模拟alice成功访问。
- 若
场景 2:用户 bob 提交 YARN 作业
-
背景:
- 用户
bob通过客户端工具(如beeline)连接到 HiveServer2,提交一个 Hive 查询,触发 MapReduce 作业。
- 用户
-
配置生效后的行为:
- HiveServer2 以
hadoop用户身份,模拟bob用户 向 YARN 提交作业。 - YARN 会记录作业的提交者为
bob(而非hadoop),并基于bob的权限分配资源。
- HiveServer2 以
权限控制关键点
-
操作系统用户:
alice和bob必须在 Hadoop 集群的所有节点上存在(通过id alice验证)。- 若用户不存在,HDFS 会拒绝访问。
-
HDFS 目录权限:
- 假设
alice需要访问/user/alice/data,需确保该目录权限为:hdfs dfs -ls /user/alice # 输出:drwxr-xr-x - alice supergroup 0 2023-10-01 /user/alice/data - 若权限为
drwx------,则只有alice可访问(代理机制仍有效)。
- 假设
-
YARN 队列权限:
- 若 YARN 队列配置了
acl_submit_applications=alice,bob,则只有这些用户可以提交作业。 - 通过代理机制,
hadoop用户模拟bob提交作业时,YARN 会允许。
- 若 YARN 队列配置了
安全风险与限制
-
最小化主机范围:
- 若
hosts=*,任何主机上的hadoop用户均可代理,存在安全风险。 - 生产环境应指定具体主机(如
hadoop01)。
- 若
-
最小化用户范围:
- 若
users=*,hadoop可模拟任意用户,权限过大。 - 应仅授权必要用户(如
alice,bob)。
- 若
-
代理用户与实际服务用户一致:
- 若 HiveServer2 以
hive用户运行,配置应改为:<property><name>hadoop.proxyuser.hive.hosts</name><value>hadoop01</value> </property> <property><name>hadoop.proxyuser.hive.users</name><value>alice,bob</value> </property>
- 若 HiveServer2 以
总结
- 效果:用户
hadoop可从hadoop01主机代理alice和bob,以他们的身份安全访问 Hadoop 资源。 - 用途:适用于 HiveServer2、Oozie 等服务需代表不同用户执行操作的场景。
- 安全:严格限制
hosts和users范围,避免使用通配符*。
