1. Kerberos简介
Kerberos就是一种网络认证的协议,提供了一种登录认证的方法,常用在大数据集群中hadoop相关组件中的安全认证功能,和Kerberos类似的还有ldap。Kerberos主要包括认证服务器(AS),客户端和服务器。Principal是相当于用户名,是客户端和服务器的一个唯一名字,keytab文件是加密的认证文件,一般有Principal和keytab为后缀的认证文件就可以了。认证的时候很少直接使用密码。
2. kerberos管理员常用命令
2.1 登录Kerberos Server命令
在Krb5 server所在机器并且当前用户是root的话,可以使用kadmin.local免密码进入。如果报错,多半是安装了多个Kerberos版本导致的。
登录Kerberos Server服务,命令如下:
root用户:
[root@hadoop60 ~]# kadmin.local
非root用户:
[root@hadoop60 ~]# kadmin.local 用户名
由于版本问题,我的需要制定具体的命令路径,服务器上有多个版本的kerberos
[root@hadoop60 ~]# /usr/sbin/kadmin.local
Authenticating as principal yarn/admin@XXX.COM with password.
kadmin.local:
开始我的机器上的报错信息(其中admin@XXX.COM,XXX.com只是为了隐藏实际的公司名称而已,勿怪)如下所示:
[root@hadoop60 ~]# kadmin.local
Authenticating as principal yarn/admin@XXX.COM with password.
kadmin.local: Unable to load requested database module 'db2': plugin symbol 'kdb_function_table' not found while initializing kadmin.local interface
[root@hadoop60 ~]# which kadmin.local
/usr/local/sbin/kadmin.local
[root@hadoop60 ~]# ll /usr/sbin/kadmin.local
-rwxr-xr-x 1 root root 77552 Apr 13 2018 /usr/sbin/kadmin.local
[root@hadoop60 ~]#
从上面可以看出,有多个版本的kadmin.local命令,因此我使用了/usr/sbin/kadmin.local
2.2 列出所有Kerberos用户
列出Principal: list_principals, listprincs命令
2.3 添加Kerberos用户
命令:add_principal, addprinc
命令格式:addprinc [options] principal
主要options:
- -randkey
随机生成一个值作为principal的key
- -pw
设置密码,此选项一般用在脚本中。
例子:
addprinc -pw password test60@DOMAIN.COM
addprinc -randkey test60@DOMAIN.COM
详细的Options
kadmin.local: addprinc
usage: add_principal [options] principal
options are:
[-randkey|-nokey] [-x db_princ_args]* [-expire expdate] [-pwexpire pwexpdate] [-maxlife maxtixlife]
[-kvno kvno] [-policy policy] [-clearpolicy]
[-pw password] [-maxrenewlife maxrenewlife]
[-e keysaltlist]
[{+|-}attribute]
attributes are:
allow_postdated allow_forwardable allow_tgs_req allow_renewable
allow_proxiable allow_dup_skey allow_tix requires_preauth
requires_hwauth needchange allow_svr password_changing_service
ok_as_delegate ok_to_auth_as_delegate no_auth_data_required
lockdown_keys
where,
[-x db_princ_args]* - any number of database specific arguments.
Look at each database documentation for supported arguments
kadmin.local:
2.4 修改Principal用户信息
相关命令:modify_principal, modprinc
命令格式:modprinc [options] principal
kadmin.local: modprinc
usage: modify_principal [options] principal
options are:
[-x db_princ_args]* [-expire expdate] [-pwexpire pwexpdate] [-maxlife maxtixlife]
[-kvno kvno] [-policy policy] [-clearpolicy]
[-maxrenewlife maxrenewlife] [-unlock] [{+|-}attribute]
attributes are:
allow_postdated allow_forwardable allow_tgs_req allow_renewable
allow_proxiable allow_dup_skey allow_tix requires_preauth
requires_hwauth needchange allow_svr password_changing_service
ok_as_delegate ok_to_auth_as_delegate no_auth_data_required
lockdown_keys
where,
[-x db_princ_args]* - any number of database specific arguments.
Look at each database documentation for supported arguments
kadmin.local:
2.5 修改Principal密码
相关命令:change_password, cpw
kadmin.local: cpw
usage: change_password [-randkey] [-keepold] [-e keysaltlist] [-pw password] principal
kadmin.local:
例如:
2.6 删除Principal信息
相关命令:delete_principal, delprinc
kadmin.local: delprinc
usage: delete_principal [-force] principal
kadmin.local:
例如:
2.7 生成keytab认证文件
kadmin.local: xst
Usage: ktadd [-k[eytab] keytab] [-q] [-e keysaltlist] [-norandkey] [principal | -glob princ-exp] [...]
kadmin.local:
例如:
3. Kerberos普通用户常用命令
3.1 Principal和密码登录Kerberos获取票据credentials
通过用户名和密码登录,获取缓存票据
3.2 通过keytab认证文件获取Kerberos获取票据credentials
与3.1节的方法,差异不大,此步骤必须先生成keytab文件而已。
3.3 列出所有的Kerberos票据credentials信息
主要信息:有效开始时间,过期时间,principal,如果不知道keytab的principal名,可以通过如下命令
klist -k xxx.keytab查看
3.4 销毁kerberos票据credentials
相关命令:kdestroy
3.5 更新Kerberos票据credentials信息
相关命令:kinit -R
更新缓存票据,有多重方法,可以先销毁,然后重新获取。也可以直接更新
总结:
上面是一些kerberos认证常用的命令,无论你使用CDH还是HDP版本的hadoop环境,生产环境中少不了kerberos认证,大数据环境中开启了kerberos认证,则需要分配principal,生成keytab文件给别人,普通用户只有使用keytab加密文件才能提交Spark程序,Hive或者访问hdfs。