未加星标

Ubuntu 14.04-Kerberos安装和配置

字体大小 | |
[系统(linux) 所属分类 系统(linux) | 发布者 店小二05 | 时间 20160901 | 作者 红领巾 ] 0人收藏点击收藏

Kerberos是一种基于可信性的第三方的网络认证系统。其他两方为用户和用户希望对其进行身份验证的服务。并不是所有的服务和应用程序可以使用Kerberos,但是对于那些可以使用的,它使得网络环境更接近于一步到位,就是所谓的Single Sign On (SSO)。

这一节介绍Kerberos服务器的安装和配置,和一些客户端配置的实例。

概览

如果你刚接触Kerberos,有几个概念,最好在设置一个Kerberos服务器之前了解清楚。大多数概念将和你在其他环境中所熟悉的概念相关。

Principal:任何服务器所提供的用户、计算机、服务都将被定义成Principal。
Instances:用于服务principals和特殊管理Principal。
Realms:Kerberos安装提供的独特的域的控制,把它想象成你的主机和用户所属的主机或者组。官方约定这域需要大写。默认的,Ubuntu将把DNS域名转换为大写当成这里的域。
Key Distribution Center: (KDC)由三部分组成,一是principal数据库,认证服务器,和票据授予服务器。每个Realm至少要有一个。
Ticket Granting Ticket:由认证服务器(AS)签发,Ticket Granting Ticket (TGT)使用用户的密码加密,这个密码只有用户和KDC知道。
Ticket Granting Server: (TGS) 根据请求签发服务的票据。
Tickets:确认两个Principal的身份。一个主体是用户,另一个是由用户请求的服务。门票会建立一个加密密钥,用于在身份验证会话中的安全通信。
Keytab Files:从KDC主数据库中提取的文件,并且包含的服务或主机的加密密钥。

总得来讲就是,一个域至少包含一个KDC,最好能有更多的冗余,它包含一个principal数据库。当用户登录一个被Kerberos认证定义的工作站中,KDC发布一个TGT。如果用户提供的证书匹配,用户得到认证,之后就能从TGS请求被kerberos注册过的服务的票据,用户凭票据就可以认证并访问服务,而不需要再提供用户名和密码。

Kerberos服务器端
安装

这里,我们将提供一个包含以下属性MIT Kerberos域(根据自己的需要修改它们):

Realm: EXAMPLE.COM
Primary KDC: kdc01.example.com (192.168.0.1)
Secondary KDC: kdc02.example.com (192.168.0.2)
User principal: steve
Admin principal: steve/admin

tips:强烈建议你的网络认证用户的uid和你其他本地用户的uid不在同一个范围(比如:从5000开头)。

在安装Kerberos服务之前,你需要为你的域名配置合理的DNS。由于按照约定Kerberos的域与域名相匹配,本节使用EXAMPLE.COM这个域定义DNS。

另外,Kerberos是一个时间敏感的协议。因此,如果客户机和服务器之间的本地系统时间超过五分钟(默认情况下),工作站将无法进行身份验证。要纠正这个问题,所有的主机都应该把自己的时间与统一一个(NTP)服务器同步。细节设置NTP参阅使用NTP进行时间同步。

创造Kerberos领域的第一步是安装krb5-KDC和rb5-admin-server软件包。从终端输入:

sudo apt-get install krb5-kdc krb5-admin-server

在安装的最后你将被要求为realm提供Kerberos的主机名和管理服务器名,不一定相同。

tips:默认情况下,realm是从KDC域名创建。

下一步,使用kdb5_newrealm工具创建新域。

sudo krb5_newrealm
配置

安装过程中所问到的问题用于配置/etc/krb5.conf文件。如果你需要调整kdc的设置,你只需要简单的编辑这个文件即可并重新i动krb5-kdc守护进程。如果你需要从头到尾重新配置,比如重命名realm的名字,你可以输入:

sudo dpkg-reconfigure krb5-kdc

一旦KDC正常运行,则需要一个管理员用户–the admin principal。建议使用和平时经常用的用户名有所区别。在终端提示符下输入kadmin.local:

sudo kadmin.local
Authenticating as principal [email protected] with password.
kadmin.local: addprinc steve/admin
WARNING: no policy specified for [email protected]; defaulting to no policy
Enter password for principal "[email protected]":
Re-enter password for principal "[email protected]":
Principal "[email protected]" created.
kadmin.local: quit

在上面的例子中,steve是这个Principal,/admin是一个Instance,@EXAMPLE.COM代表这个realm(域)。“日常”Principal,即用户Principal,将会是这样:[email protected],并且只有普通用户的权限。

tips:把这里的EXAMPLE.COM和steve替换成你的realm和管理员用户名。

接下来,这个新的管理员用户需要有合适的访问控制列表(ACL)权限。它被配置在/etc/krb5kdc/kadm5.acl文件中:

