在Ubuntu Linux上了解MIT Kerberos

Updates on 2018.12.12

Kerberos is used in hadoop systems.

Kerberos是一种广泛使用的网络安全认证服务。在绝大部分企业内网广泛使用的Windows域,其基础的访问安全机制就是Kerberos。主流的大数据平台和Linux集群管理系统的安全机制也是基于Kerberos的。因此,Kerberos是目前最广泛使用的IT生产环境网络安全基础设施之一。

Kerberos是一种集中式的网络安全协议。Kerberos服务器(KDC)管理所有principal (主体)的密钥信息,负责验证身份并签发Ticket (安全票据)。Kerberos协议中,密码不会在网络上传输,而票据则具有时效性,通信数据也是加密的。Kerberos能有效确认安全主体 -- 用户, 机器,服务等的身份。这些措施使得Kerberos是一种强安全性的Client/Server网络计算技术。

Kerberos给人的第一感觉是比较复杂。实际上,在Linux上安装配置一个基础的Kerberos实验环境还是比较容易的。在本文中,我使用两台Ubuntu Linux虚拟机搭建了一个基础的Kerberos环境,并进行了测试验证。

搭建虚拟机环境

请参考文章 Linux虚拟机环境 来搭建虚拟机环境。在本实验中,我们将会用到其中的两台,

  1. auth.027yunwei.com 用于安装Kerberos服务端系统
  2. ubuntu.027yunwei.com 用于安装Kerberos客户端系统

安装Kerberos服务器软件

在auth.027yunwei.com上安装Kerberos服务器软件包。

$ sudo apt install -y krb5-kdc krb5-admin-server

在安装时,安装包会提示要输入一些参数,

  1. 是否需要自动配置krb5kdc参数?选择是(Yes)
  2. 填写默认的Kerberos version 5 realm: 接受默认值,即 027YUNWEI.COM
  3. 填写admin server: auth.027yunwei.com
  4. 填写kdc server: auth.027yunwei.com

初始化Kerberos数据库

kdb5_util用来创建和管理Kerberos数据库,主密码以及密码策略等。由于kdb5_util需要从/dev/random设备取得随机数用于安全密码计算,而新创建的Linux虚拟机很可能因为系统熵不够导致随机数不够用的情况。这时可以使用haveged增加系统的熵。 在auth.027yunwei.com上执行以下命令

$ sudo apt install haveged
$ sudo kdb5_util create -r 027YUNWEI.COM -s

请记住所输入的master key。

启动Kerberos服务

Kerberos有两个服务需要启动, #. 一个是kdc, 用于验证Principal和签发票据 #. 一个是admin, 用于远程管理Kerberos数据库

$ sudo service krb5-kdc start
$ sudo service krb5-admin-server start

增加一个用户principal

为了简化实验,我们略去添加远程管理员的过程,而使用本地默认管理员root来添加一个测试用户user1。

$ sudo kadmin.local add_principal user1

上面的命令执行时会提示输入密码。请输入密码并记住。

测试

在客户机ubuntu.027yunwei.com上安装Kerberos客户端工具,

$ sudo apt install -y krb5-user

安装时会提示输入Kerberos服务及域的信息,请参考下面的值进行输入:

  1. 填写默认的Kerberos version 5 realm: 接受默认值,即 027YUNWEI.COM
  2. 填写admin server: auth.027yunwei.com
  3. 填写kdc server: auth.027yunwei.com

使用kinit来获取用户的TGT, 使用klist来查看TGT。

$ kinit -p user1
$ klist

完毕。

思考

  1. Kerberos安全性的命门何在?
  2. 客户端软件和服务端软件应该如何加入Kerberos安全验证?
  3. 随着微服务架构的流行,众多服务的安全验证是怎么保证的?Kerberos是不是一个好的选择?