Kerberos+LDAP集成安装说明

一、 安装Openldap

使用附件提供的openldap-2.4.46.tar解压缩,直接进入解压后的目录openldap-2.4.46,执行make install命令安装。
yum install libdb-cxx libdb-cxx-devel gcc-plugin-devel -y
yum install libtool-ltdl-devel -y

tar zxvf openldap-2.4.46.tar
cd openldap-2.4.46
./configure
make
make depend
make install

注:该文件已经完成最初的编译和检查,直接安装即可,要求有对应依赖工具gcc和Berkeley DB代码库等,如遇到问题可参考常见问题解决方法

二、 配置Openldap

在openldap的2.4版本之后,不再使用.conf文件作为主流配置方式,使用.ldif数据库文件作为配置文件。即是配置也是配置加载后生成的数据库文件格式,我们使用openldap组织推荐的此种格式来进行配置。

2.1. 删除无用配置文件

安装完成后,文件路径为/usr/local/etc/openldap,删除过时配置文件.conf
rm –rf /usr/local/etc/openldap/
.conf
rm –rf /usr/local/etc/openldap/*.default

2.2. 更新配置文件

也可以用附件中的文件直接替换。
vi /usr/local/etc/openldap/slapd.ldif
在包含schema处增加如下字段:

include: file:///usr/local/etc/openldap/schema/cosine.ldif
include: file:///usr/local/etc/openldap/schema/duaconf.ldif
include: file:///usr/local/etc/openldap/schema/dyngroup.ldif
include: file:///usr/local/etc/openldap/schema/inetorgperson.ldif
include: file:///usr/local/etc/openldap/schema/java.ldif
include: file:///usr/local/etc/openldap/schema/misc.ldif
include: file:///usr/local/etc/openldap/schema/nis.ldif
include: file:///usr/local/etc/openldap/schema/openldap.ldif
include: file:///usr/local/etc/openldap/schema/ppolicy.ldif
include: file:///usr/local/etc/openldap/schema/collective.ldif

更新olcSuffix/ olcRootDN / olcRootPW为需要的值。

olcSuffix: dc=test,dc=com
olcRootDN: cn=app,dc=test,dc=com
olcRootPW: 123456

2.3. 加载配置文件初始化ldap数据库

/usr/local/sbin/slapadd -n 0 -F /usr/local/etc/openldap -l /usr/local/etc/openldap/slapd.ldif

2.4. 启动slapd服务进程

/usr/local/libexec/slapd -F /usr/local/etc/openldap

2.5. 加载已有的ldap数据对象

a) 创建RootDN及BaseDN对象,否则无法通过ldap客户端使用RootDN进行基本操作。
b) 创建rootdn.ldif,注意格式,每行末尾无空格,“:”后有空格。不同对象间用无空格空行间隔。
vi /usr/local/etc/openldap/rootdn.ldif
dn: dc=test,dc=com
objectclass: dcObject
objectclass: organization
o: test
dc: test

dn: cn=app,dc=test,dc=com
objectclass: organizationalRole
cn: app
加载对象
ldapadd -x -D "cn=app,dc=test,dc=com" -W -f /usr/local/etc/openldap/rootdn.ldif
注:是标准ldap规范的工具ldapadd,不是openldap工具slapadd。

2.6. 增加rootDN全局权限

修改ldap全局配置文件/usr/local/etc/openldap/cn=config/olcDatabase\={0}config.ldif增加rootDN创建库权限
在olcRootDN: cn=config增加
olcRootRW: 123456
更改完毕需要重启slapd服务
ps -aux | grep slapd
kill -9 $PID
/usr/local/libexec/slapd -F /usr/local/etc/openldap

2.7. 加载kerberos对应schema,已便后续集成kerberos。

ldapadd -x -D "cn=config" -w 123456 -f /root/ldap/cn\=kerberos.ldif
注:【cn=kerberos.ldif】见附件,无kerberos的schema,后续解析kerberos配置文件创建ldap数据库会无法解析语法。导致创建kerberos的数据库失败。

三、 安装初始化Kerberos

3.1. 安装kerberos服务及客户端

yum install krb5-server krb5-libs krb5-auth-dialog krb5-workstation krb5-devel -y
注:客户机仅需要krb5-libs krb5-workstation krb5-devel

3.2. Server端配置更新

vi /var/kerberos/krb5kdc/kdc.conf
[realms]字段,TEST.COM设置为需要的值。
TEST.COM = {
……
}

3.3. Client端配置更新

vi /etc/krb5.conf
更改[realms]和[domain_realm]为需要的域名。

#Configuration snippets may be placed in this directory as well
includedir /etc/krb5.conf.d/

[logging]
 default = FILE:/var/log/krb5libs.log
 kdc = FILE:/var/log/krb5kdc.log
 admin_server = FILE:/var/log/kadmind.log

 kinit={
    renewable=true
    forwardable=true
}

[libdefaults]

 default_realm = TEST.COM

 dns_lookup_realm = false
 dns_lookup_kdc   = false
 ticket_lifetime = 24h
 renew_lifetime = 7d
 forwardable = true
 rdns = false
 renewable=true
 udp_preference_limit=1

[realms]
 TEST.COM = {
  kdc = 192.168.xxx.xxx:88
  admin_server = 192.168.xxx.xx:749
 }

[domain_realm]
.test.com = TEST.COM
 test.com = TEST.COM

kdb5_util create -r TEST.COM -s

systemctl restart krb5kdc
systemctl restart kadmin

四、 配置Kerberos使用LDAP数据库

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

yum install krb5-server-ldap –y
kdb5_ldap_util -D cn=app,dc=test,dc=com -w 123456 stashsrvpw -f /etc/krb5.ldap cn=app,dc=test,dc=com

4.2. 使用客户端增加kerberos在ldap数据库的container DN。

客户端推荐 Apache Directory Studio
a) 连接LDAP
ldap+kerberos集成_第1张图片
ldap+kerberos集成_第2张图片
ldap+kerberos集成_第3张图片
b) 创建Container
ldap+kerberos集成_第4张图片
ldap+kerberos集成_第5张图片
ldap+kerberos集成_第6张图片

4.3. 更新server配置

vi /var/kerberos/krb5kdc/kdc.conf
[realms]字段,TEST.COM设置为需要的值,增加database_module = openldap_ldapconf配置。

TEST.COM = {
……
database_module = openldap_ldapconf
}
增加[dbdefaults]和[dbdefaults]字段
[dbdefaults]
    ldap_kerberos_container_dn = cn=Krb,dc=test,dc=com

[dbmodules]
    openldap_ldapconf = {
        db_library = kldap
        ldap_servers = ldap://192.168.xxx.xxx
        ldap_kerberos_container_dn =   cn=Krb,dc=test,dc=com
        ldap_kdc_dn =                cn=app,dc=test,dc=com
        ldap_kadmind_dn =            cn=app,dc=test,dc=com
        ldap_service_password_file = /etc/krb5.ldap
        ldap_conns_per_server = 5
}

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

4.4. 创建kerberos的LDAP数据库

kdb5_ldap_util -D cn=app,dc=test,dc=com -w 123456 -H ldap://192.168.xxx.xxx:389 create -r TEST.COM -s

4.5. 启动kerberos服务

systemctl restart krb5kdc
systemctl restart kadmin

五、 使用和维护

5.1. 创建用户
在kerberos服务所在主机执行kadmin.local进入kerberos管理员模式
使用add_principal user1/[email protected],输入密码确认密码,完成用户添加。
5.2. 查看和删除用户
在客户端刷新数据,点击用户,即可查看详细信息。
在客户端刷新数据,右键删除,即可删除该用户。
kadmin.local
list_principals

六、 常见问题解决方法

6.1. 自行编译失败

安装编译工具及依赖库。包括gcc,Berkeley DB依赖库等。
yum install libdb.x86_64 libdb-cxx.x86_64 libdb-cxx-devel.x86_64 gcc-plugin-devel.x86_64 -y
yum install libtool-ltdl-devel

6.2. 安装异常如何删除重新安装

删除安装目录下所有cn开头的文件、文件夹即可。本环境为/usr/local/etc/openldap

6.3. 使用slapadd初始化异常

/usr/local/sbin/slapadd -n 0 -F /usr/local/etc/openldap -l /usr/local/etc/openldap/slapd.ldif
[-f configfile] [-F configdir]
-n databasenumber -n 0 可避免内存问题。

6.4. 使用ldapadd添加记录异常

检查命令格式是否正确
ldapadd -x -D "cn=app,dc=test,dc=com" -W -f /usr/local/etc/openldap/app.ldif
-x Simple authentication
-D binddn bind DN
-W prompt for bind password
-f file read operations from `file'
检查ldif格式是否正确,
详细格式信息:http://www.openldap.org/doc/admin24/dbtools.html#The LDIF text entry format

6.5. 使用kdb5_ldap_util创建kerberos数据库失败

a) 检查命令格式是否正确。
kdb5_ldap_util -D cn=app,dc=test,dc=com -w 123456 -H ldap://192.168.20.221:389 create -r TEST.COM -s
[-D user_dn [-w passwd]] [-H ldapuri] [-r realm] realm必须使用大写字母!
b) 确认-D后的DN是有权限进行ldap数据库写入的账户,最好使用rootDN。
c) 如果提示非法语法格式,请确认Kerberos的schema已正确导入。可以
ll /usr/local/etc/openldap/cn=config/cn=schema查看目前导入的schema。
加载cn=kerberos.ldif失败
不能使用软件安装后自带的kerberos.ldif,需要使用附件提供的,或者自己手动生成

安装软件yum install krb5-server-ldap –y,获取kerberos.schema。
移动到目的目录
mv /usr/share/doc/krb5-server-ldap-1.15.1/kerberos.schema /usr/local/etc/openldap/schema/kerberos.schema
手动创建文件schema_convert.conf用来生成kerberos.ldif,文件内容如下:
include /usr/local/etc/openldap/schema/core.schema
include /usr/local/etc/openldap/schema/collective.schema
include /usr/local/etc/openldap/schema/corba.schema
include /usr/local/etc/openldap/schema/cosine.schema
include /usr/local/etc/openldap/schema/duaconf.schema
include /usr/local/etc/openldap/schema/dyngroup.schema
include /usr/local/etc/openldap/schema/inetorgperson.schema
include /usr/local/etc/openldap/schema/java.schema
include /usr/local/etc/openldap/schema/misc.schema
include /usr/local/etc/openldap/schema/nis.schema
include /usr/local/etc/openldap/schema/openldap.schema
include /usr/local/etc/openldap/schema/ppolicy.schema
include /usr/local/etc/openldap/schema/kerberos.schema
使用命令生成kerberos.ldif
slapcat -f schema_convert.conf -F /tmp/ -n 0 -s "cn={12}kerberos,cn=schema,cn=config" > /tmp/cn=kerberos.ldif
并注释掉如下属性
#structuralObjectClass: olcSchemaConfig
#entryUUID: 02b11972-d310-1037-80c6-774a6a5fe133
#creatorsName: cn=config
#createTimestamp: 20180413024211Z
#entryCSN: 20180413024211.191038Z#000000#000#000000
#modifiersName: cn=config
#modifyTimestamp: 20180413024211Z
附件文档
修改后的kerberos.ldif
https://blog.51cto.com/10788142/2167924
2.2 更新后配置文件
https://blog.51cto.com/10788142/2167927