Docs Menu
Docs Home
/
MongoDBマニュアル
/ / / /

OpenLDAP で自己管理型 SASL と LDAP を使用して認証する

項目一覧

  • Considerations
  • 構成する saslauthd
  • MongoDB の設定

MongoDB Enterprise provides support for proxy authentication of users. これにより、管理者は、指定された LDAP(Lightweight Directory Access Protocol)サービスへの認証リクエストをプロキシすることで、ユーザーを認証するように MongoDB クラスターを構成できます。

注意

libldapにリンクされた MongoDB 4.2 Enterprise バイナリ(RHEL で実行している場合など)の場合、 libldapへのアクセスは同期され、パフォーマンスおよびレイテンシのコストが発生します。

libldap_r にリンクされた MongoDB 4.2 Enterprise バイナリの場合、前の MongoDB バージョンから動作に変更はありません。

警告

MongoDB Enterprise for Windows はsaslauthd経由のバインディングをサポートしていません。

  • Linux MongoDB サーバーは、 saslauthdデーモンを介した LDAP サーバーへのバインディングをサポートしています。

  • クライアントとサーバー間、およびsaslauthdと LDAP サーバー間で安全な暗号化または信頼できる接続を使用します。 LDAP サーバーはSASL PLAINメカニズムを使用して、プレーンテキストでデータを送受信します。 VPN などの信頼できるチャネル、TLS/SSL で暗号化された接続、または信頼できるワイヤネットワークのみを使用する必要があります。

ユーザー認証の LDAP サポートには、 saslauthdデーモン プロセスと MongoDB サーバーを適切に構成する必要があります。

1

Red Hat Enterprise Linux、Fedlas、CentOS、Amazon Linux AMI など、 /etc/sysconfig/saslauthdファイルを使用してsaslauthdを構成するシステムでは、メカニズムMECHldapに設定します。

MECH=ldap

/etc/default/saslauthdファイルを使用してsaslauthdを構成するシステム(Ubuntu など)では、 MECHANISMSオプションをldapに設定します。

MECHANISMS="ldap"
2

特定の Linux ディストリビューションでは、 saslauthdは 認証情報のキャッシュ を有効にして起動します。 が再起動されるまで、またはキャッシュの有効期限が切れるまで、 saslauthdは LDAP サーバーに接続して、認証キャッシュ内のユーザーを再認証しません。 これにより、LDAP サーバーがダウンしている場合や、キャッシュされたユーザーの認証情報が取り消されている場合でも、 saslauthdはキャッシュ内のユーザーを正常に認証できます。

認証キャッシュの有効期限(秒単位)を設定するには、 -t オプション saslauthdを参照してください。 の

3

saslauthd.confファイルが存在しない場合は、作成します。 saslauthd.confファイルは通常、 /etcフォルダーにあります。 別のファイルパスを指定する場合は、 -O オプション を参照してくださいsaslauthd

OpenLDAP サーバーに接続するには、次の構成オプションでsaslauthd.confファイルを更新します。

ldap_servers: <ldap uri>
ldap_search_base: <search base>
ldap_filter: <filter>

ldap_serversは、認証に使用される LDAP サーバーの URI を指定します。 一般に、ローカルマシンにインストールされている OpenLDAP の場合は、値ldap://localhost:389を指定できます。TLS/SSL 経由で LDAP を使用する場合は、値ldaps://localhost:636を指定できます。

ldap_search_baseは、検索が相対的である識別名を指定します。 検索には、以下の基本 または オブジェクトが含まれます。

ldap_filterは、検索フィルターを指定します。

これらの構成オプションの値は、テストに固有の値に対応する必要があります。 たとえば、メールでフィルタリングするには、代わりにldap_filter: (mail=%n)を指定します。

OpenLDAP のサンプルsaslauthd.confファイルには次のコンテンツが含まれています。

ldap_servers: ldaps://ad.example.net
ldap_search_base: ou=Users,dc=example,dc=com
ldap_filter: (uid=%u)

