修复HUE任意LDAP用户登录为超级管理员的bug

目录

背景说明

修复方法

源码分析

结合数据库分析


  • 背景说明

CDH6.0.1自带的HUE版本是4.2

  • HUE4.2和HUE4.3在使用LdapBackend时有个bug,会导致任意的LDAP用户登录,都是超级管理员。

在HUE4.4版本修复了这个bug。

https://issues.cloudera.org/browse/HUE-8675

https://review.cloudera.org/r/13556/

HUE4.2的原始代码(左屏部分)

https://github.com/cloudera/hue/blob/cdh6.0.1-release/desktop/core/src/desktop/auth/backend.py

有bug的代码,在cdh6.0.1-release/desktop/core/src/desktop/auth/backend.py的第470行。

HUE4.4的修复代码(右屏部分)

https://github.com/cloudera/hue/commit/5fa75c3176b2065709021284803aa61e9e72f0a5#

  • 修复方法

将第470行的

profile.creation_method=UserProfile.CreationMethod.EXTERNAL

修改为

profile.creation_method=UserProfile.CreationMethod.EXTERNAL.name

重启HUE即可。

  • 源码分析

第446行,会去检测useradmin_userprofile表中creation_method字段有没有EXTERNAL的值,如果没有的话,会使得标志位is_super变成True,即认为该用户是第一个外部用户,使该用户成为超级管理员。

第470行,也就是有bug的这一行,把登录用户(新用户or老用户)的creation_method字段值改成了CreationMethod.EXTERNAL,这样就会导致useradmin_userprofile表中永远不会有creation_method字段值为EXTERNAL的记录,那么以后所有的外部用户,都会被误认为是第一个外部用户,导致标志位is_super设为True,成了超级管理员。

  • 结合数据库分析

在没修改源码之前,在LDAP上创建了test_user1和test_user2,这两个用户登录后,都变成了超级管理员,且creation_method为CreationMethod.EXTERNAL

修改源码修复后,在LDAP上创建了test_user3和test_user4。在test_user3登录时,因为useradmin_userprofile表中还没有EXTERNAL的值,所以会被当成第一个外部用户,被设置成超级管理员,且creation_method会被设置为EXTERNAL。在test_user4登录时,因为已经useradmin_userprofile表中已经有了EXTERNAL的值,所以test_user4的is_super为默认值False,就是一个普通用户了。在后面hive用户登录,根据代码的第470行和473行,他的creation_method值会被更新成新的值,跟代码的逻辑完全符合。

其他几种Backend也有这个问题,比如pam, spnego, oauth, openid, saml等,因为我没用到所以就暂时不修复了。有需要的可以自助修改。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值