在这里插入图片描述

一、背景

亲测可用,之前搜索了很多博客,啥样的都有,就是不介绍报错以及配置用处,根本不懂照抄那些配置是干啥的,稀里糊涂的按照博客搭完也跑不起来,因此记录这个。

项目背景:公司项目当前采用http协议+shiro+mysql的登录认证方式,而现在想支持ldap协议认证登录然后能够访问自己公司的项目网站。

举例说明:假设我们公司有自己的门户网站,现在我们收购了一家公司,他们数据库采用ldap存储用户数据,那么为了他们账户能登陆我们公司项目所以需要集成,而不是再把他们的账户重新在mysql再创建一遍,万一人家有1W个账户呢,不累死了且也不现实啊。

需要安装openldap+kerberos,且ldap和kerberos安装在同一台服务器上,当前版本如下:

  • centos 7.9
  • openldap 2.4.44
  • phpldapadmin 1.2.5
  • 服务器IP:10.110.38.162
  • Kerberos :Kerberos 5 release 1.15.1

本博客参考的博客是:

注意:这个文章是真实可行的,但是有执行顺序,一定要先安装“Openldap安装部署”+“Kerberos基本原理、安装部署及用法”之后,确保安装无误后再去安装“Openldap集成Kerberos”。
在这里插入图片描述

我当时犯的毛病就是前两个没完全照着文档安装完成就直接安装的第三个,然后出现各种问题,我还不知道为点啥。人家博客都说了要先安装前两个,再看这个“Kerberos基本原理、安装部署及用法”。所以一定要注意安装顺序,遇到不懂得配置也没事先照着安。

二、Openldap集成Kerberos

2.1kerberos服务器中绑定Ldap服务器

2.1.1创建LDAP管理员用户

在kdc服务器执行如下操作:

kadmin.local -q "addprinc ldapadmin@NODE3.COM"

2.1.2添加principal

在kdc服务器执行如下操作:

kadmin.local -q "addprinc -randkey ldap/bridge1@NODE3.COM"

2.1.3生成keytab文件

在kdc服务器执行如下操作:

kadmin.local -q "ktadd -k /etc/openldap/ldap.keytab ldap/bridge1@NODE3.COM"

2.1.4赋予keytab文件权限

把生成的ldap.keytab文件转移到openldap服务器节点上,并在openldap服务器节点执行如下操作:(本机此处都是在同一台机器执行)

chown ldap:ldap /etc/openldap/ldap.keytab && chmod 640 /etc/openldap/ldap.keytab

2.1.5验证keytab文件

使用ldapadmin用户测试,输入密码没有报错说明已通过kerberos身份验证

kinit ldapadmin

2.1.6增加KRB5_KTNAME配置

在openldap服务器节点,确保LDAP启动时使用上一步创建的keytab文件,在/etc/sysconfig/sladp文件中增加如下内容

KRB5_KTNAME=/etc/openldap/ldap.keytab

然后重启服务

systemctl restart slapd

至此,LDAP在Kerberos服务器上已完成集成。

2.2Ldap服务器中绑定kerberos服务器

Kerberos.schema是在krb5-server-ldap安装之后才出现的,不能使用该软件安装后自带的kerberos.ldif,需要手动生成。安装软件krb5-server-ldap,获取kerberos.schema。
在openldap服务器节点执行如下命令:

yum -y install krb5-server-ldap

移动kerberos.schema到目的目录

mv /usr/share/doc/krb5-server-ldap-1.15.1/Kerberos.schema /etc/openldap/schema

手动创建文件schema_convert.conf用来生成kerberos.ldif,文件内容如下

vim schema_convert.conf
-----------------------------------------------
include /etc/openldap/schema/core.schema
include /etc/openldap/schema/collective.schema
include /etc/openldap/schema/corba.schema
include /etc/openldap/schema/cosine.schema
include /etc/openldap/schema/duaconf.schema
include /etc/openldap/schema/dyngroup.schema
include /etc/openldap/schema/inetorgperson.schema
include /etc/openldap/schema/java.schema
include /etc/openldap/schema/misc.schema
include /etc/openldap/schema/nis.schema
include /etc/openldap/schema/openldap.schema
include /etc/openldap/schema/ppolicy.schema
include /etc/openldap/schema/kerberos.schema

使用命令生成kerberos.ldif

cd ~
slapcat -f schema_convert.conf -F /root/ -n 0 -s "cn={13}kerberos,cn=schema,cn=config">/home/cn=Kerberos.ldif

并注释掉如下属性:

#structuralObjectClass: olcSchemaConfig
#entryUUID: ff864160-c092-103e-89e3-570a7b5d6144
#creatorsName: cn=config
#createTimestamp: 20240617011641Z
#entryCSN: 20240617011641.575801Z#000000#000#000000
#modifiersName: cn=config
#modifyTimestamp: 20240617011641Z

修改生成的kerberos.ldif,把dn: cn={12}kerberos改为dn: cn={13}kerberos,cn=schema,cn=config,把cn: {12}kerberos改为cn: {13}kerberos 注:这里的cn={13}kerberos是因为schema_convert.conf文件里面kerberos排行13,故kerberos是作为第13个导入到openldap里面的。

