次のLDIFファイルを使用して、LDAPサーバーのTLSサポートをアクティブ化しました。
dn: cn=config
changetype: modify
add: olcTLSCipherSuite
olcTLSCipherSuite: NORMAL
-
add: olcTLSCRLCheck
olcTLSCRLCheck: none
-
add: olcTLSVerifyClient
olcTLSVerifyClient: never
-
add: olcTLSCACertificateFile
olcTLSCACertificateFile: /etc/ssl/certs/CA.crt
-
add: olcTLSCertificateFile
olcTLSCertificateFile: /etc/ssl/certs/server.pem
-
add: olcTLSCertificateKeyFile
olcTLSCertificateKeyFile: /etc/ssl/private/key.pem
次のLDIFを使用したクライアント接続のTLS使用を強制します。
dn: cn=config
changetype: modify
add: olcSecurity
olcSecurity: tls=1
この後、「-YEXTERNAL」を使用して構成スキーマを読み取ったり変更したりすることはできなくなります。たとえば、次のコマンドを実行すると、SASLエラーが発生します。
$ Sudo ldapsearch -Q -Y EXTERNAL -H ldapi:/// -b "" -LLL -s base -Z supportedSASLMechanisms
ldap_sasl_interactive_bind_s: Authentication method not supported (7)
additional info: SASL(-4): no mechanism available:
サポートされているSASLメカニズムを確認すると、次のようになります。
$ Sudo ldapsearch -x -H ldapi:/// -b "" -LLL -s base -Z supportedSASLMechanisms
dn:
supportedSASLMechanisms: DIGEST-MD5
supportedSASLMechanisms: CRAM-MD5
supportedSASLMechanisms: NTLM
supportedSASLMechanisms: PLAIN
supportedSASLMechanisms: LOGIN
私は本当にリストに含まれているEXTERNALを見ることができません。ここで何が欠けていますか?
これはUbuntu-12.04とslapd-2.4.31にあります。
実行中の構成にアクセスできない場合は、slapd
を停止して、構成をオフラインで編集する必要があります。
slapd
:service slapd stop
slapcat -F /etc/ldap/slapd.d -b cn=config -l config.ldif
mv /etc/ldap/slapd.d{,.old}
新しい空の構成データベースを作成します。
mkdir /etc/ldap/slapd.d chown --reference=/etc/ldap/slapd.d.old /etc/ldap/slapd.d chmod --reference=/etc/ldap/slapd.d.old /etc/ldap/slapd.d
config.ldif
を編集してolcSecurity
設定を削除します(またはolcRootDN
とolcRootPW
をcn=config
に追加するか、その他の変更を加えます)slapadd -F /etc/ldap/slapd.d -b cn=config -l config.ldif
(上記は、設定が/etc/ldap/slapd.d
にあることを前提としています。これは、DebianとUbuntuのデフォルトです。)
完全なLDIFのslapadd
は、常に空のデータベースで実行する必要があることに注意してください。したがって、間違えてslapadd
が失敗した場合は、再試行する前にデータベースの一部をクリアしてください。
詳細については、 OpenLDAP管理者ガイド および関連するマニュアルページを参照してください。
コードを調べます。サーバー側では、 servers/slapd /デーモン.c で、EXTERNALのauthidは、着信接続がaccept()
の直後にuidとgidを使用して設定されます。 ed。後で、 servers/slapd/connection.c で、TLSがアクティブな場合、クライアントの証明書の名前で上書きされます。クライアント証明書を提供していないため、この時点でauthidはNULLで上書きされ、EXTERNALは使用できなくなります。
つまり、TLSがアクティブな場合、uid + gidauthidは使用されません。見方によっては、これはバグと見なされる可能性があります。理想的には、peercredIDにフォールバックします。
とはいえ、ローカルソケットはすでに完全なプライバシーを提供しているため、ldapiでのTLSは実際には必要ありません。したがって、olcSecurity
を自分のデータベースだけに設定し、フロントエンドとcn=config
には設定しないでおくか(たとえば、 この投稿 を参照)、ssf=
tls=
の代わりに、olcLocalSSF
を適切に設定します。または、peercred機能に依存しないように、cn=config
のマネージャーとして別のDNを使用することもできます。
Rtandyに感謝します。私は本当にそれをldapiに設定したくありませんでしたが、それが影響を受けるという事実にも気づいていませんでした。
問題は、EXTERNALがcn=config
を変更できる唯一の方法だったため、そのアクセス権を失い、提案されているように別のcn=config
管理者を作成していないため、これを解決できる他の方法はありますか?