kerberos使用手册

kerberos使用手册,包括管理员和普通用户。

简介

kerberos是什么?

Kerberos提供了一种单点登录(SSO)的方法。考虑这样一个场景,在一个网络中有不同的服务器,比如,打印服务器、邮件服务器和文件服务器。这些服务器都有认证的需求。很自然的,不可能让每个服务器自己实现一套认证系统,而是提供一个中心认证服务器(AS-Authentication Server)供这些服务器使用。这样任何客户端就只需维护一个密码就能登录所有服务器。

因此,在Kerberos系统中至少有三个角色:认证服务器(AS),客户端(Client)和普通服务器(Server)。客户端和服务器将在AS的帮助下完成相互认证。在Kerberos系统中,客户端和服务器都有一个唯一的名字,叫做Principal。同时,客户端和服务器都有自己的密码,并且它们的密码只有自己和认证服务器AS知道。

kerberos在CDH中的使用

  1. 在各服务之间通信使用kerberos,如各服务连接zookeeper,opentsdb连接hbase。
  2. 使用各服务客户端时,必须首先切换到自己的kerberos账户,才能够连接到各服务,否则会报错。
  3. 启用kerberos后,连接hive只能使用beelinehive不再支持。

普通用户

参考http://web.mit.edu/kerberos/krb5-latest/doc/user/index.html
每人尽量使用自己的账号登陆集群中机器,否则可能在切换kerberos账户时覆盖其他人账号或被覆盖。

  • 使用密码切换用户
1
kinit username

此命令需要输入你在kerberos中的密码

  • 修改密码
1
kpassword
  • 更新credentials
1
kinit -R
  • 销毁credentials
1
kdestroy
  • 使用keytab
1
kinit -k -t user.keytab username

免密码切换用户,但是需要提前生成好keytab,并保证只有自己有读写权限。

1
klist -k user.keytab

查看此keytab中所有principal

管理员

参考http://web.mit.edu/kerberos/krb5-latest/doc/admin/database.html

进入kerberos管理页面,有两种方式:
在Krb5 server所在机器并且当前用户是root的话,可以使用kadmin.local免密码进入;当前用户是非root用户或在其他机器上时,可以使用kadmin $admin_user进入,需要输入此admin用户的密码。
如果需要直接执行命令,使用-q参数

1
kadmin.local -q "listprincs"

列出所有principal: list_principals, listprincs

listprincs [expression]

1
listprincs *test*

查看principal信息: get_principal, getprinc

getprinc [-terse] principal

  • -terse输出更加简洁,各信息之间以tab作为分隔符。

添加principal: add_principal, addprinc

addprinc [options] principal

  • -randkey
    随机生成一个值作为principal的key
  • -pw
    设置密码,此选项一般用在脚本中。
  • 示例
1
2
addprinc -pw password user@DOMAIN.COM
addprinc -randkey user@DOMAIN.COM
  • 另外可以对principal设置过期时间等,具体参考上方链接。

修改principal: modify_principal, modprinc

与addprinc命令选项基本一致, modprinc [options] principal

删除principal: delete_principal, delprinc

delprinc [-force] principal

修改密码: change_password, cpw

change_password [options] principal

  • -randkey
    随机生成一个值作为principal的key
  • -pw
    设置密码,此选项一般用在脚本中。
  • 示例
1
2
cpw user
cpw -pw password user

生成keytab

  • 生成单一的keytab: xst -k ${USERNAME}.keytab ${USERNAME}@DOMAIN.COM
  • 合并多个keytab
1
2
3
4
5
$ ktutil
ktutil: rkt a.keytab
ktutil: rkt b.keytab
ktutil: wkt merge.keytab
ktutil: exit