2.2.1生成LDAP数据库RootDN的密码文件

kdb5_ldap_util -D cn=admin,dc=node3,dc=com -w 123456 stashsrvpw -f /etc/krb5.ldap cn=admin,dc=node3,dc=com

2.2.2增加kerberos在ldap数据库的container DN

增加一个kerberos1.ldif文件

vim kerberos1.ldif 

dn: cn=kerberos,dc=node3,dc=com
cn: kerberos
objectClass: organizationalRole

执行命令,添加cn=Kerberos,dc=node3,dc=com节点

ldapadd -x -D cn=admin,dc=node3,dc=com -W -f kerberos1.ldif

2.2.3更新kerberos的server配置

[realms]字段,NODE3.COM设置为需要的值,增加database_module=openldap_ldapconf配置

[kdcdefaults]
 kdc_ports = 88
 kdc_tcp_ports = 88

[realms]
 NODE3.COM = {
  #master_key_type = aes256-cts
  acl_file = /var/kerberos/krb5kdc/kadm5.acl
  dict_file = /usr/share/dict/words
  admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab
  supported_enctypes = aes256-cts:normal aes128-cts:normal des3-hmac-sha1:normal arcfour-hmac:normal camellia256-cts:normal camellia128-cts:normal des-hmac-sha1:normal des-cbc-md5:normal des-cbc-crc:normal
  database_module = openldap_ldapconf
  #kdc = kdc.node.com
  #admin_server = kdc.node.com
  kdc = 127.0.0.1:88
  admin_server =127.0.0.1:749
}

[dbdefaults]
 ldap_kerberos_container_dn = cn=kerberos,dc=node3,dc=com

[dbmodules]
 openldap_ldapconf = {
  db_library = kldap
  ldap_servers = ldap://127.0.0.1:389
  ldap_kdc_dn = cn=admin,dc=node3,dc=com
  ldap_kadmind_dn = cn=admin,dc=node3,dc=com
  ldap_service_password_file = /etc/krb5.ldap

  #ldap_kdc_dn = "uid=kdc-service,dc=node,dc=com"
  #ldap_kadmind_dn = "uid=kadmin-service,dc=node,dc=com"
  #ldap_service_password_file = /etc/krb5kdc/service.keyfile
 # ldap_servers = ldapi:///
  ldap_conns_per_server = 5
 }

注意:ldap_kerberos_container_dc字段为kerberos在ldap数据库的container。ldap_kdc_dn和ldap_kadmind_dc分别对应kerberos访问LDAP数据库时的服务和管理账号,为方便管理,都是用rootdn。

2.2.4增加rootDN全局权限

修改ldap全局配置文件/etc/openldap/slapd.d/cn=config/olcDatabase={0}config.ldif增加rootDN创建库权限

vi /etc/openldap/slapd.d/cn=config/olcDatabase={0}config.ldif
#增加如下两行
olcRootDN: cn=config
olcRootPW: 123456
#更改完毕需要重启slapd服务
Ps –aux | grep slapd
Kill  -9  $PID
Systemctl restart slapd

2.2.5加载kerberos对应schema

cd ~
ldapadd -x -D "cn=config" -w 123456 -f cn=kerberos.ldif

2.2.6创建kerberos的LDAP数据库

kdb5_ldap_util -D cn=admin,dc=node3,dc=com -w 123456 -H ldap://127.0.0.1:389 create -r NODE3.COM –s

执行成功,可在ldap客户端查看到kerberos中多了以下节点显示,如下图。

在这里插入图片描述

2.2.7重启kerberos服务

在kdc服务器节点执行如下操作:

systemctl restart krb5kdc
systemctl restart kadmin

至此,Kerberos在LDAP服务器上已完成集成。

2.2.8验证kerberos+ldap集成

通过kadmin命令行增加一个principal,在kerberos显示成功。
在这里插入图片描述

在ldap客户端通过kerberos验证显示成功。

在这里插入图片描述

本人其他相关文章链接

1.Centos7.9安装openldap
2.Centos7.9安装kerberos
3.Openldap集成Kerberos
4.Centos7.9安装phpldapadmin
5.java连接ldap实现用户查询功能
6.java连接kerberos用户认证
7.javax.security.auth.login.LoginException: Unable to obtain password from user
8.javax.security.auth.login.LoginException: null (68)
9.javax.security.auth.login.LoginException: Message stream modified (41)
10.javax.security.auth.login.LoginException: Checksum failed
11.javax.security.auth.login.LoginException: No CallbackHandler available to garner authentication info
12.javax.security.auth.login.LoginException: Cannot locate KDC
13.javax.security.auth.login.LoginException: Receive timed out
14.java: 无法访问org.springframework.context.ConfigurableApplicationContext
15.LDAP: error code 34 - invalid DN
16.LDAP: error code 32 - No Such Object
17.java: 无法访问org.springframework.ldap.core.LdapTemplate

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部