slapd 弃用了 slapd.conf,更喜欢 ldif conf,slapd -F dir
使用新的 ldif conf,但目录必须遵循 ldif 结构
- cn=配置.ldif
- cn=配置/
- cn=schema.ldif
- cn=架构/
是否可以在一个文件(如 slapd.ldif)中创建初始 ldif 配置?
答案1
任何 LDIF 文件都可以包含多个对象。例如,如果我想创建一个organizationalUnit
和几个organizationalPerson
对象,我可以这样写:
dn: ou=users,dc=example,dc=com
objectClass: organizationalUnit
ou: users
dn: cn=user1,ou=users,dc=example,dc=com
objectClass: organizationalPerson
objectClass: simpleSecurityObject
cn: user1
sn: user1
userPassword: {SSHA}lNnn048f5TFMqjb/hWaMibYm5LavDFtK
dn: cn=user2,ou=users,dc=example,dc=com
objectClass: organizationalPerson
objectClass: simpleSecurityObject
cn: user2
sn: user2
userPassword: {SSHA}vNEUo1M42aG9w4p1zwMkjY2+7xUzeOeF
由于最新版本的slapd
配置管理为 LDAP 数据库,我们可以像上面一样将配置提交为 LDIF 文件。例如,以下 LDIF 文件将加载后端mdb
,然后为配置 MDB 数据库dc=example,dc=com
:
dn: cn=module,cn=config
objectClass: olcModuleList
cn: module
olcModulePath: /usr/lib/openldap
olcModuleLoad: back_mdb.so
dn: olcDatabase=mdb,cn=config
objectClass: olcDatabaseConfig
objectClass: olcMdbConfig
olcDatabase: mdb
olcSuffix: dc=example,dc=com
olcRootDN: cn=manager,dc=example,dc=com
olcRootPW:: c2VjcmV0
olcDbDirectory: /var/lib/openldap/example.com
olcAccess: to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" manage
slapd
我喜欢像这样初始化:
创建存根
/etc/openldap/slapd.conf.init
:pidfile /var/lib/openldap/run/slapd.pid database config access to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" manage
上述配置中的 ACL 授予
manage
系统用户通过套接字root
访问时的访问权限。这对于为您提供对数据库的写访问权限是必要的。slapd
ldapi://
cn=config
使用它来初始化您的
slap.d
配置:slaptest -f slapd.conf.init -F slapd.d
启动
slapd
,并确保启用了ldapi://
套接字:slapd ... -h 'ldap:// ldaps:// ldapi://'
使用
ldapadd
身份EXTERNAL
验证添加基于 LDIF 的配置:ldapadd -Y EXTERNAL -H ldapi:// -f configuration.ldif
在所有这些过程中,您需要注意文件/目录所有权:例如,如果您slapd
以ldap
用户身份运行,则需要确保用户ldap
能够写入slapd.d
目录。
更新:这里是一个例子:
- 构建自定义 slapd 映像,旨在使用运行时提供的 LDIF 文件进行初始化
- 将映像部署到 kubernetes 中并挂载单个
ConfigMap
以初始化它的示例配置。