《2022年配置OpenLDAP使用Kerberos验证 .pdf》由会员分享,可在线阅读,更多相关《2022年配置OpenLDAP使用Kerberos验证 .pdf(6页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、配置 OpenLDAP 使用 Kerberos 验证1 前言 假设你的 Openldap 已经配置好并成功运行,本文只是介绍如何使Openldap 使用 Kerberos 来验证用户身份。本配置在 FC5上通过,在使用rhe时,很可能会有不同的情况。2 名词解释 2.1 Kerberos 基于 共享密钥的安全机制,由 MIT 发明,现在已经被标准化,最新是版本5,简称 krb5。Kerberos 特别适合局域网络, Windows2k及以上系统的安全机制即基于 kerberos 。Kerberos 有多个实现版本, 本文使用的一个它的实现叫做mit? -kerberos 。2.2 SASL 简
2、单认证和安全层 (Simple Authentication and Security Layer)。也是一套 RFC定义的标准。它的核心思想是把用户认证和安全传输从应用程序中隔离出来。像 SMTP 协议在定义之初都没有考虑到用户认证等问题,现在 SMTP可以配置使用 SASL来完成这方面的工作。 Openldap同样如此。 SASL支持多种认证方法,比如? ANONYMOUS: 无需认证。? PLAIN :明文密码方式 (cleartext password) ? DIGEST -MD5: HTTP Digest 兼容的安全机制,基于MD5 ,可以提供数据的安全传输层。 这个是方便性和安全性
3、结合得最好的一种方式。也是默认的方式。 ? GSSAPI :Generic Security Services Application Program Interface Gssapi 本身是一套 API,由 IETF 标准化。其最主要也是著名的实现是基于Kerberos 的。所以一般说到gssapi 都暗指 kerberos 实 现。 ? EXTERNAL :认证已经在环境中实现了,比如SSL/TLS, IPSec. 2.3 Cyrus SASL Cyrus-SASL是 SASL协议最常用的一个实现。其他实现还有GNU SASL等。3 环境准备 3.1 环境 (10.10.11.11) (1
4、0.10.11.12) (10.10.11.13) 3.2 安装软件包 Kerberos server: Krb5-server Sasl-gssapi: Cyrus-sasl-gssapi Kerberos client: Krb5-client 如果依赖于别的包,也一并安装4 配置 Kerberos server 配置文件包括下面3 个文件 1. /etc/krb5.conf 2. /var/kerberos/krb5kdc/kdc.conf 3. /var/kerberos/krb5kdc/kadm5.acl 4.1 配置/etc/krb5.conf 这个配置文件设置整个kerberos
5、 环境的,所以不但server ,而且 client也会使用它。 logging default = FILE:/var/log/krb5libs.log kdc = FILE:/var/log/krb5kdc.log admin_server = FILE:/var/log/kadmind.log libdefaults default_realm = EXAMPLE.COM 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 6 页 - - - - - - - - - d
6、efault_tgs_enctypes = des3-hmac-sha1 des-cbc-crc des-cbc-md5 default_tkt_enctypes = des3-hmac-sha1 des-cbc-crc des-cbc-md5 permitted_enctypes = des3-hmac-sha1 des-cbc-crc des-cbc-md5 dns_lookup_realm = false dns_lookup_kdc = false ticket_lifetime = 24h forwardable = yes realms EXAMPLE.COM = kdc = :8
7、8 admin_server = :749 default_domain = domain_realm = EXAMPLE.COM = EXAMPLE.COM kdc profile = /var/kerberos/krb5kdc/kdc.conf appdefaults pam = debug = false ticket_lifetime = 36000 renew_lifetime = 36000 forwardable = true krb4_convert = false 4.2 配置/var/kerberos/krb5kdc/kdc.conf 这个配置文件是专门为kdc 定义的参数
8、 kdcdefaults v4_mode = nopreauth realms EXAMPLE.COM = #master_key_type = des3-hmac-sha1 acl_file = /var/kerberos/krb5kdc/kadm5.acl dict_file = /usr/share/dict/words admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab supported_enctypes = des3-hmac-sha1:normal arcfour-hmac:normal des-hmac-sha1:normal d
9、es-cbc-md5:normal des-cbc-crc:normal des-cbc-crc:v4 des-cbc-crc:afs3 4.3 配置/var/kerberos/krb5kdc/kadm5.acl 此文件是 Access control配置。下面是一个最简单但系统可以工作的配置。根据实际情况设置你自己的访问控制/adminEXAMPLE.COM * 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 6 页 - - - - - - - - - 4.4 创建 r
10、ealm kdb5_util create -r EXAMPLE.COM s kerbers数据库文件都放在 /var/kerberos/krb5kdc/下面。启动 krb5kdc 和 kadmin两个 service service krb5kdc start service kadmin start 4.5 创建 Principal 在 Kerberos 安全机制里, 一个 principal就是 realm 里的一个对象,一个 principal总是和一个密钥( secret key )成对出现的。这个principal的对应物可以是 service , 可以是 host , 也可以是
11、user , 对于 Kerberos来说,都没有区别。 Kdc(Key distribute center) 知道所有 principal的 secret key,但每个 principal对应的对象只知道自己的那个secret key。这也是“共享密钥“的由来。作为例子,下面我们将会创建3 个 principal,类型分别是service ,host ,user 。4.5.1 创建 principal for user Kadmin.local q “addprinc emailldapadminEXAMPLE.COM/email” 系统会提示输入密码 (password) 。请注意密码本身
12、并不是key。这里只是为了人类使用的方便而使用密码。真正的key是算法作用在密码上产生的一串byte 序列。 4.5.2 创建 principal for ldap service kadmin.local -q addprinc -randkey ldap/EXAMPLE.COM 注意这次系统不会提示输入密码,因为我们使用了randkey 指定了一个随机密码。因为ldap server是程序,它不会介意使用真正的key。 4.5.3 创建 principal for host kadmin.local q “addprinc randkey host/EXAMPLE.COM” 同样,我们为一
13、个主机生成了一个principal。基于同样的理由,我们使用了randkey参数。 /float 4.6 获得 key 创建了 principal之后,我们需要把key 从 kdc 里取出来 (kdc 知道所有 principal的 key) ,交给对应的对象。在kerberos 世界里,这个 key 一般存放在以 keytab 作为扩展名的文件里。4.6.1 取得 ldap service的 key kadmin.local q “ktadd k /tmp/ldapsrv.keytab ldap/” -k 指定把 key 存放在一个本地文件中4.6.2 取得 host 的 key kadmi
14、n.local q “ktadd k /tmp/host_client.keytab host/” 4.6.3 如果你高兴的话,你甚至也可以取得user 的 key kadmin.local q “ktadd k /tmp/user_ldapadmin.keytab ldapadmin” 但是我不建议你这样做,因为一旦这样做以后, 你先前设置的密码就失效了。 以后只能使用此keytab文件来通过身份验证。4.7 测试 那么下面的步骤演示了kerberos 验证用户身份。 kinit ldapadmin 系统会提示输入密码,如果一切正常,那么会安静的返回。实际上,你已经通过了 kerberos
15、的身份验证,且获得了一个 Service TGT(Ticket-Granting Ticket). 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 6 页 - - - - - - - - - Service TGT的意义是, 在一段时间内,你都可以用此 TGT去请求某些 service ,比如 ldap service,而不需要再次通过kerberos 的认证。 klist 这条命令会查看系统当前的ticket kdestory 这条命令会 destroy 掉系统当前 c
16、ache 的所有 ticket kinit k ldapadmin t /tmp/user_ldapadmin.keytab 这里演示了你确实可以直接使用 user 的 key,而不是口令来通过kerberos 的验证。如果你在前面导出了 user ldapadmin 的 key, 可以验证一下。同时如果你运行 kinit ldapadmin ,那么即使输入了正确的password,系统仍然提示密码错误。5 配置 Ldap使用 kerberos Ldap是如何使用 kerberos 的呢?这个过程是这样的。Ldap使用 SASL的 GSSAPI 做身份验证。而 SASL-GSSAPI 的实现正
17、好是 Kerberos 。首先要配置 ldap server,然后配置 Kerberos 5.1 配置 ldap server vi /etc/openldap/slapd.conf 添加一行 rootdn uid=ldapadmin,cn=gssapi,cn=auth 注释掉下面两行,如果有的话1. rootdn cn=Manager,dc=example,dc=com 2. rootpw SSHA7XF8TnEH8Hlv+0XU2Tiqk9bTR32Ixtbx 5.2 配置 kerberos 环境 scp :/etc/krb5.conf /etc#这里使用 scp,你也可以通过其他方便的方
18、式。 scp :/tmp/ldapsrv.keytab /tmp ktutil rkt /tmp/ldapsrv.keytab #读取 key 到内存中 wkt /etc/krb5.keytab #写 key到系统的默认 keytab 文件,一般是 /etc/krb5.keytab 然后重启 ldap server service ldap restart 5.3 测试 klist klist: No credentials cache found (ticket cache FILE:/tmp/krb5cc_0) Kerberos 4 ticket cache: /tmp/tkt0 klis
19、t: You have no tickets cached ldapsearch -h #注意不要用 -x 参数 SASL/GSSAPI authentication started ldap_sasl_interactive_bind_s: Local error (-2) additional info: SASL(-1): generic failure: GSSAPI Error: Unspecified GSS failure. Minor code may provide more information (No credentials cache found) kinit lda
20、padmin 1. 用户 ldapadmin 通过 kerberos 的验证名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 6 页 - - - - - - - - - klist 查看 ticket,注意下面两行 Default principal: emailldapadminEXAMPLE.COM/email Valid starting Expires Service principal 01/03/08 13:59:39 01/04/08 13:59:39 krb
21、tgt/EXAMPLE.COMEXAMPLE.COM ldapsearch h Something printed out. You got it! klist 注意,现在多了一条访问ldap service的 ticket。 valid starting Expires Service principal 01/03/08 13:59:39 01/04/08 13:59:39 krbtgt/EXAMPLE.COMEXAMPLE.COM 01/03/08 14:02:12 01/04/08 13:59:39 ldap/flnxldap11.EXAMPLE.comEXAMPLE.COM 5.4
22、配置 ldap client 下面我们要配置主机具有访问 ldap server 的能力。 一般这种配置是为了使用ldap 作为系统的身份认证机制, 和 PAM结合起来使用。这方面的配置我也不太了解,也没法深入介绍。我这里只是演示如何使用 host principal。和上面一样,首先把krb5.conf和 keytab 文件拷贝到本地。 scp :/etc/krb5.conf /etc scp :/tmp/host_client.keytab /tmp 初始化 host principal,取得 tgt kinit k host/ t /tmp/host_client.keytab klis
23、t 测试 ldapsearch h 6 调试 Kerbers 和 LDAP 都是比较复杂的系统。 一般出现问题后都要现把问题定位到 ldap 或 kerberos 。下面是一些查看log 信息的机制。查看 kdc 的 log tail -100f /var/log/krb5kdc.log 查看某个 principal是否有效 kinit k principalName t keytabFilePath 在命令行运行 ldap server slapd d9 -d9 指定调试级别在 Ldap client端调试 ldapsearch d9 h ldapServerAddress 7 Troubl
24、e shooting 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 6 页 - - - - - - - - - 1. Clock skew too great while getting initial credentials 在运行 kinit k principal t keytab 后,得到上面的错误。这是因为时间不同步引起的。Kerberos 是时间敏感的。所以所有的主机和kerberos server 时间一定要同步。2. Cannot contact any
25、 KDC for requested realm. 在运行 kinit k principal t keytab后,得到上面的错误检查 DNS ,/etc/hosts看是否能按照名字访问 kdc server 。如果能 ping 通,但还是出现这样的错误,试作把/etc/krb5.con里的 kdc = :88 admin_server = :749 主机名字改为 ip 地址3. Client not found in Kerberos database while getting initial credentials 在运行 kinit k principal t keytab后,得到上面的错误检查你的principal名字是否写对。我有几次遇到这样的错误都是打字错误引起的。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 6 页 - - - - - - - - -