ウェブサイト検索

RHCSA シリーズ: RHEL 7 での LDAP ベースの認証のセットアップ - パート 14


この記事では、LDAP の基本 (内容、使用場所、理由) の概要を説明することから始め、LDAP サーバーをセットアップし、LDAP サーバーに対して認証するようにクライアントを構成する方法を示します。 Red Hat Enterprise Linux 7システム。

これから説明するように、他にも考えられるアプリケーション シナリオがいくつかありますが、このガイドでは完全にLDAP ベースの認証に焦点を当てます。さらに、この主題は膨大であるため、ここではその基本についてのみ説明しますが、より詳細な詳細については、概要で概説されているドキュメントを参照できることに注意してください。

同じ理由で、簡潔にするために LDAP ツールのマニュアル ページへのいくつかの参照を省くことにしましたが、対応する説明はすぐ近くにあります (man ldapadd など)。例)。

ということで、始めましょう。

弊社のテスト環境

私たちのテスト環境は 2 つのRHEL 7 ボックスで構成されています。


Server: 192.168.0.18. FQDN: rhel7.mydomain.com
Client: 192.168.0.20. FQDN: ldapclient.mydomain.com

必要に応じて、「パート 12: クライアントとしてキックスタートを使用して RHEL 7 のインストールを自動化する」でインストールしたマシンを使用できます。

LDAPとは何ですか?

LDAPLightweight Directory Access Protocol の略で、クライアントがネットワーク経由で中央に保存された情報 (ログイン シェルのディレクトリなど) にアクセスできるようにする一連のプロトコルで構成されています。 、ホーム ディレクトリへの絶対パス、およびその他の一般的なシステム ユーザー情報など)は、さまざまな場所からアクセスできるか、多数のエンド ユーザーが利用できる必要があります(別の例としては、すべての従業員の自宅の住所と電話番号のディレクトリが挙げられます)。会社)。

このような (およびそれ以上の) 情報を一元管理するということは、その情報を使用する権限を付与されたすべてのユーザーが、より簡単に管理およびアクセスできることを意味します。

次の図はLDAP の簡略図を示しており、以下で詳しく説明します。

上図の詳細説明。

  1. LDAP ディレクトリのエントリは単一のユニットまたは情報を表し、いわゆる識別名によって一意に識別されます。
  2. 属性は、エントリに関連付けられた情報です (住所、利用可能な連絡先電話番号、電子メール アドレスなど)。
  3. 各属性には、スペースで区切られたリストで構成される 1 つ以上のが割り当てられます。エントリごとに一意の値は、相対識別名と呼ばれます。

そうは言っても、サーバーとクライアントのインストールに進みましょう。

LDAPサーバーとクライアントのインストールと構成

RHEL 7 では、LDAP はOpenLDAP によって実装されます。サーバーとクライアントをインストールするには、それぞれ次のコマンドを使用します。


yum update && yum install openldap openldap-clients openldap-servers
yum update && yum install openldap openldap-clients nss-pam-ldapd

インストールが完了したら、いくつか確認することがあります。次の手順は、明示的に記載されていない限り、サーバー上でのみ実行する必要があります。

1. サーバーとクライアントの両方で次のブール値を永続的に有効にして、SELinux が邪魔にならないようにします。


setsebool -P allow_ypbind=0 authlogin_nsswitch_use_ldap=0

allow_ypbind は LDAP ベースの認証に必要であり、一部のアプリケーションでは authlogin_nsswitch_use_ldap が必要になる場合があります。

2. サービスを有効にして開始します。


systemctl enable slapd.service
systemctl start slapd.service

systemctl を使用してサービスを無効化、再起動、または停止することもできることに注意してください。


systemctl disable slapd.service
systemctl restart slapd.service
systemctl stop slapd.service

3. slapd サービスは ldap ユーザーとして実行されるため (これは、ps -e -o pid,uname,comm | grep sawd で確認できます) >)、root としてのみ実行できる管理ツールによって作成されたエントリをサーバーが変更できるようにするために、そのようなユーザーは /var/lib/ldap ディレクトリを所有している必要があります (詳細については、「分)。

このディレクトリの所有権を再帰的に変更する前に、slapd のサンプル データベース構成ファイルをディレクトリにコピーします。


cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
chown -R ldap:ldap /var/lib/ldap

4. OpenLDAP 管理ユーザーを設定し、パスワードを割り当てます。


slappasswd

次の図に示すように:

そして、次の内容のLDIFファイル (ldaprootpasswd.ldif) を作成します。


dn: olcDatabase={0}config,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}PASSWORD

どこ :

  1. パスワードは、前に取得したハッシュ化された文字列です。
  2. cn=config はグローバル設定オプションを示します。
  3. olcDatabase は特定のデータベース インスタンス名を示し、通常は /etc/openldap/slapd.d/cn=config 内にあります。

前述の理論的背景を参照すると、ldaprootpasswd.ldif ファイルは LDAP ディレクトリにエントリを追加します。このエントリでは、各行は属性: 値のペアを表します (dn、changetype、add、および olcRootPW は属性であり、各コロンの右側の文字列は対応する値です)。