[email protected]

这赋予steve/admin对域中所有principals进行任何操作的能力。你可以对principals配置更加严格的权限。这是很方便的,如果你需要一个admin principal在kerberos客户端中具有较低的权限。更多细节请查看kadm5.acl文件。

现在重ikrb5-admin-server 使新的ACL生效:

sudo service krb5-admin-server restart

现在这个新的user principal 可以通过kinit命令进行测试:

kinit steve/admin
[email protected]'s Password:

输入密码后,使用klist命令查看TGT的信息:

klist
Credentials cache: FILE:/tmp/krb5cc_1000
Principal: [email protected]
Issued Expires Principal
Jul 13 17:53:34 Jul 14 03:53:34 [email protected]

其中的缓存文件krb5cc_1000由krb5cc_ 前缀和用户的id(uid)组成,这里是1000.你应该在/etc/host文件中添加一个入口,这样客户端才能访问到KDC。比如:

192.168.0.1 kdc01.example.com kdc01

把 192.168.0.1 替换成你的KDC的ip地址。这经常发生在你的Kerberos域包含被路由分割的不同的网络。

使客户端自动定位KDC的Realm的最佳方式,是实用DNS SRV 记录。添加下面的内容到 /etc/named/db.example.com:

_kerberos._udp.EXAMPLE.COM. IN SRV 1 0 88 kdc01.example.com.
_kerberos._tcp.EXAMPLE.COM. IN SRV 1 0 88 kdc01.example.com.
_kerberos._udp.EXAMPLE.COM. IN SRV 10 0 88 kdc02.example.com.
_kerberos._tcp.EXAMPLE.COM. IN SRV 10 0 88 kdc02.example.com.
_kerberos-adm._tcp.EXAMPLE.COM. IN SRV 1 0 749 kdc01.example.com.
_kpasswd._udp.EXAMPLE.COM. IN SRV 1 0 464 kdc01.example.com.

tips:用你的主机名,主KDC和从KDC替换掉EXAMPLE.COM, kdc01, 和 kdc02

参考 域名解析服务 (DNS) 获得设置DNS相关细节.

现在,你的新Kerberos域已经为认证客户端准备好。

Secondary KDC

一旦你在你的网络中有了一个KDC,拥有一个Secondary KDC是一个好的实践,以防主KDC不可用。如果你的Kerberos客户端在不同的网络中(可能被使用NAT的路由分隔开),在每一个网络中配置secondary KDC是一个明智的选择。


首先,安装包,当被询问Kerberos和管理服务器名时填入主KDC的名字:

sudo apt-get install krb5-kdc krb5-admin-server

一旦包被安装后,创建Secondary KDC的主机实体。在命令提示符下输入:

kadmin -q "addprinc -randkey host/kdc02.example.com"

tips:随后,使用任何kadmin的命令是,你将被提示输入username/admin@EXAMPLE.COM实体的密码。

提取keytab文件:

kadmin -q "ktadd -norandkey -k keytab.kdc02 host/kdc02.example.com"

现在在你当前目录应该有一个keytab.kdc02的文件,把他移动到/etc/krb5.keytab:

sudo mv keytab.kdc02 /etc/krb5.keytab
tips:如果keytab.kdc02的路径不同,看情况调整。
你还可以在Keytab文件中列出这些实体,在解决故障时很有用,使用klist命令:
sudo klist -k /etc/krb5.keytab

-k选项表示这是一个keytab文件。

接下来在每个KDC节点上需要有kpropd.acl文件来列出所有域中的KDC,在主KDC和secondary KDC,创建/etc/krb5kdc/kpropd.acl:

[email protected]
[email protected]

在Secondary KDC上创建一个空的数据库:

sudo kdb5_util -s create

现在,开启kpropd守护进程,用来监听kprop功能的连接。kprop是用来传输转储文件的。

sudo kpropd -S

在主KDC的终端创建实体数据库的转储文件:

sudo kdb5_util dump /var/lib/krb5kdc/dump

提取主KDC的keytab文件并拷贝到/etc/krb5.keytab:

kadmin -q "ktadd -k keytab.kdc01 host/kdc01.example.com"
sudo mv keytab.kdc01 /etc/krb5.keytab

tips:保证在提取keytab之前有kdc01.example.com的主机。

使用kprop功能向Secondary KDC推送数据库:

sudo kprop -r EXAMPLE.COM -f /var/lib/krb5kdc/dump kdc02.example.com

tips:如果传输成功的话,应该会有一个成功的信息。如果是一个错误信息,请在secondary KDC上的/var/log/syslog中查看更多信息。

你可能需要创建一个cron任务,来周期性地跟新Secondary KDC数据库。比如,下面的命令将每个小时推送一次数据库(请注意,长行已被拆分,以适应本文档的格式):

