OpenLDAPサーバーでアカウントのパスワードを変更する方法
序章
LDAPシステムは、ユーザーアカウント情報を保存するためによく使用されます。 実際、LDAPを認証する最も一般的な方法のいくつかには、LDAPエントリ内に格納されているアカウント情報が含まれます。
LDAPエントリがアカウント情報のために外部サービスによって使用される場合でも、LDAP固有の承認バインドのためだけに使用される場合でも、パスワード管理を理解することが重要になります。 このガイドでは、LDAPエントリのパスワードを変更する方法について説明します。
自分のユーザーパスワードの変更
パスワードを変更する機能は、LDAPサーバーのアクセス制御によって管理されます。 通常、LDAPは、アカウントが自分のパスワードを変更できるように構成されています。 これは、ユーザーとして以前のパスワードを知っている場合にうまく機能します。
ldappasswd
ツールを使用して、ユーザーアカウントのパスワードを変更できます。 パスワードを変更するには、LDAPユーザーエントリにバインドし、現在のパスワードで認証する必要があります。 これは、他のOpenLDAPツールと同じ一般的な構文に従います。
パスワードを変更するには、従来のバインド引数以外にもいくつかの引数を指定する必要があります。 次のいずれかのオプションを使用して、古いパスワードを指定する必要があります。
- -[oldpassword] :
-a
フラグを使用すると、コマンドラインでの要求の一部として古いパスワードを指定できます。 - -A :このフラグは、コマンドの入力時に古いパスワードの入力を求める
-a
フラグの代替です。 - -t [oldpasswordfile] :上記の代わりにこのフラグを使用して、ファイルから古いパスワードを読み取ることができます。
また、次のいずれかのオプションを使用して新しいパスワードを指定する必要があります。
- -s [newpassword] :
-s
フラグは、コマンドラインで新しいパスワードを指定するために使用されます。 - -S :
-s
フラグのこのバリアントは、コマンドが入力されたときに新しいパスワードの入力を求めます。 - -T [newpasswordfile] :上記の代わりにこのフラグを使用して、ファイルから新しいパスワードを読み取ることができます。
各グループの1つのオプションと、サーバーの場所、バインドエントリ、およびパスワードを指定する通常のオプションを使用して、LDAPパスワードを変更できます。 技術的には、OpenLDAPはエントリへのバインドに使用されるため、必ずしも古いパスワードを必要としませんが、他のLDAP実装ではこれが必要になるため、とにかく設定することをお勧めします。
通常、コマンドは次のようになります。
ldappasswd -H ldap://server_domain_or_IP -x -D "user_dn" -W -A -S
これにより、指定されたLDAPサーバーに接続し、ユーザーDNエントリで認証してから、一連のプロンプトを発行します。 古いパスワードと新しいパスワードを入力して確認するように求められます。その後、実際のバインドを実行するには、古いパスワードを再度入力する必要があります。 その後、パスワードが変更されます。
とにかくパスワードを変更するので、プロンプトを使用するよりもコマンドラインで古いパスワードを入力する方が簡単な場合があります。 あなたはこのようにそれをすることができます:
ldappasswd -H ldap://server_domain_or_IP -x -D "user's_dn" -w old_passwd -a old_passwd -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://server_domain_or_IP -x -D "cn=admin,dc=example,dc=com" -W -S "uid=bob,ou=people,dc=example,dc=com"
ボブの新しいパスワードの入力を求められ、次に、変更を行うために管理者エントリにバインドするために必要なパスワードの入力を求められます。
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
ユーティリティを使用して、使用するパスワードの正しいハッシュを生成します。 最後のコマンドで作成したファイルの最後に新しいハッシュを追加します。 root以外のアカウントを使用している場合は、コマンドへのフルパスを指定する必要があります。
/usr/sbin/slappasswd -h {SSHA} >> ~/newpasswd.ldif
使用する新しいパスワードを入力して確認するように求められます。 ハッシュ値はファイルの最後に追加されます。
ConfigDITでのパスワードの変更
これで、ファイルを編集して、パスワードを変更するための有効な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 changetype: modify replace: olcRootPW 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: {SSHA}lieJW/YlN5ps6Gn533tJuyY6iRtgSTQw
終了したら、ファイルを保存して閉じます。
これで、次のように入力して変更を適用できます。
sudo ldapmodify -H ldapi:// -Y EXTERNAL -f ~/newpasswd.ldif
これにより、cn=config
DIT内の管理者パスワードが変更されます。
通常のDITでのパスワードの変更
これにより、管理DIT内のエントリのパスワードが変更されました。 ただし、通常のDIT内のエントリを変更する必要があります。 現在、古いパスワードと新しいパスワードの両方が有効です。 新しい資格情報を使用して通常のDITエントリを変更することで、これを修正できます。
LDIFファイルを再度開きます。
nano ~/newpasswd.ldif
dn:
行の値を、前にコメントアウトしたRootDN値に置き換えます。 このエントリは、パスワード変更の新しいターゲットです。 また、olcRootPW
のboth オカレンスをuserPassword
に変更して、正しい値を変更する必要があります。 終了すると、LDIFファイルは次のようになります。
[output ~/newpasswd.ldif] dn: cn=admin,dc=example,dc=com changetype: modify replace: userPassword userPassword: {SSHA}lieJW/YlN5ps6Gn533tJuyY6iRtgSTQw
ファイルを保存して閉じます。
これで、構成DITで設定した新しいパスワードを使用してそのエントリにバインドすることにより、そのエントリのパスワードを変更できます。 操作を実行するには、RootDNエントリにバインドする必要があります。
ldapmodify -H ldap:// -x -D "cn=admin,dc=example,dc=com" -W -f ~/newpasswd.ldif
構成DITで設定した新しいパスワードの入力を求められます。 認証されると、パスワードが変更され、認証のために新しいパスワードのみが残されます。
結論
LDAPはアカウント情報の保存によく使用されるため、パスワードを適切に管理する方法を知ることが重要です。 ほとんどの場合、プロセスは比較的単純ですが、より集中的な操作の場合でも、少しの作業でパスワードを変更できるはずです。