Kerberos配置.docx
- 文档编号:16499569
- 上传时间:2023-07-14
- 格式:DOCX
- 页数:10
- 大小:18.36KB
Kerberos配置.docx
《Kerberos配置.docx》由会员分享,可在线阅读,更多相关《Kerberos配置.docx(10页珍藏版)》请在冰点文库上搜索。
Kerberos配置
1前言
假设你的Openldap已经配置好并成功运行,本文只是介绍如何使Openldap使用Kerberos来验证用户身份。
本配置在FC5上通过,在使用rhe时,很可能会有不同的情况。
2名词解释
Kerberos
基于共享密钥的安全机制,由MIT发明,现在已经被标准化,最新是版本5,简称krb5。
Kerberos特别适合局域网络,Windows2k及以上系统的安全机制即基于kerberos。
Kerberos有多个实现版本,本文使用的一个它的实现叫做mit-kerberos。
SASL
简单认证和安全层(SimpleAuthenticationandSecurityLayer)。
也是一套RFC定义的标准。
它的核心思想是把用户认证和安全传输从应用程序中隔离出来。
像SMTP协议在定义之初都没有考虑到用户认证等问题,现在SMTP可以配置使用SASL来完成这方面的工作。
Openldap同样如此。
SASL支持多种认证方法,比如
ANONYMOUS:
无需认证。
PLAIN:
明文密码方式(cleartextpassword)
DIGEST-MD5:
HTTPDigest兼容的安全机制,基于MD5,可以提供数据的安全传输层。
这个是方便性和安全性结合得最好的一种方式。
也是默认的方式。
GSSAPI:
GenericSecurityServicesApplicationProgramInterface
Gssapi本身是一套API,由IETF标准化。
其最主要也是着名的实现是基于Kerberos的。
所以一般说到gssapi都暗指kerberos实现。
EXTERNAL:
认证已经在环境中实现了,比如SSL/TLS,IPSec.
CyrusSASL
Cyrus-SASL是SASL协议最常用的一个实现。
其他实现还有GNUSASL等。
3环境准备
环境
安装软件包
Kerberosserver:
Krb5-server
Sasl-gssapi:
Cyrus-sasl-gssapi
Kerberosclient:
Krb5-client
如果依赖于别的包,也一并安装
4配置Kerberosserver
配置文件包括下面3个文件
1./etc/
2./var/kerberos/krb5kdc/
3./var/kerberos/krb5kdc/
配置/etc/
这个配置文件设置整个kerberos环境的,所以不但server,而且client也会使用它。
[logging]
default=FILE:
/var/log/
kdc=FILE:
/var/log/
admin_server=FILE:
/var/log/
[libdefaults]
default_realm=
default_tgs_enctypes=des3-hmac-sha1des-cbc-crcdes-cbc-md5
default_tkt_enctypes=des3-hmac-sha1des-cbc-crcdes-cbc-md5
permitted_enctypes=des3-hmac-sha1des-cbc-crcdes-cbc-md5
dns_lookup_realm=false
dns_lookup_kdc=false
ticket_lifetime=24h
forwardable=yes
[realms]
={
kdc=
admin_server=
default_domain=
}
[domain_realm]
.=
=
[kdc]
profile=/var/kerberos/krb5kdc/
[appdefaults]
pam={
debug=false
ticket_lifetime=36000
renew_lifetime=36000
forwardable=true
krb4_convert=false
}
配置/var/kerberos/krb5kdc/
这个配置文件是专门为kdc定义的参数
[kdcdefaults]
v4_mode=nopreauth
[realms]
={
#master_key_type=des3-hmac-sha1
acl_file=/var/kerberos/krb5kdc/
dict_file=/usr/share/dict/words
admin_keytab=/var/kerberos/krb5kdc/
supported_enctypes=des3-hmac-sha1:
normalarcfour-hmac:
normaldes-hmac-sha1:
normaldes-cbc-md5:
normaldes-cbc-crc:
normaldes-cbc-crc:
v4des-cbc-crc:
afs3
}
配置/var/kerberos/krb5kdc/
此文件是Accesscontrol配置。
下面是一个最简单但系统可以工作的配置。
根据实际情况设置你自己的访问控制*
创建realm
>kdb5_utilcreate-r–s
kerbers数据库文件都放在/var/kerberos/krb5kdc/下面。
启动krb5kdc和kadmin两个service
>servicekrb5kdcstart
>servicekadminstart
创建Principal
在Kerberos安全机制里,一个principal就是realm里的一个对象,一个principal总是和一个密钥(secretkey)成对出现的。
这个principal的对应物可以是service,可以是host,也可以是user,对于Kerberos来说,都没有区别。
Kdc(Keydistributecenter)知道所有principal的secretkey,但每个principal对应的对象只知道自己的那个secretkey。
这也是“共享密钥“的由来。
作为例子,下面我们将会创建3个principal,类型分别是service,host,user。
创建principalforuser
>–q“addprinc”
系统会提示输入密码(password)。
请注意密码本身并不是key。
这里只是为了人类使用的方便而使用密码。
真正的key是算法作用在密码上产生的一串byte序列。
创建principalforldapservice
>-q"addprinc-randkey"
注意这次系统不会提示输入密码,因为我们使用了–randkey指定了一个随机密码。
因为ldapserver是程序,它不会介意使用真正的key。
创建principalforhost
>–q“addprinc–randkey”
同样,我们为一个主机生成了一个principal。
基于同样的理由,我们使用了–randkey参数。
获得key
创建了principal之后,我们需要把key从kdc里取出来(kdc知道所有principal的key),交给对应的对象。
在kerberos世界里,这个key一般存放在以keytab作为扩展名的文件里。
取得ldapservice的key
>–q“ktadd–k/tmp/ldap/
-k指定把key存放在一个本地文件中
取得host的key
>–q“ktadd–k/tmp/host/
如果你高兴的话,你甚至也可以取得user的key
>–q“ktadd–k/tmp/ldapadmin”
但是我不建议你这样做,因为一旦这样做以后,你先前设置的密码就失效了。
以后只能使用此keytab文件来通过身份验证。
测试
那么下面的步骤演示了kerberos验证用户身份。
>kinitldapadmin
系统会提示输入密码,如果一切正常,那么会安静的返回。
实际上,你已经通过了kerberos的身份验证,且获得了一个ServiceTGT(Ticket-GrantingTicket).ServiceTGT的意义是,在一段时间内,你都可以用此TGT去请求某些service,比如ldapservice,而不需要再次通过kerberos的认证。
>klist
这条命令会查看系统当前的ticket
>kdestory
这条命令会destroy掉系统当前cache的所有ticket
>kinit–kldapadmin–t/tmp/
这里演示了你确实可以直接使用user的key,而不是口令来通过kerberos的验证。
如果你在前面导出了userldapadmin的key,可以验证一下。
同时如果你运行kinitldapadmin,那么即使输入了正确的password,系统仍然提示密码错误。
5配置Ldap使用kerberos
Ldap是如何使用kerberos的呢这个过程是这样的。
Ldap使用SASL的GSSAPI做身份验证。
而SASL-GSSAPI的实现正好是Kerberos。
首先要配置ldapserver,然后配置Kerberos
配置ldapserver
>vi/etc/openldap/
添加一行
rootdn"uid=ldapadmin,cn=gssapi,cn=auth"
注释掉下面两行,如果有的话
#rootdn"cn=Manager,dc=example,dc=com"
#rootpw{SSHA}7XF8TnEH8Hlv+0XU2Tiqk9bTR32Ixtbx
配置kerberos环境
>scp/etc#这里使用scp,你也可以通过其他方便的方式。
>scp/tmp
>ktutil
>rkt/tmp/#读取key到内存中
>wkt/etc/#写key到系统的默认keytab文件,一般是/etc/
然后重启ldapserver
>serviceldaprestart
测试
>klist
klist:
Nocredentialscachefound(ticketcacheFILE:
/tmp/krb5cc_0)
Kerberos4ticketcache:
/tmp/tkt0
klist:
Youhavenoticketscached
>ldapsearch-h#注意不要用-x参数
SASL/GSSAPIauthenticationstarted
ldap_sasl_interactive_bind_s:
Localerror(-2)
additionalinfo:
SASL(-1):
genericfailure:
GSSAPIError:
UnspecifiedGSSfailure.Minorcodemayprovidemoreinformation(Nocredentialscachefound)
>kinitldapadmin
#用户ldapadmin通过kerberos的验证
>klist
查看ticket,注意下面两行
Defaultprincipal:
ValidstartingExpiresServiceprincipal
01/03/0813:
59:
3901/04/08
>ldapsearch–h
Somethingprintedout.Yougotit!
>klist
注意,现在多了一条访问ldapservice的ticket。
validstartingExpiresServiceprincipal
01/03/0813:
59:
3901/04/08
01/03/0814:
02:
1201/04/08
配置ldapclient
下面我们要配置主机具有访问ldapserver的能力。
一般这种配置是为了使用ldap作为系统的身份认证机制,和PAM结合起来使用。
这方面的配置我也不太了解,也没法深入介绍。
我这里只是演示如何使用hostprincipal。
和上面一样,首先把和keytab文件拷贝到本地。
>scp/etc
>scp/tmp
初始化hostprincipal,取得tgt
>kinit–khost/–t/tmp/
>klist
测试
>ldapsearch–h
6调试
Kerbers和LDAP都是比较复杂的系统。
一般出现问题后都要现把问题定位到ldap或kerberos。
下面是一些查看log信息的机制。
查看kdc的log
>tail-100f/var/log/
查看某个principal是否有效
>kinit–kprincipalName–tkeytabFilePath
在命令行运行ldapserver
>slapd–d9
-d9指定调试级别
在Ldapclient端调试
>ldapsearch–d9–hldapServerAddress
7Troubleshooting
1.Clockskewtoogreatwhilegettinginitialcredentials
在运行kinit–kprincipal–tkeytab后,得到上面的错误。
这是因为时间不同步引起的。
Kerberos是时间敏感的。
所以所有的主机和kerberosserver时间一定要同步。
2.CannotcontactanyKDCforrequestedrealm....
在运行kinit–kprincipal–tkeytab后,得到上面的错误
检查DNS,/etc/hosts看是否能按照名字访问kdcserver。
如果能ping通,但还是出现这样的错误,试作把/etc/里的
kdc=
admin_server=
主机名字改为ip地址
3.ClientnotfoundinKerberosdatabasewhilegettinginitialcredentials
在运行kinit–kprincipal–tkeytab后,得到上面的错误
检查你的principal名字是否写对。
我有几次遇到这样的错误都是打字错误引起的。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Kerberos 配置