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

目录
相关文章
|
异构计算
PCIe链路训练(Link Training) Debug案例解析
有关Xilin FPGA开发版PCIe link up issue debug过程的文章,小编把里面提到的一个案例在这里给大家分享一下。
|
SQL 数据库 Python
SQLAlchemy中filter函数的使用
SQLAlchemy中filter函数的使用
1052 0
|
存储 程序员
《微机原理与接口技术》简答题总结(一)
《微机原理与接口技术》简答题总结
1330 0
《微机原理与接口技术》简答题总结(一)
|
12月前
|
人工智能 监控 安全
智慧工地主要包括哪些内容?
智慧工地运用物联网、AI、大数据等技术,实现施工全过程的数字化与智能化管理。涵盖人员、设备、安全、环境、质量与信息化六大板块,通过智能设备与系统协同,提升效率、保障安全、降低成本,助力绿色施工与科学决策。
1393 5
|
9月前
|
缓存 Java 大数据
深入理解 Project Valhalla:值类型即将如何重塑 JVM 性能
Project Valhalla 是OpenJDK的关键项目,通过引入值类型、泛型特化等特性,显著提升JVM性能与内存效率,减少对象开销和GC压力,助力Java在高性能计算、大数据等领域实现接近底层语言的运行效率。
1154 7
|
达摩院 安全 Anolis
Anolis OS 23 架构支持家族新成员:Anolis OS 23.3 版本及 RISC-V 预览版发布
Anolis OS 23.3在保障基础功能持续演进、完善安全漏洞的修复的同时,实现了对 RISC-V 的初步支持。
|
人工智能 监控 JavaScript
MCP 正当时:FunctionAI MCP 开发平台来了!
Function AI 是基于函数计算构建的 Serverless AI 应用开发平台,基于函数计算的运行时能力上线了完整的 MCP 开发能力,您可以进入 FunctionAI 控制台,快速体验 MCP 服务的能力。
2108 12
|
监控 Ubuntu Linux
在Linux中,如何使用Pacemaker和Corosync?
在Linux中,如何使用Pacemaker和Corosync?
|
弹性计算 负载均衡 定位技术
阿里云服务器地域怎么选择比较好?
阿里云服务器的地域选择至关重要,涉及速度延迟、内网互通、价格差异及备案限制。应依据用户位置就近选择,如北方选华北、南方选华南、全国性服务优选华东。中国大陆内部网络延迟较小,但国际线路差异明显。需考虑内网互通以优化性能,不同地域价格也有所不同。此外,如需在中国内地进行经营性备案,则需选择特定地域如北京或深圳。综合考量这些因素,可确保业务高效稳定运行。更多详情参见阿里云官方页面。
|
人工智能 JSON 自然语言处理
Qwen 2.5:阿里巴巴集团的新一代大型语言模型
Qwen 2.5:阿里巴巴集团的新一代大型语言模型

热门文章

最新文章