OpenLDAPサーバーでアカウントパスワードを変更する方法

前書き

LDAPシステムは、ユーザーアカウント情報の保存によく使用されます。 実際、LDAPに対する最も一般的な認証方法には、LDAPエントリ内に保存されているアカウント情報が含まれます。

LDAPエントリがアカウント情報のために外部サービスによって使用されるか、LDAP固有の許可バインドに使用されるだけであるかにかかわらず、パスワード管理を理解することが重要になります。 このガイドでは、LDAPエントリのパスワードを変更する方法について説明します。

自分のユーザーパスワードの変更

パスワードを変更する機能は、LDAPサーバーのアクセス制御によって管理されます。 通常、LDAPは、アカウントが自分のパスワードを変更できるように構成されています。 これは、ユーザーとして以前のパスワードを知っている場合に有効です。

`+ ldappasswd +`ツールを使用して、ユーザーアカウントのパスワードを変更できます。 パスワードを変更するには、LDAPユーザーエントリにバインドし、現在のパスワードで認証する必要があります。 これは、他のOpenLDAPツールと同じ一般的な構文に従います。

パスワードを変更するには、従来のバインド引数を超えるいくつかの引数を提供する必要があります。 次のオプションのいずれかを使用して、古いパスワードを指定する必要があります。

  • * + -a [oldpassword] + *: `+ -a +`フラグを使用すると、コマンドラインのリクエストの一部として古いパスワードを指定できます。

  • * + -A + *:このフラグは、コマンドが入力されたときに古いパスワードの入力を促す `+ -a +`フラグの代替です。

  • * + -t [oldpasswordfile] + *:上記の代わりにこのフラグを使用して、ファイルから古いパスワードを読み取ることができます。

また、次のオプションのいずれかを使用して新しいパスワードを指定する必要があります。

  • * + -s [newpassword] + *: `+ -s +`フラグは、コマンドラインで新しいパスワードを提供するために使用されます。

  • * + -S + *: `+ -s +`フラグのこのバリアントは、コマンドの入力時に新しいパスワードの入力を求めます。

  • * + -T [newpasswordfile] + *:このフラグを上記の代わりに使用して、ファイルから新しいパスワードを読み取ることができます。

各グループから1つのオプションを使用して、サーバーの場所とバインドエントリとパスワードを指定する通常のオプションとともに、LDAPパスワードを変更できます。 技術的には、OpenLDAPはエントリへのバインドに使用されるため、常に古いパスワードを必要とするわけではありませんが、他のLDAP実装ではこれが必要なので、とにかく設定するのが最善です。

通常、コマンドは次のようになります。

ldappasswd -H ldap:// -x -D "" -W -A -S

これは、指定されたLDAPサーバーに接続し、ユーザーDNエントリで認証してから、一連のプロンプトを発行します。 古いパスワードと新しいパスワードを入力して確認するように求められます。実際のバインドを行うには、古いパスワードを再度入力する必要があります。 その後、パスワードが変更されます。

とにかくパスワードを変更するため、プロンプトを使用するよりもコマンドラインで古いパスワードを入力する方が簡単な場合があります。 あなたはこのようにすることができます:

ldappasswd -H ldap:// -x -D "" -w  -a  -S

RootDNバインドを使用してユーザーのパスワードを変更する

`+ ldappasswd +`ツールを使用すると、LDAP管理者として必要に応じて別のユーザーのパスワードを変更することもできます。 技術的には、アカウントのパスワードへの書き込みアクセス権を持つ任意のアカウントにバインドできますが、このアクセスは通常rootDN(管理)エントリとアカウント自体に制限されます。

別のユーザーのパスワードを変更するには、昇格された特権を持つエントリにバインドしてから、変更するエントリを指定する必要があります。 通常、rootDNにバインドします(このアカウントを見つける方法を見つける必要がある場合は、次のセクションを参照してください)。

基本的な `+ ldappasswd `コマンドは非常に似ていますが、唯一の違いはコマンドの最後に変更するエントリを指定する必要があることです。 古いパスワードを使用できる場合は、「-a 」または「 -A +」オプションを使用できますが、多くの場合、ユーザーのパスワードを変更する場合はそうではありません。 古いパスワードがない場合は、そのままにしておきます。

