Kerberos使用OpenLDAP作为backend

简介: 本文介绍Kerberos对接OpenLDAP, 使用OpenLDAP作为principal数据库

作者:云魄,阿里云E-MapReduce 高级开发工程师,专注于流式计算,Spark Contributor,开源爱好者


本文介绍Kerberos对接OpenLDAP, 使用OpenLDAP作为principal数据库。

1.前置

  • 操作系统为Centos
  • 安装OpenLDAP,并设置了管理员账户和相关的组,可参考OpenLDAP官网

例如ldap的host为localhost,port为10389,添加的管理账户的dn为cn=Manager,dc=example,dc=com

  • 安装Kerberos5

2.添加schema

如果已经添加过,忽略该步骤

2.1添加kerberos schema

以krb5-server-ldap-1.15.1版本为例做说明

  • 获取kerberos.schema

通常kerberos.schema和kerberos.ldif位于路径

/usr/share/doc/krb5-server-ldap-1.15.1

如果该路径下没有,执行

yum install krb5-server-ldap
  • 生成kerberos.ldif

OpenLDAP无法识别/usr/share/doc/krb5-server-ldap-1.15.1中的kerberos.ldif,需要重新生成。例如在/root/tmp下生成

cp /usr/share/doc/krb5-server-ldap-1.15.1/kerberos.* /etc/openldap/schema/
echo "include /etc/openldap/schema/kerberos.schema" > /root/tmp/schema_convert.conf
slaptest -f /root/tmp/schema_convert.conf -F /root/tmp

编辑生成的/root/tmp/cn=config/cn=schema/cn={0}kerberos.ldif文件,将其中的

dn: cn={0}kerberos
cn: {0}kerberos

替换为

dn: cn=kerberos,cn=schema,cn=config
cn: kerberos

去掉结尾的

structuralObjectClass: olcSchemaConfig
entryUUID: ...
creatorsName: cn=config
createTimestamp: ...
entryCSN: ...
modifiersName: cn=config
modifyTimestamp: ...

添加kerberos.schema

ldapadd -Y EXTERNAL -H ldapi:/// -f /root/tmp/cn=config/cn=schema/cn={0}kerberos.ldif

2.2添加其他schema

ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif

3.添加kadmin、krb5kdc账户

3.1创建kadmin、krb5kdc账户

以添加kadmin为例,addkadmin.ldif如下

dn: cn=krbadmin,dc=example,dc=com
cn: krbadmin
sn: krbadmin
objectClass: inetOrgPerson
userPassword: ${password}
uid: krbadmin

其中,${password}为账户密码,根据实际设置
执行命令

ldapadd -H ldap://localhost:10389 -D cn=Manager,dc=example,dc=com -f addkadmin.ldif

3.2设置权限

addaccess.ldif如下

dn: olcDatabase={2}hdb,cn=config
add: olcAccess
olcAccess: {0}to attrs=userPassword,shadowLastChange,krbPrincipalKey by dn.exact="cn=Manager,dc=example,dc=com" write by dn.exact="cn=krbadmin,dc=example,dc=com" write by dn.exact="cn=krb5kdc,dc=example,dc=com" read  by self =xw by anonymous auth by * none
-
add: olcAccess
olcAccess: {1}to * by dn.exact="cn=Manager,dc=example,dc=com" write by dn.exact="cn=krbadmin,dc=example,dc=com" write by dn.exact="cn=krb5kdc,dc=example,dc=com" read by self read by users read by * none

执行命令

ldapmodify -Y EXTERNAL -H ldapi:/// -f addaccess.ldif

4.设置kerberos

4.1生成stash文件

例如在/root下生成ldap.stash文件

kdb5_ldap_util stashsrvpw -f /root/ldap.stash "cn=krbadmin,dc=example,dc=com"
kdb5_ldap_util stashsrvpw -f /root/ldap.stash "cn=krb5kdc,dc=example,dc=com"

4.2配置kerberos

  • 将其中的EXAMPLE.COM替换为真实的域名。此处以EXAMPLE.COM做说明
  • 添加database_module

在[realms]下添加database_module = LDAP,例如

3


文件末尾新添加如下内容

[dbdefaults]
        ldap_kerberos_container_dn = cn=krbContainer,dc=example,dc=com

[dbmodules]
        LDAP = {
                db_library = kldap
                ldap_kdc_dn = "cn=krb5kdc,dc=example,dc=com"
                ldap_kadmind_dn = "cn=krbadmin,dc=example,dc=com"
                ldap_service_password_file = /root/ldap.stash
                ldap_servers = ldapi:/// ldap://localhost:10389
                ldap_conns_per_server = 5
        }

4.3创建realm

执行如下命令

kdb5_ldap_util -D  cn=krbadmin,dc=example,dc=com create -subtrees dc=example,dc=com -r EXAMPLE.COM -s -H ldap://localhost:10389

4.3启动kerberos

systemctl start krb5kdc kadmin

如已启动,需重启krb5kdc和kadmin。

5.测试

在kadmin.local中添加kerberos principal,例如添加test

1

执行命令slapcat -b "dc=example,dc=com",在OpenLDAP中可以查到该dn

2

可以使用如下命令查看非kerberos uid

ldapsearch -w xxx -D "cn=Manager,dc=example,dc=com" -H ldap://localhost:10389 -b dc=example,dc=com '(&(!(krb5PrincipalName=))(uid=))' | grep 'dn: uid=.,dc=example,dc=com' | sed 's/dn: uid=(.),dc=example,dc=com/1/g'

阿里巴巴开源大数据技术团队成立Apache Spark中国技术社区,定期推送精彩案例,技术专家直播,问答区近万人Spark技术同学在线提问答疑,只为营造纯粹的Spark氛围,欢迎钉钉扫码加入!

image.png

对开源大数据和感兴趣的同学可以加小编微信(下图二维码,备注“进群”)进入技术交流微信群。
image.png

Apache Spark技术交流社区公众号,微信扫一扫关注

image.png

相关实践学习
数据湖构建DLF快速入门
本教程通过使⽤数据湖构建DLF产品对于淘宝用户行为样例数据的分析,介绍数据湖构建DLF产品的数据发现和数据探索功能。
快速掌握阿里云 E-MapReduce
E-MapReduce 是构建于阿里云 ECS 弹性虚拟机之上,利用开源大数据生态系统,包括 Hadoop、Spark、HBase,为用户提供集群、作业、数据等管理的一站式大数据处理分析服务。 本课程主要介绍阿里云 E-MapReduce 的使用方法。
目录
相关文章
|
5月前
|
网络协议 安全 数据可视化
LDAP 是个啥你知道吗?
LDAP 是个啥你知道吗?
134 0
LDAP 是个啥你知道吗?
|
8月前
|
网络协议 网络安全
LDAP服务
LDAP服务
142 0
|
数据安全/隐私保护 Apache 缓存
|
Linux Apache PHP
LDAP的安装与使用
openldap的安装与使用
598 1
|
存储 定位技术
|
开发工具 数据安全/隐私保护 网络安全
|
PHP 数据库 存储