• 欢迎关注微信公众号:九万里大数据
  • 请使用Ctrl+D收藏本站到书签栏
  • 手机也可访问本站 jwldata.com

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

大数据技术 九万里大数据 2年前 (2021-02-23) 379次浏览 0个评论 扫描二维码
文章目录[隐藏]

CDH6.0.1自带的HUE版本是4.2。
HUE4.2和HUE4.3在使用LdapBackend时有个bug,会导致任意的LDAP用户登录,都是超级管理员。
在HUE4.4版本修复了这个bug。

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

https://issues.cloudera.org/browse/HUE-8675
https://review.cloudera.org/r/13556/

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

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即可。
修复HUE任意LDAP用户登录为超级管理员的bug

源码分析

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

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

结合数据库分析

修复HUE任意LDAP用户登录为超级管理员的bug
在没修改源码之前,在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值会被更新成新的值,跟代码的逻辑完全符合。
修复HUE任意LDAP用户登录为超级管理员的bug

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

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


欢迎关注我的公众号“九万里大数据”,原创技术文章第一时间推送。


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


本站文章,如未注明,均为原创 | 原创文章版权归九万里大数据所有,未经许可不得转载。
本文链接:修复HUE任意LDAP用户登录为超级管理员的bug
喜欢 (2)

您必须 登录 才能发表评论!