# m h dom mon dow command
0 * * * * /usr/sbin/kdb5_util dump /var/lib/krb5kdc/dump &&
/usr/sbin/kprop -r EXAMPLE.COM -f /var/lib/krb5kdc/dump kdc02.example.com

回到Secondary KDC,创建一个stash用来保存Kerberos master key:

sudo kdb5_util stash

最后,在 Secondary KDC开启krb5-kdc守护进程:

sudo service krb5-kdc start

现在Secondary KDC应该已经可以在这个Realm签发票据了。你可以在Primary KDC上停止krb5-kdc进程,并使用kinit请求票据来测试。如果一切运行正常的话,你可以从Secondary KDC请求到票据。否则,查看下Secondary KDC上的/var/log/syslog and /var/log/auth.log吧。

Kerberos linux Client:

本节主要包含配置一个Linux系统成为Kerberos客户端。一旦用户成功登陆系统,他将有权限访问任何被Kerberos认证过后的服务。

安装

为了能够在Kerberos Realm中被认证,需要krb5-user和libpam-krb5两个包。其他的几个包不是必要的但是可以让生态更加友好。在命令提示符下输入以下命令来安装包:

sudo apt-get install krb5-user libpam-krb5 libpam-ccreds auth-client-config

auth-client-config包使得多个来源认证的PAM配置更简单;libpam-ccreds包将会保存你登录的认证证书,以防KDC挂掉。这个包在笔记本使用公司网络进行Kerberos认证,却需要被网络接受时,也很有用。

配置

配置客户端,在终端输入:

sudo dpkg-reconfigure krb5-config

你将被提示输入Kerberos Realm的名字。另外,如果你没有用Kerberos SRV记录设置DNS,菜单会提示你输入KDC和Realm Administration服务器的主机名。

dpkg-reconfigure为你的Realm在/etc/krb5.conf文件中填入了一些内容。这些内容应该与下列内容类似:

[libdefaults]
default_realm = EXAMPLE.COM
...
[realms]
EXAMPLE.COM = { kdc = 192.168.0.1 admin_server = 192.168.0.1
}

tips:如果你设置的网络认证用户都和“安装”的建议一样从500开始,然后,你就可以告诉PAM只尝试验证UID>5000的Kerberos用户:

# Kerberos should only be applied to ldap/kerberos users, not local ones.
for i in common-auth common-session common-account common-password; do
sudo sed -i -r \
-e 's/pam_krb5.so minimum_uid=1000/pam_krb5.so minimum_uid=5000/' \
/etc/pam.d/$i
done

这将避免在一个本地用户修改密码时被要求输入(不存在的)Kerberos密码。

你可以用kinit功能请求一个票据来测试你的配置,比如:

kinit [email protected]
Password for [email protected]:

当票据被授权,你可以用klist查看票据的详情:

klist
Ticket cache: FILE:/tmp/krb5cc_1000
Default principal: [email protected]
Valid starting Expires Service principal
07/24/08 05:18:56 07/24/08 15:18:56 [email protected]
renew until 07/25/08 05:18:57
Kerberos 4 ticket cache: /tmp/tkt1000
klist: You have no tickets cached

接着,使用auth-client-config来配置libpam-krb5模块,来在登录时请求票据:

sudo auth-client-config -a -p kerberos_example

现在你应该在成功登录认证后获得了一个票据。

资源
查看更多Kerberos的MIT版本信息,请访问MIT Kerberos官网。
Ubuntu Wiki Kerberos有更多的细节。
O’Reilly的Kerberos: The Definitive Guide在配置Kerberos方面是一个非常好的参考。
另外,当你有Kerberos的相关问题时,欢迎到Freenode的#ubuntu-server和#kerberos IRC频道查看或提问。

更多Ubuntu相关信息见Ubuntu 专题页面 http://www.codesec.net/topicnews.aspx?tid=2

本文地址:http://www.codesec.net/Linux/2016-09/134949.htm


Ubuntu 14.04-Kerberos安装和配置

本文系统(linux)相关术语:linux系统 鸟哥的linux私房菜 linux命令大全 linux操作系统

分页:12
转载请注明
本文标题:Ubuntu 14.04-Kerberos安装和配置
本站链接:http://www.codesec.net/view/481895.html
分享请点击:


1.凡CodeSecTeam转载的文章,均出自其它媒体或其他官网介绍,目的在于传递更多的信息,并不代表本站赞同其观点和其真实性负责;
2.转载的文章仅代表原创作者观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,本站对该文以及其中全部或者部分内容、文字的真实性、完整性、及时性,不作出任何保证或承若;
3.如本站转载稿涉及版权等问题,请作者及时联系本站,我们会及时处理。
登录后可拥有收藏文章、关注作者等权限...
技术大类 技术大类 | 系统(linux) | 评论(0) | 阅读(19)