先に進むときにこの点に留意してください。また、この記事の残りの部分では同じ共通名 (cn=) を使用しており、各ステップは前のステップに依存していることに注意してください。 。

5. ここで、LDAP サーバーを参照するURI を指定して、対応する LDAP エントリを追加します。プロトコル/ホスト/ポート フィールドのみが許可されます。


ldapadd -H ldapi:/// -f ldaprootpasswd.ldif 

出力は次のようになります。

そして、いくつかの基本的な LDAP 定義を /etc/openldap/schema ディレクトリからインポートします。


for def in cosine.ldif nis.ldif inetorgperson.ldif; do ldapadd -H ldapi:/// -f /etc/openldap/schema/$def; done

6. LDAP にデータベース内のドメインを使用させます。

次の内容を含む別の LDIF ファイルを作成し、ldapdomain.ldif と呼びます。ドメイン (ドメイン コンポーネント dc= 内の) とパスワードを必要に応じて置き換えます。


dn: olcDatabase={1}monitor,cn=config
changetype: modify
replace: olcAccess
olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth"
  read by dn.base="cn=Manager,dc=mydomain,dc=com" read by * none

dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=mydomain,dc=com

dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootDN
olcRootDN: cn=Manager,dc=mydomain,dc=com

dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}PASSWORD

dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcAccess
olcAccess: {0}to attrs=userPassword,shadowLastChange by
  dn="cn=Manager,dc=mydomain,dc=com" write by anonymous auth by self write by * none
olcAccess: {1}to dn.base="" by * read
olcAccess: {2}to * by dn="cn=Manager,dc=mydomain,dc=com" write by * read

次に、次のようにロードします。


ldapmodify -H ldapi:/// -f ldapdomain.ldif

7. 次に、LDAP ディレクトリにいくつかのエントリを追加します。次のファイルでは属性と値がコロン (:) で区切られており、このファイルに baseldapdomain.ldif という名前を付けます。


dn: dc=mydomain,dc=com
objectClass: top
objectClass: dcObject
objectclass: organization
o: mydomain com
dc: mydomain

dn: cn=Manager,dc=mydomain,dc=com
objectClass: organizationalRole
cn: Manager
description: Directory Manager

dn: ou=People,dc=mydomain,dc=com
objectClass: organizationalUnit
ou: People

dn: ou=Group,dc=mydomain,dc=com
objectClass: organizationalUnit
ou: Group

エントリを LDAP ディレクトリに追加します。


ldapadd -x -D cn=Manager,dc=mydomain,dc=com -W -f baseldapdomain.ldif

8. ldapuser (adduser ldapuser) という LDAP ユーザーを作成し、ldapgroup.ldif に LDAP グループの定義を作成します。 。


adduser ldapuser
vi ldapgroup.ldif

以下の内容を追加します。


dn: cn=Manager,ou=Group,dc=mydomain,dc=com
objectClass: top
objectClass: posixGroup
gidNumber: 1004

ここで、gidNumber は ldapuser の /etc/group 内の GID です) をロードします。


ldapadd -x -W -D "cn=Manager,dc=mydomain,dc=com" -f ldapgroup.ldif

9. ユーザー ldapuser の定義を含む LDIF ファイル (ldapuser.ldif) を追加します。


dn: uid=ldapuser,ou=People,dc=mydomain,dc=com
objectClass: top
objectClass: account
objectClass: posixAccount
objectClass: shadowAccount
cn: ldapuser
uid: ldapuser
uidNumber: 1004
gidNumber: 1004
homeDirectory: /home/ldapuser
userPassword: {SSHA}fiN0YqzbDuDI0Fpqq9UudWmjZQY28S3M
loginShell: /bin/bash
gecos: ldapuser
shadowLastChange: 0
shadowMax: 0
shadowWarning: 0

そしてそれをロードします:


ldapadd -x -D cn=Manager,dc=mydomain,dc=com -W -f ldapuser.ldif

同様に、作成したばかりのユーザー エントリを削除できます。


ldapdelete -x -W -D cn=Manager,dc=mydomain,dc=com "uid=ldapuser,ou=People,dc=mydomain,dc=com"

10. ファイアウォールを介した通信を許可します。


firewall-cmd --add-service=ldap

11. 最後に、クライアントが LDAP を使用して認証できるようにします。

この最後のステップを支援するために、authconfig ユーティリティ (システム認証リソースを構成するためのインターフェイス) を使用します。

次のコマンドを使用すると、LDAP サーバーに対する認証が成功した後に、要求されたユーザーのホーム ディレクトリが存在しない場合に作成されます。


authconfig --enableldap --enableldapauth --ldapserver=rhel7.mydomain.com --ldapbasedn="dc=mydomain,dc=com" --enablemkhomedir --update

まとめ

この記事では、LDAP サーバーに対して基本認証を設定する方法を説明しました。このガイドで説明されているセットアップをさらに構成するには、TLS を使用したセキュリティ設定に特に注意しながら、『RHEL 7 システム管理者ガイド』の第 13 章 – LDAP 構成を参照してください。

ご質問がございましたら、以下のコメント フォームを使用してお気軽にお問い合わせください。