Ubuntu 16.04-Kerberos 安装和配置
Kerberos 是一种基于可信性的第三方的网络认证系统。其他两方为用户和用户希望对其进
行身份验证的服务。并不是所有的服务和应用程序可以使用 Kerberos,但是对于那些可以
使用的,它使得网络环境更接近于一步到位,就是所谓的 Single Sign On (SSO)。
概览
如果你刚接触 Kerberos,有几个概念,最好在设置一个 Kerberos 服务器之前了解清楚。大
多数概念将和你在其他环境中所熟悉的概念相关。
Instances:用于服务 principals 和特殊管理 Principal。
1. Principal:任何服务器所提供的用户、计算机、服务都将被定义成 Principal。
2.
3. Realms:Kerberos 安装提供的独特的域的控制,把它想象成你的主机和用户所属的
主机或者组。官方约定这域需要大写。默认的,Ubuntu 将把 DNS 域名转换为大写
当成这里的域。
4. Key Distribution Center: (KDC)由三部分组成,一是 principal 数据库,认证服务
器,和票据授予服务器。每个 Realm 至少要有一个。
5. Ticket Granting Ticket:由认证服务器(AS)签发,Ticket Granting Ticket (TGT)
使用用户的密码加密,这个密码只有用户和 KDC 知道。
6. Ticket Granting Server: (TGS) 根据请求签发服务的票据。
7. Tickets:确认两个 Principal 的身份。一个主体是用户,另一个是由用户请求的服务。
门票会建立一个加密密钥,用于在身份验证会话中的安全通信。
8. Keytab Files:从 KDC 主数据库中提取的文件,并且包含的服务或主机的加密密钥。
总得来讲就是,一个域至少包含一个 KDC,最好能有更多的冗余,它包含一个 principal 数
据库。当用户登录一个被 Kerberos 认证定义的工作站中,KDC 发布一个 TGT。如果用户提
供的证书匹配,用户得到认证,之后就能从 TGS 请求被 kerberos 注册过的服务的票据,用
户凭票据就可以认证并访问服务,而不需要再提供用户名和密码。
Kerberos 服务器端
安装
首先安装 kserver 中 deb 包
sudo dpkg -i -R ./kserver/*.deb
1. 填写域名
2. 填写主机名或者 ip,然后点击 ok
在安装的最后你将被要求为 realm 提供 Kerberos 的主机名和管理服务器名,不一定相同。
tips:默认情况下,realm 是从 KDC 域名创建。
下一步,使用 kdb5_newrealm 工具创建新域。
sudo krb5_newrealm
配置
安装过程中所问到的问题用于配置/etc/krb5.conf 文件。如果你需要调整 kdc 的设置,你只
需要简单的编辑这个文件即可并重新 i 动 krb5-kdc 守护进程。如果你需要从头到尾重新配
置,比如重命名 realm 的名字,你可以输入:
sudo dpkg-reconfigure krb5-kdc
1. 一旦 KDC 正常运行,则需要一个管理员用户–the admin principal。建议使用和平时经
常用的用户名有所区别。在终端提示符下输入 kadmin.local:
在上面的例子中,cloudera-scm 是这个 Principal,/admin 是一个 Instance,@HADOOP.COM
代 表 这 个 realm ( 域 ) 。 “ 日 常 ”Principal , 即 用 户 Principal , 将 会 是 这 样 :
cloudera-scm@HADOOP.COM,并且只有普通用户的权限。
tips:把这里的 HADOOP.COM 和 cloudera-scm 替换成你的 realm 和管理员用户名。
2. 接下来,这个新的管理员用户需要有合适的访问控制列表(ACL)权限。它被配置在
/etc/krb5kdc/kadm5.acl 文件中:
sudo vim /etc/krb5kdc/kadm5.acl
这赋予 cloudera-scm/admin 对域中所有 principals 进行任何操作的能力。你可以对
principals 配置更加严格的权限。这是很方便的,如果你需要一个 admin principal 在
kerberos 客户端中具有较低的权限。更多细节请查看 kadm5.acl 文件
3. 现在重 ikrb5-admin-server 使新的 ACL 生效:
sudo service krb5-admin-server restart
4. 现在这个新的 user principal 可以通过 kinit 命令进行测试:
kinit
cloudera-scm/admin
输入密码后,使用 klist 命令查看 TGT 的信息:
Kerberos Linux Client:
本节主要包含配置一个 Linux 系统成为 Kerberos 客户端。一旦用户成功登陆系统,他将有
权限访问任何被 Kerberos 认证过后的服务。
安装
为了能够在 Kerberos Realm 中被认证,需要 krb5-user 和 libpam-krb5 两个包。其他的几个
包不是必要的但是可以让生态更加友好。
auth-client-config 包使得多个来源认证的 PAM 配置更简单;libpam-ccreds 包将会保存你登
录的认证证书,以防 KDC 挂掉。这个包在笔记本使用公司网络进行 Kerberos 认证,却需要
被网络接受时,也很有用。
配置
配置客户端,在终端输入:
sudo dpkg -i -R ./kclient/*.deb
在主节点安装的时候不会重新填写域名、realm 等,因为之前安装过了,在其他节点由于没
有安装过服务端,所以域名和 realm 等需要重新设置
然后将所有服务重启一下
sudo service krb5-admin-server restart
sudo service krb5-kdc restart
在其他节点只需要安装 kerberos 的 client
1. 安装 kerberos 的客户端如上所示
2. 测试主节点创建的用户
kinit cloudera-scm/admin
这样表示测试成功,其他节点依此类推
CDH 集群启用 Kerberos
1. 在 KDC 中给 Cloudera Manager 添加管理员账号
之前添加过了,就是 cloudera-scm/admin@HADOOP.COM
2. 进入 Cloudera Manager 的“管理”-> “安全”界面
3. 选择“启用 Kerberos”,进入如下界面
确保如下列出的所有检查项都已完成,全部打钩,然后点击继续
4. 点击“继续”,配置相关的 KDC 信息,包括类型、KDC 服务器、KDC Realm、
加密类型以及待创建的 Service Principal(hdfs,yarn,,hbase,hive
等)的更新生命期等