Kerberos配置.docx

上传人:b****7 文档编号:16499569 上传时间:2023-07-14 格式:DOCX 页数:10 大小:18.36KB
下载 相关 举报
Kerberos配置.docx_第1页
第1页 / 共10页
Kerberos配置.docx_第2页
第2页 / 共10页
Kerberos配置.docx_第3页
第3页 / 共10页
Kerberos配置.docx_第4页
第4页 / 共10页
Kerberos配置.docx_第5页
第5页 / 共10页
Kerberos配置.docx_第6页
第6页 / 共10页
Kerberos配置.docx_第7页
第7页 / 共10页
Kerberos配置.docx_第8页
第8页 / 共10页
Kerberos配置.docx_第9页
第9页 / 共10页
Kerberos配置.docx_第10页
第10页 / 共10页
亲,该文档总共10页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

Kerberos配置.docx

《Kerberos配置.docx》由会员分享,可在线阅读,更多相关《Kerberos配置.docx(10页珍藏版)》请在冰点文库上搜索。

Kerberos配置.docx

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名字是否写对。

我有几次遇到这样的错误都是打字错误引起的。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2