web-dev-qa-db-ja.com

新しいユーザーを作成するときにLDAPにハッシュパスワードを書き込む

私は中央ユーザーデータベースシステムを使用したプロジェクトに取り組んでいます。システムの要件の1つは、すべてのアプリケーションに対して1セットのユーザーのみが存在する必要があることです。 FreeRADIUSとSambaは、どちらもバックエンドとしてLDAPを使用する2つのアプリケーションです。他の多くのアプリケーションを含むシステム全体でユーザーは同じである必要があるため、中央データベースからユーザーのリストを読み取り、SambaおよびFreeRADIUSのLDAPディレクトリに再作成する必要があります。問題は、ユーザーが別のエンティティから私に送信され、ハッシュパスワードを使用してデータベースに保存できることです。クリアテキストのパスワードにアクセスできません。好みのハッシュメカニズムを使用して、LDAPに新しいユーザーのハッシュパスワードを直接入力できるかどうか疑問に思っています。そうでない場合、誰かが私が使用しなければならない戦略を教えてもらえますか?

サーバーをUBUNTU12.04で実行していますが、他のすべてのアプリケーションは最新バージョンです。私のデータベースシステムはPostgreSQL9.2です。

ありがとうございました

2
alibaba

OpenLDAPを使用しているため、 互換性のあるハッシュ形式 (および ここ )がある場合は、ハッシュを直接入力できますuserPassword属性に。一部のLDAPクライアントがuserPasswordへの変更を二次的に推測し、ハッシュを適用する場合があることに注意してください(一部のLDAPサーバーが書き込まれたときにこの属性を自動的に変更またはハッシュする方法と同様)。 ldapadd/ldapmodifyは、パスワードを再解釈せずに正しく更新します(サーバーパスワードポリシーがない場合)_ppolicy_hash_cleartext_が有効であり、複雑になる可能性があります)。

使用している形式を判別し、ハッシュまたはハッシュ+ソルト形式の前にタイプタイプを付ける必要があります。 _{SHA}xxxxxx_または_{SSHA}xxxxxx_(xxxxxxはそれぞれbase64でエンコードされたハッシュまたはハッシュ+ソルトです)。

crypt形式の場合は、 _{crypt}_ プレフィックスを付けて入力できますが、OpenLDAPの場合はビルドが必要になります_--enable-crypt_で構成されています。これは、その使用が非推奨であるためです。 OpenLDAPはCライブラリcrypt()関数を使用し、出力に プラットフォーム固有のバリエーション が含まれる場合があります。 Linuxでは、簡単な回避策があります。crypt()は独自のlibcryptライブラリにあり、コンパイル時または実行時に「調整」できます。 (また、crypt()は再入可能ではないため、slapdはmutextを使用して呼び出しを保護します。) _password-crypt-salt-format_ も参照してください。他の方向の問題:OpenLDAPにさまざまな暗号化形式でパスワードを保存させる。

Sambaを使用しているので、 smbk5pwd オーバーレイも調べる必要があります( [〜#〜] readme [〜#〜] の方が便利です)。ただし、これには、userPasswordを直接変更するのではなく、適切な パスワード変更操作 を使用するためにパスワードを変更する必要があることに注意してください。

OpenLDAPでは、SASLを介して 外部システムへのパスワード検証 を委任するオプションもあります(デフォルト以外のビルド構成も必要です)。これは、すべてのユーザーがパスワードをリセットするまでの移行ウィンドウで十分な場合があります。さらなるオプション(これはしばしば驚きです)は、OpenLDAPがユーザーごとに複数のパスワードもサポートし、それぞれが認証中に順番に試行されることです。少し壊れやすいですが(userPassword属性のすべてのライターが正しいことを実行する必要があります)、特に複数のシステムをマージする場合に移行に役立ちます。

3
mr.spuratic