文章目录
- 一、背景
- 二、Openldap集成Kerberos
- 2.1kerberos服务器中绑定Ldap服务器
- 2.1.1创建LDAP管理员用户
- 2.1.2添加principal
- 2.1.3生成keytab文件
- 2.1.4赋予keytab文件权限
- 2.1.5验证keytab文件
- 2.1.6增加KRB5_KTNAME配置
- 2.2Ldap服务器中绑定kerberos服务器
- 2.2.1生成LDAP数据库RootDN的密码文件
- 2.2.2增加kerberos在ldap数据库的container DN
- 2.2.3更新kerberos的server配置
- 2.2.4增加rootDN全局权限
- 2.2.5加载kerberos对应schema
- 2.2.6创建kerberos的LDAP数据库
- 2.2.7重启kerberos服务
- 2.2.8验证kerberos+ldap集成
- 本人其他相关文章链接
一、背景
亲测可用,之前搜索了很多博客,啥样的都有,就是不介绍报错以及配置用处,根本不懂照抄那些配置是干啥的,稀里糊涂的按照博客搭完也跑不起来,因此记录这个。
项目背景
:公司项目当前采用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
注意
:这个文章是真实可行的,但是有执行顺序,一定要先安装“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