たとえば、LDAPサーバーのrootDNが「+ cn = admin、dc = example、dc = com 」であり、変更するパスワードが「 uid = bob、ou = people、dc = example」の場合、 dc = com + `エントリ、これを入力できます:

ldappasswd -H ldap:// -x -D "" -W -S "uid=bob,ou=people,dc=example,dc=com"

Bobの新しいパスワードの入力を求められます。その後、変更を行うために管理者エントリにバインドするために必要なパスワードの入力を求められます。

RootDNパスワードの変更

LDAP管理パスワードを忘れた場合は、LDAPシステムのサーバーでrootまたは「+ sudo +」アクセス権を取得してリセットする必要があります。 サーバーにログインして開始します。

現在のRootDN情報の検索

まず、RootDNアカウントと現在のRootDNパスワードハッシュを見つける必要があります。 これは特別な `+ cn = config +`設定DITで利用可能です。 次のように入力して、探している情報を見つけることができます。

sudo ldapsearch -H ldapi:// -LLL -Q -Y EXTERNAL -b "cn=config" "(olcRootDN=*)" dn olcRootDN olcRootPW | tee ~/newpasswd.ldif

これにより、DITのrootDNアカウントとパスワードが返されます。 また、これが定義されている構成データベースも通知します。 また、この情報をホームディレクトリのファイルに書き込んで、新しいパスワードハッシュを取得したら変更できるようにしました。

DITのRootDNおよびRootPW

dn: olcDatabase={1}hdb,cn=config
olcRootDN: cn=admin,dc=example,dc=com
olcRootPW: {SSHA}ncCXAJ5DjfRWgxE9pz9TUCNl2qGQHQT3

新しいパスワードのハッシュ

次に、 `+ slappasswd `ユーティリティを使用して新しいパスワードをハッシュできます。 クエリした ` olcRootPW `行にあったものと同じハッシュを使用します。これは、括弧付きのプレフィックス値で示されます。 私たちの場合、これは ` {SSHA} +`です。

`+ slappasswd +`ユーティリティを使用して、使用するパスワードの正しいハッシュを生成します。 最後のコマンドで作成したファイルの最後に新しいハッシュを追加します。 非ルートアカウントを使用している場合は、コマンドへのフルパスを指定する必要があります。

/usr/sbin/slappasswd -h  >> ~/newpasswd.ldif

使用する新しいパスワードの入力と確認を求められます。 ハッシュ値はファイルの最後に追加されます。

Config DITのパスワードの変更

これで、ファイルを編集して、パスワードを変更する有効なLDIFコマンドを作成できます。 書き込み先のファイルを開きます:

nano ~/newpasswd.ldif

これは次のようになります。

〜/ newpasswd.ldif

dn: olcDatabase={1}hdb,cn=config
olcRootDN: cn=admin,dc=example,dc=com
olcRootPW: {SSHA}ncCXAJ5DjfRWgxE9pz9TUCNl2qGQHQT3

{SSHA}lieJW/YlN5ps6Gn533tJuyY6iRtgSTQw

LDAPサーバーに複数のDITがあるかどうかに応じて、複数の値を持つことができます。 その場合は、 `+ olcRootDN `値を使用して、変更する正しいアカウントを見つけます。 他の「 dn 」、「 olcRootDN 」、「 olcRootPW +」のトリプレットがある場合は削除します。

「+ olcRootDN 」行が変更しようとしているアカウントと一致することを確認したら、コメントアウトします。 その下に、2行追加します。 最初の行は ` changetype:modify `を指定し、2行目はLDAPに ` replace:olcRootPW +`を試みていることを伝えます。 これは次のようになります。

〜/ newpasswd.ldif

dn: olcDatabase={1}hdb,cn=config
olcRootDN: cn=admin,dc=example,dc=com


olcRootPW: {SSHA}ncCXAJ5DjfRWgxE9pz9TUCNl2qGQHQT3

{SSHA}lieJW/YlN5ps6Gn533tJuyY6iRtgSTQw

次に、 `+ olcRootPW +`行にあるハッシュを削除し、以下で生成したものと置き換えます。 余分な線を削除します。 次のようになります。

〜/ newpasswd.ldif

dn: olcDatabase={1}hdb,cn=config
#olcRootDN: cn=admin,dc=example,dc=com
changetype: modify
replace: olcRootPW
olcRootPW:

完了したら、ファイルを保存して閉じます。

次のように入力して、変更を適用できます。

sudo ldapmodify -H ldapi:// -Y EXTERNAL -f ~/newpasswd.ldif

これにより、 + cn = config DIR内の管理者パスワードが変更されます。

通常のDITでのパスワードの変更

これにより、管理DIT内のエントリのパスワードが変更されました。 ただし、通常のDIT内のエントリを変更する必要があります。 現在、古いパスワードと新しいパスワードの両方が有効です。 これを修正するには、新しい資格情報を使用して通常のDITエントリを変更します。

LDIFファイルを再度開きます。

nano ~/newpasswd.ldif

`+ dn:`行の値を、先にコメントアウトしたRootDN値に置き換えます。 このエントリは、パスワード変更の新しいターゲットです。 また、正しい値を変更するために、「 olcRootPW 」の「両方」の出現を「 userPassword +」で変更する必要があります。 終了すると、LDIFファイルは次のようになります。

[output ~/newpasswd.ldif]
dn:
changetype: modify
replace:
: {SSHA}lieJW/YlN5ps6Gn533tJuyY6iRtgSTQw

ファイルを保存して閉じます。

これで、config DITで設定した新しいパスワードを使用してバインドすることにより、そのエントリのパスワードを変更できます。 操作を実行するには、RootDNエントリにバインドする必要があります。

ldapmodify -H ldap:// -x -D "" -W -f ~/newpasswd.ldif

config DITで設定した新しいパスワードの入力を求められます。 認証されると、パスワードは変更され、認証のために新しいパスワードのみが残されます。

結論

LDAPはアカウント情報の保存によく使用されるため、パスワードを適切に管理する方法を知ることが重要です。 ほとんどの場合、プロセスは比較的単純ですが、より集中的な操作の場合は、少しの作業でパスワードを変更できるはずです。