Knox is not allowed to impersonate admin
# 一、问题现象:通过 Knox 访问 HDFS 返回授权异常
在 Knox 服务已经正常启动的前提下,通过 Knox Gateway 访问 HDFS Web 页面时,页面无法正常展示,返回如下异常信息。

典型访问路径如下:
https://dev1:6543/gateway/default/hdfs/index.html?host=http://dev1:50070
1
浏览器或接口返回内容为:
{
"RemoteException": {
"message": "User: knox is not allowed to impersonate admin",
"exception": "AuthorizationException",
"javaClassName": "org.apache.hadoop.security.authorize.AuthorizationException"
}
}
1
2
3
4
5
6
7
2
3
4
5
6
7
现象特征
- Knox Gateway 本身工作正常
- 请求已成功转发至 HDFS
- HDFS 在代理校验阶段拒绝请求并返回 AuthorizationException
# 二、问题根因:HDFS 未授权 knox 作为 proxyuser
Knox 的典型工作模式并不是以最终访问用户的身份直接访问 Hadoop 服务,而是:
由 Knox 进程用户(如 knox)作为代理入口, 再 impersonate 目标用户(如 admin)访问后端服务
在 HDFS 侧,这一行为必须显式通过 proxyuser 授权规则 允许,否则 Namenode 会在安全校验阶段直接拒绝代理请求。
当 core-site 中缺少 knox 对应的 proxyuser 配置时,就会出现如下结果:
- knox 尝试 impersonate admin
- Namenode 校验 proxyuser 白名单失败
- 抛出:
User: knox is not allowed to impersonate admin
对应的配置缺失状态如下图所示:

结论
该问题并非 Knox 配置错误,而是 HDFS 侧未放行 knox 的代理权限。
# 三、修复思路:在 core-site 中补齐 proxyuser 规则
# 3.1 proxyuser 配置项说明
HDFS 中与代理相关的核心配置为:
hadoop.proxyuser.<user>.hostshadoop.proxyuser.<user>.groups
在本场景中,代理用户为 knox,因此需要配置:
hadoop.proxyuser.knox.hosts
hadoop.proxyuser.knox.groups
1
2
2
配置语义说明
- hosts:允许发起代理请求的 Knox 所在主机(推荐使用 FQDN)
- groups:允许被代理的目标用户所属用户组
# 3.2 结合发行版的填写规则说明
在当前 ttr 发行版本中:
- Hadoop 用户的主用户组为
hadoop - Knox 需要代理的用户(如 admin)隶属于该组
因此对应配置可写为:
hadoop.proxyuser.knox.hosts=knox-host.example.com
hadoop.proxyuser.knox.groups=hadoop
1
2
2
说明
不同发行版对用户组的规划可能不同,实际部署中应以目标用户所属组为准进行填写。
# 四、配置生效方式:需要重启的组件范围
proxyuser 规则由 Hadoop 服务端在运行时加载,单纯保存配置并不会立即生效。
必要条件
至少需要重启 HDFS 相关组件,尤其是 Namenode,因为代理校验逻辑发生在 Namenode 侧。
在实际环境中,core-site 被多个组件共享,为避免出现配置版本不一致的问题,通常会同步刷新以下组件:
| 组件 | 说明 |
|---|---|
| HDFS | 必须重启,代理校验核心 |
| Hadoop | 建议重启,公共配置依赖 |
| YARN | 建议重启,读取 core-site |
| HBase | 常见依赖 HDFS |
| Hive | 常见通过代理访问 HDFS |
# 五、结果验证:Knox 访问 HDFS 恢复正常
完成 proxyuser 配置并重启相关组件后,再次通过 Knox 访问相同路径:
https://dev1:6543/gateway/default/hdfs/index.html?host=http://dev1:50070
1
页面可正常加载,不再返回 impersonate 相关的 AuthorizationException。
