博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Openldap集成Kerberos
阅读量:4089 次
发布时间:2019-05-25

本文共 3750 字,大约阅读时间需要 12 分钟。

1. 概述

  openldap集成kerberos,有两种,一是openldap和kerberos各自拥有个人的数据库,一是openldap和kerberos共用一个数据库。

  以下操作是在https://www.cnblogs.com/swordfall/p/12009716.html  和https://www.cnblogs.com/swordfall/p/12119010.html  基础上实施的。

2. 不共用LDAP数据库的集成方式

2.1. 创建LDAP管理员用户

  为了使kerberos能够绑定到openldap服务器,需创建一个管理员用户

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

2.2. 添加principal

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

2.3. 生成keytab文件

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

2.4. 赋予keytab文件权限

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

2.5. 验证keytab文件

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

kinit ldapadmin

2.6. 增加KRB5_KTNAME配置

  确保LDAP启动时使用上一步创建的keytab文件,在/etc/sysconfig/slapd文件中增加如下内容:

KRB5_KTNAME=/etc/openldap/ldap.keytab

  然后重启服务

systemctl restart slapd

  至此,LDAP与Kerberos已完成集成。

3. 共用LDAP数据库的集成方式

  kerberos相关的数据也需要存储在某个数据库中,在这里我们选择使用LDAP作为其数据库,目的是为了数据备份的方便(只需要统一备份LDAP数据库即可)。如果需要使用kerberos自身的数据库,则需要将下面的kdb5_ldap_util命令替换为kdb5_util。

3.1. ldap加载kerberos对应schema

  Kerberos.schema是在krb5-server-ldap安装之后才出现的,不能使用该软件安装后自带的kerberos.ldif,需要手动生成。安装软件krb5-server-ldap,获取kerberos.schema。

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.confinclude /etc/openldap/schema/core.schemainclude /etc/openldap/schema/collective.schemainclude /etc/openldap/schema/corba.schemainclude /etc/openldap/schema/cosine.schemainclude /etc/openldap/schema/duaconf.schemainclude /etc/openldap/schema/dyngroup.schemainclude /etc/openldap/schema/inetorgperson.schemainclude /etc/openldap/schema/java.schemainclude /etc/openldap/schema/misc.schemainclude /etc/openldap/schema/nis.schemainclude /etc/openldap/schema/openldap.schemainclude /etc/openldap/schema/ppolicy.schemainclude /etc/openldap/schema/kerberos.schema

  使用命令生成kerberos.ldif

slapcat -f schema_convert.conf -F /root/kerberos/ -n 0 -s "cn={13}kerberos,cn=schema,cn=config"cp cn\=config/cn\=schema/cn\=\{
12\}kerberos.ldif /root/kerberos/Kerberos.ldif

  修改生成的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里面的。

3.2. 生成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

3.3. 增加kerberos在ldap数据库的container DN

  增加一个kerberos.ldif文件

vim kerberos.ldif dn: cn=kerberos,dc=node3,dc=comcn: kerberosobjectClass: organizationalRole

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

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

3.4. 更新kerberos的server配置

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

# vim  /var/kerberos/krb5kdc/kdc.conf[realms] EXAMPLE.COM = {  ……  database_module = openldap_ldapconf }[dbdefaults] ldap_kerberos_container_dn = cn=kerberos,dc=node3,dc=com[dbmodules] openldap_ldapconf = {  db_library = kldap  ldap_servers = ldapi://192.168.1.107:389  ldap_kerberos_container_dn = cn=kerberos,dc=node3,dc=com  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_conns_per_server = 5 }

  注:

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

3.5. 创建kerberos的LDAP数据库

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

3.6. 重启kerberos服务

systemctl restart krb5kdcsystemctl restart kadmin

4. 参考资料

https://www.cnblogs.com/swordfall/p/12009716.html  

https://www.cnblogs.com/swordfall/p/12119010.html  

你可能感兴趣的文章
【算法】求数组中某两个数的和为目标值
查看>>
如何高效学习动态规划?
查看>>
动态规划法(六)鸡蛋掉落问题(一)
查看>>
LeetCode 887.鸡蛋掉落(C++)
查看>>
Dijkstra‘s algorithm (C++)
查看>>
奇异值分解(SVD)的原理详解及推导
查看>>
算法数据结构 思维导图学习系列(1)- 数据结构 8种数据结构 数组(Array)链表(Linked List)队列(Queue)栈(Stack)树(Tree)散列表(Hash)堆(Heap)图
查看>>
求LCA最近公共祖先的离线Tarjan算法_C++
查看>>
Leetcode 834. 树中距离之和 C++
查看>>
【机器学习】机器学习系统SysML 阅读表
查看>>
最小费用最大流 修改的dijkstra + Ford-Fulksonff算法
查看>>
最小费用流 Bellman-Ford与Dijkstra 模板
查看>>
实现高性能纠删码引擎 | 纠删码技术详解(下)
查看>>
scala(1)----windows环境下安装scala以及idea开发环境下配置scala
查看>>
zookeeper(3)---zookeeper API的简单使用(增删改查操作)
查看>>
zookeeper(4)---监听器Watcher
查看>>
zookeeper(2)---shell操作
查看>>
mapReduce(3)---入门示例WordCount
查看>>
hbase(3)---shell操作
查看>>
hbase(1)---概述
查看>>