Hue 用户管理
用户体系
无论使用Hue自身的用户管理体系还是LDAP用户体系,Hue操作大数据组件使用的是Impersonation机制。用户实际操作时会被模拟为登录的用户。例如以hdfs
登录Hue,Hue以hue
用户运行,那么实际操作时,使用hue
用户的认证方式认证,但使用的时候将hue
用户模拟为hdfs
。
这种方式要求Hadoop配置proxyuser,否则会出现User: xxx is not allowed to impersonate xxx
错误。配置方式为修改HDFS的core-site.xml
,增加:
<property>
<name>hadoop.proxyuser.hue.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.hue.groups</name>
<value>*</value>
</property>
之后重启HDFS。
Hue服务本身的用户配置包含如下:
[desktop]
# Webserver runs as this user
server_user=hue
server_group=hue
# This should be the Hue admin and proxy user
default_user=hue
# This should be the hadoop cluster admin
default_hdfs_superuser=hdfs
- server_user和server_group配置web服务运行时的用户。
- default_user为Hue的后台服务启动用户。上述的Impersonation机制需要允许default_user模拟为用户实际登录Hue的用户。
- default_hdfs_superuser指定HDFS的管理员用户,即namenode启动的用户。
Hue的超级管理员用户可管理用户信息。Hue使用RBAC权限管理。我们以超级管理员用户登录Hue之后,可在顶部菜单右侧(Hue 4.3)或者左侧菜单栏下方(Hue 4.10+)找到Administer Users
,进入用户管理页面。
在Users页面,可以添加和删除用户,指定用户所属的组和用户是否为超级管理员等。
Groups页面可以维护group和权限的对应关系。在组编辑页面中,权限选择位于最下方列表。
这些权限已按照Hue的连接的组件和Hue的页面模块分类,配置和使用较为方便。
认证后端
Hue支持多种认证后端。配置文件注释中列出的有:
# - desktop.auth.backend.AllowFirstUserDjangoBackend
# (Default. Fist login becomes and admin, then relies on user accounts)
# - django.contrib.auth.backends.ModelBackend (entirely Django backend)
# - desktop.auth.backend.AllowAllBackend (allows everyone)
# - desktop.auth.backend.LdapBackend
# - desktop.auth.backend.PamBackend
# - desktop.auth.backend.SpnegoDjangoBackend
# - desktop.auth.backend.KnoxSpnegoDjangoBackend
# - desktop.auth.backend.RemoteUserDjangoBackend
# - libsaml.backend.SAML2Backend
# - desktop.auth.backend.OIDCBackend (New oauth, support Twitter, Facebook, Google+ and Linkedin
其中常用的有如下4种:
- desktop.auth.backend.AllowFirstUserDjangoBackend:如果Hue中没有任何用户,第一个登录的用户自动注册,并成为管理员。此配置为Hue的默认值。
- django.contrib.auth.backends.ModelBackend:使用Django后端,不允许用户在登录页注册,即便是Hue没有任何用户。
- desktop.auth.backend.AllowAllBackend:不认证,任意用户都可以登录。
- desktop.auth.backend.LdapBackend:使用LDAP认证。无需在Hue的用户管理中维护用户信息。
用户管理
本节整理了Hue用户管理时常用的后台操作。
创建超级管理员
如果忘记了Hue超级管理员用户密码,或者是Hue中没有任何超级管理员用户的时候可使用此方式创建一个。需要登录Hue安装所在主机,然后执行:
/usr/lib/hue/build/env/bin/hue createsuperuser
接着按照向导操作,依次输入用户名,Email,密码和确认密码。
修改用户密码
忘记用户密码的时候我们可以使用hue命令的方式操作。前提是必须能够登录Hue所在的主机。
例如我们需要修改hive用户的密码,执行:
/usr/lib/hue/build/env/bin/hue changepassword hive
Changing password for user 'hive'
Password:
Password (again):
Password changed successfully for user 'hive'
然后按照向导,输入新密码和确认一遍新密码,hive用户的密码已修改完毕。
除此之外,我们还可通过hue shell强制修改密码。登录Hue所在的主机,执行。
/usr/lib/hue/build/env/bin/hue shell
进入Hue Python shell界面。例如我们忘记了hive用户的密码,需要将其修改为123456,继续执行如下脚本(使用过Django的同学会非常熟悉这些脚本):
from django.contrib.auth.models import User
# 获取hive用户
user = User.objects.get(username='hive')
# 可查看原密码的hash值
user.password
user.set_password('123456')
# 检查密码是否已正确修改,非必须步骤
from django.contrib.auth.hashers import check_password
# 如果返回true,表示校验通过
check_password('123456', user.password)
# 保存修改。写回数据库
user.save()
提升用户为超级管理员
如果Hue中所有用户都不是超级管理员用户,这种情况我们无法通过Hue管理页面升级某用户为超级管理员。遇见这种情况我们并非束手无策,可以通过后台操作。
首先登录Hue元数据MySQL所在服务器,进入MySQL中Hue数据库(下面例子中Hue的元数据存储在hue数据库中,实际操作时根据具体环境修改):
use hue
select * from auth_user;
执行上面的SQL列出所有的用户信息。找到需要升级为超级管理员的用户名或者用户id,然后执行:
update auth_user set is_superuser=1 where username='xxx'
-- 或者
update auth_user set is_superuser=1 where id=xxx
重新登录Hue即可完成修改。
此外还有一种方法,我们可以使用上述的Hue Shell方式修改。接下来仍以hive用户为例说明。进入Hue shell之后,依次执行:
from django.contrib.auth.models import User
# 获取hive用户
user = User.objects.get(username='hive')
# 设置当前用户为超级管理员
user.is_superuser = True
# 保存修改。写回数据库
user.save()
可将hive用户权限提升为超级管理员。