You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为389 Directory Server添加ldapPublicKey schema及解决相关异常

问题描述

我在Oracle Linux 9上安装了389 Directory Server 2.0.0,正在从运行OpenLDAP 2.4的虚拟机迁移数据,已通过导出导入完成所有用户条目迁移。389DS默认没有ldapPublicKey schema,参照资料我在/etc/dirsrv/slapd-<myinstance>/schema/99user.ldif中添加了以下内容:

dn: cn=schema
objectClasses: ( 1.3.6.1.4.1.24552.500.1.1.2.0
  NAME 'ldapPublicKey'
  SUP top
  AUXILIARY
  DESC 'MANDATORY: Service that accepts LDAP public keys'
  MUST sshPublicKey
  X-ORIGIN 'user defined' )
dn: cn=schema
attributeTypes: ( 1.3.6.1.4.1.24552.500.1.1.1.13
  NAME 'sshPublicKey'
  DESC 'MANDATORY: OpenSSH Public key'
  EQUALITY octetStringMatch
  SYNTAX 1.3.6.1.4.1.1466.115.121.1.40
  X-ORIGIN 'user defined' )

但使用Apache Directory Studio管理实例时出现以下问题:

  • 导入的用户条目中sshPublicKey属性显示为文本而非二进制数据
  • 添加新属性时找不到sshPublicKey选项
  • 从头新建条目时,ldapPublicKey未作为结构类显示

我还尝试过将99user.ldif中的ldapPublicKey类从AUXILIARY改为MANDATORY,但问题仍未解决。


解决步骤

1. 修正Schema定义格式

389DS要求同一个cn=schema条目下的属性定义合并在一个条目内,不能拆分。同时MANDATORY不是objectClass的合法关键字,AUXILIARY才是辅助类的正确类型。修改后的99user.ldif如下:

dn: cn=schema
attributeTypes: ( 1.3.6.1.4.1.24552.500.1.1.1.13
  NAME 'sshPublicKey'
  DESC 'OpenSSH Public key'
  EQUALITY octetStringMatch
  SYNTAX 1.3.6.1.4.1.1466.115.121.1.40
  X-ORIGIN 'user defined' )
objectClasses: ( 1.3.6.1.4.1.24552.500.1.1.2.0
  NAME 'ldapPublicKey'
  SUP top
  AUXILIARY
  DESC 'Service that accepts LDAP public keys'
  MUST sshPublicKey
  X-ORIGIN 'user defined' )

2. 重新加载Schema并重启服务

修改完成后,重启389DS实例使schema生效:

dsctl <myinstance> restart

也可以尝试动态加载schema(无需重启):

dsconf <myinstance> schema reload

3. 刷新Apache Directory Studio的Schema缓存

Studio会本地缓存schema信息,需手动刷新:

  • 断开当前LDAP连接
  • 打开连接属性窗口,切换到「Schema」选项卡,点击「Reload Schema」
  • 重新连接实例

4. 修复已导入条目的sshPublicKey属性

由于导入时schema未生效,属性被识别为文本,可通过两种方式修正:

  • 单个条目:在Studio中编辑条目,删除现有sshPublicKey,重新添加时选择「Binary」类型,粘贴公钥内容
  • 批量修正:生成LDIF修改文件,用ldapmodify执行(公钥内容需base64编码,可通过echo -n "ssh-rsa AAAAB3NzaC1yc2E..." | base64生成):
dn: uid=user1,ou=users,dc=example,dc=com
changetype: modify
replace: sshPublicKey
sshPublicKey:: <base64编码的公钥内容>

5. 正确使用ldapPublicKey辅助类

ldapPublicKey是辅助类,不会出现在结构类选择列表中,正确操作流程:

  1. 新建条目时先选择基础结构类(如inetOrgPerson)
  2. 编辑条目,切换到「Object Classes」选项卡,点击「Add」搜索并添加ldapPublicKey
  3. 系统会自动要求添加sshPublicKey属性

内容的提问来源于stack exchange,提问作者Hussain Akbar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.11 19:12:36