ランタイム構成(cn = config)を使用してOpenLDAPインストールのスキーマを変更するのに問題があります。私がやろうとしていることは、既存の属性を変更し、新しい属性をカスタムスキーマに追加することです。変更を適用しようとしたときに発生するエラーは、「そのようなオブジェクトがない」または「そのような値がない」です。 JXplorerブラウザーを使用する場合、エラーは次のとおりです。
javax.naming.NameNotFoundException: [LDAP: error code 32 - No Such Object]; remaining name 'cn={15}mySchema,cn=schema,cn=config'
コマンドラインからldifファイルでldapmodifyを使用すると、同じエラーがスローされます。
ldapmodify -h ldap://localhost/cn=config -x -p 389 -D cn=admin,cn=config -W -f modify.ldif
modifying entry "cn={15}mySchema,cn=schema,cn=config"
ldap_modify: No such object (32)
ただし、奇妙なことに、このエラーが発生した場合でも、slapdサービスの現在のインスタンスに対して変更がコミットされます。たとえば、新しい属性を追加し、それらの属性を含めるようにオブジェクトを変更した場合、それらの属性は、そのオブジェクトを使用するエントリで使用できます。続行できますまるで変更が機能しました。ただし、slapdサービスを再起動すると、変更は元に戻ります。
LdifファイルのDNの先頭の{15}、または属性値の同様のプレフィックスを削除すると、同じエラーが発生します(おそらく別の理由で)。
modifying entry "cn=mySchema,cn=schema,cn=config"
ldap_modify: No such object (32)
matched DN: cn=schema,cn=config
さらに、cn = configの他のエントリ(例:olcDatabase = {-1} frontend、cn = config)を問題なく変更でき、変更はサービスの再起動後も保持されます。エラーが発生するのは、cn = schema、cn = configの下のエントリを変更しようとしたときだけです。
サーバーは、yum経由でインストールされたOpenLDAP2.4.23を使用してCentOS6.2、64ビットを実行しています。複数のブラウザ(JXplorer、Softerra LDAP Administrator)とコマンドラインを試しましたが、すべて同じ結果になりました。 slapd.dディレクトリの所有者/グループはldap/ldapであり、スキーマファイルの権限が777に変更されても変更はありません。ポート636(ブラウザまたはコマンドライン)でTLSを使用しても効果はありません。
誰かがこれに光を当てて、cn = configを介してスキーマを変更することを妨げている可能性があるものを説明できますか?
編集:modify.ldifの内容は次のとおりです。
dn: cn={15}mySchema,cn=schema,cn=config
changetype: modify
add: olcAttributeTypes
olcAttributeTypes: ( 1.3.6.1.4.00000.2.3.14 NAME 'myTest' DESC 'This is only a test' EQUALITY caseIgnoreMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{128} )
00000の代わりに会社PENを使用しており、他の属性はそのOIDを使用していません。属性値に数値のプレフィックスを追加しても違いはありませんが、DNにはプレフィックスが必要であることがわかりました。それがないと、エラーはそれが言うことを意味し、ディレクトリは変更されません。
エントリに他のolcAttributeTypes
がある場合は、replace
ではなくadd
を実行し、LDAPにすでに存在する他のすべての属性を一覧表示する必要があります。
編集にldapvi
を使用してみてください。自動的に実行されます。
編集:それが機能しない場合は、slapd
を停止し、/etc/ldap/slap.d/
内のファイルを手動で編集する必要があります。変更が比較的頻繁である場合、それは確かに解決策ではありません...
cn=config
でのスキーマの編集は新機能であり、バグを発見した可能性があります(おそらく最新バージョンですでに修正されています)。 OpenLDAP ChangeLogを確認し、最新バージョンを使用してみてください。
UbuntuのOpenLDAPでも同じ動作が見られます。 OpenLDAPインスタンスのSSL証明書を置き換えようとしましたが、Ubuntuwikiサイトの指示が機能しないことがわかりました。
https://help.ubuntu.com/lts/serverguide/openldap-server.html#openldap-tls
具体的には、次の手順です。
次の内容でファイルcertinfo.ldifを作成します(それに応じて調整します。この例では、 https://www.cacert.org を使用して証明書を作成したと想定しています)。
dn: cn=config changetype: modify replace: olcTLSCACertificateFile olcTLSCACertificateFile: /etc/ssl/certs/cacert.pem - replace: olcTLSCertificateFile olcTLSCertificateFile: /etc/ssl/certs/ldap01_slapd_cert.pem - replace: olcTLSCertificateKeyFile olcTLSCertificateKeyFile: /etc/ssl/private/ldap01_slapd_key.pem
Ldapmodifyコマンドを使用して、slapd-configデータベースを介してTLS作業についてslapdに通知します。
Sudo ldapmodify -Y EXTERNAL -H ldapi:/// -f /etc/ssl/certinfo.ldif
(元の追加コマンドを置き換えるように変更しましたが、元の追加コマンドも新規インストールでは機能しませんでした)。
私はこのCentOSサイトでtechNoteを見つけました:
2.2.2.2。構成エントリおよび属性の変更に関する制限
サーバーのエントリと属性を変更する場合は、特定の制限が適用されます。
The cn=monitor entry and its child entries are read-only and cannot be modified, except to manage ACIs. If an attribute is added to cn=config, the server ignores it. If an invalid value is entered for an attribute, the server ignores it. Because ldapdelete is used for deleting an entire entry, use ldapmodify to remove an attribute from an entry.
このメモは、ldapmodifyを使用してcn = configに属性を追加できないことを示しているようです。 cn = configを変更する方法はldapmodifyを使用する方法だと思いました。
私はこの状況を示しているように見える他の投稿を見ました。 OpenLDAPメーリングリストに質問を入れました。受け取った回答で投稿を更新します。