このサンプル OpenLDAP 構成を使用するには、uid 属性(ログイン名)を持つユーザーを作成し、ドメインUsers ouコンポーネント(dc examplecom の下に配置します。

saslauthd構成の詳細については、 http://www.openldap.org/doc/admin24 /guide.html#Cconfig saslauthd を参照してください 。

4

testsaslauthdユーティリティを使用して、 saslauthdの構成をテストします。 例:

testsaslauthd -u testuser -p testpassword -f /var/run/saslauthd/mux
  • 0: OK "Success" は、認証が成功したことを示します。

  • 0: NO "authentication failed" は、ユーザー名、パスワード、または設定エラーを示します。

ホスト オペレーティング システム上のsaslauthdディレクトリのロケーションに応じてファイルパスを変更します。

重要

security.sasl.saslauthdSocketPathまたは--setParameter saslauthdPathに指定されたsaslauthd Unix ドメイン ソケット ファイルの親ディレクトリには、次のいずれかの読み取りおよび実行( r-x )権限が付与されている必要があります。

  • mongodまたはmongosを起動するユーザー、または

  • そのユーザーが属するグループ。

mongodまたはmongosは、 saslauthdディレクトリとその内容に対する指定された権限がなければ、 saslauthd経由で正常に認証できません。

1

MongoDB の$externalデータベースにユーザーを追加します。 ユーザーの特権を指定するには、ユーザーにロールを割り当てます。

$external認証ユーザー(Kerberos、LDAP、または x.509 ユーザー)でクライアント セッションと因果整合性の保証を使用するには、ユーザー名を 10k バイトより大きくすることはできません。

たとえば、次の例では、 recordsデータベースへの読み取り専用アクセス権を持つユーザーを追加します。

db.getSiblingDB("$external").createUser(
{
user : <username>,
roles: [ { role: "read", db: "records" } ]
}
)

必要に応じて、追加のプリンシパルを追加します。 ユーザーの作成と管理の詳細については、「ユーザー管理コマンド 」を参照してください。

2

プロキシ認証にsaslauthdインスタンスを使用するように MongoDB サーバーを構成するには、 mongodの起動時に次のオプションを含めます。

  • --authコマンドライン オプションまたはsecurity.authorization設定

  • authenticationMechanismsパラメータをPLAINに設定し、かつ

  • saslauthdPathパラメータは、 saslauthdインスタンスの Unix ドメイン ソケットへのパスに設定されます。

    重要

    security.sasl.saslauthdSocketPathまたは--setParameter saslauthdPathに指定されたsaslauthd Unix ドメイン ソケット ファイルの親ディレクトリには、次のいずれかの読み取りおよび実行( r-x )権限が付与されている必要があります。

    • mongodまたはmongosを起動するユーザー、または

    • そのユーザーが属するグループ。

    mongodまたはmongosは、 saslauthdディレクトリとその内容に対する指定された権限がなければ、 saslauthd経由で正常に認証できません。

認証を強制するには、 authorizationオプションを使用する場合、ユーザーを作成するには特権が必要です。

/<some>/<path>/saslauthdのソケット パスの場合は、次のコマンドラインの例のように、 saslauthdPath/<some>/<path>/saslauthd/muxに設定します。

mongod --auth --setParameter saslauthdPath=/<some>/<path>/saslauthd/mux --setParameter authenticationMechanisms=PLAIN

構成に必要な追加オプションを含めます。 たとえば、リモート クライアントを配置に接続する場合、または配置ノードを異なるホスト上で実行する場合は、 --bind_ipを指定します。

または、 YAML 形式の構成ファイルを使用する場合は、ファイルに次の設定を指定します。

security:
authorization: enabled
setParameter:
saslauthdPath: /<some>/<path>/saslauthd/mux
authenticationMechanisms: PLAIN

または、古い構成ファイル形式を使用している場合は、以下を実行します。

auth=true
setParameter=saslauthdPath=/<some>/<path>/saslauthd/mux
setParameter=authenticationMechanisms=PLAIN

デフォルトの Unix ドメイン ソケット パスを使用するには、次のコマンドラインの例のように、 saslauthdPathに空のstring "" を設定します。

mongod --auth --setParameter saslauthdPath="" --setParameter authenticationMechanisms=PLAIN

構成に必要な追加オプションを含めます。 たとえば、リモート クライアントを配置に接続する場合、または配置ノードを異なるホスト上で実行する場合は、 --bind_ipを指定します。

または、 YAML 形式の構成ファイルを使用する場合は、ファイルに次の設定を指定します。

security:
authorization: enabled
setParameter:
saslauthdPath: ""
authenticationMechanisms: PLAIN

または、古い構成ファイル形式を使用している場合は、以下を実行します。

auth=true
setParameter=saslauthdPath=""
setParameter=authenticationMechanisms=PLAIN

構成に必要な追加オプションを含めます。 たとえば、リモート クライアントを使用して配置に接続する場合や、配置ノードを異なるホスト上で実行する場合は、 net.bindIp設定を指定します。

3

接続中にコマンドラインから認証することも、最初に接続してからdb.auth()メソッドを使用して認証することもできます。

mongoshで接続するときに認証するには、次のコマンドライン オプションを使用してmongoshを実行し、 <host><user>を置き換え、パスワードの入力を求められたら入力します。

mongosh --host <host> --authenticationMechanism PLAIN --authenticationDatabase '$external' -u <user> -p

または、認証情報を指定せずに接続し、 $externalデータベースでdb.auth()メソッドを呼び出します。 "PLAIN"mechanismフィールドに値user pwd、それぞれ フィールドと フィールドにユーザーとパスワードを指定します。次の例のように、サーバーはsaslauthdに転送するためにダイジェスト化されていないパスワードを受信する必要があるため、デフォルトのdigestPassword値( false )を使用します。

Tip

passwordPrompt() メソッドを様々なユーザー認証管理メソッドやコマンドと組み合わせて使用すると、メソッドやコマンドの呼び出しでパスワードを直接指定する代わりに、パスワードの入力を求めるプロンプトが表示されます。ただし、以前のバージョンの mongo シェルと同様に、パスワードを直接指定することもできます。

db.getSiblingDB("$external").auth(
{
mechanism: "PLAIN",
user: <username>,
pwd: passwordPrompt() // or cleartext password
}
)

パスワードの入力を求められたら、入力します。

サーバーはパスワードをプレーン テキストで転送します。 一般に、 は信頼できるチャネル(VPN、TLS/SSL、信頼できるワイヤネットワーク)でのみ使用します。 「 考慮事項 」を参照してください。

戻る

ActiveDirectory の使用