RHEL 7でLDAPベースの認証を設定するRHCSAシリーズ:パート14

この記事では、いくつかのLDAPの基本事項(何か、どこで使用されているか、なぜ使用されるか)を概説し、LDAPサーバーの設定方法と、Red Hat Enterprise Linux 7システムを使用してそれに対して認証するクライアントの構成方法を示します。

RHCSA Series: Setup LDAP Server and Client Authentication – Part 14

見ていくように、他にもいくつかの可能なアプリケーションシナリオがありますが、このガイドではLDAPベースの認証に完全に焦点を当てます。さらに、この主題の広大さを考慮して、ここでは基本的な内容のみをカバーしますが、より詳細な詳細については、概要に記載されているドキュメントを参照できます。

同じ理由から、簡潔さのためにLDAPツールのmanページへのいくつかの参照を省略することに決めましたが、対応する説明は指先の届く距離にあります(例:man ldapadd)。

と言っても、始めましょう。

私たちのテスト環境

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

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

もし望むなら、Kickstartを使用してPart 12: Automate RHEL 7 installationsにインストールされたマシンをクライアントとして使用できます。

LDAPとは何ですか?

LDAPLightweight Directory Access Protocolの略であり、クライアントがネットワークを介して中央に保存された情報(たとえばログインシェルのディレクトリ、ホームディレクトリへの絶対パス、その他のシステムユーザー情報など)にアクセスできるようにする一連のプロトコルです。これらの情報は異なる場所からアクセス可能であり、多数のエンドユーザーが利用できるようにする必要があります(別の例としては、企業の全従業員の自宅住所や電話番号のディレクトリなど)。

このような情報を中央に保持することで、それを使用する権限を付与されたすべての人がより簡単にメンテナンスおよびアクセスできるようになります。

以下の図はLDAPの簡略図を示しており、以下で詳細に説明します:

LDAP Diagram

上記図の詳細な説明。

  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 slapdで確認できます)、このユーザーは管理ツールによって作成されたエントリを変更できるように、サーバーがルートとしてのみ実行できるツールによって作成されたエントリを変更できるように、/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

次の画像に示すように:

Set LDAP Admin Password

そして、以下の内容でLDIFファイル(ldaprootpasswd.ldif)を作成してください:

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

ここで:

  1. PASSWORDは前もって取得したハッシュ化された文字列です。
  2. cn=configはグローバル構成オプションを示します。
  3. olcDatabaseは特定のデータベースインスタンス名を示し、通常は/etc/openldap/slapd.d/cn=config内で見つけることができます。

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

これを考慮しながら進めてください。また、この記事の残りの部分では同じCommon Names (cn=)を使用していることに注意してください。各ステップは前のステップに依存します。

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

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

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

LDAP Configuration

そして、/etc/openldap/schemaディレクトリから基本的なLDAP定義をインポートしてください:

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

6. LDAPがデータベースであなたのドメインを使用するようにします。

適切なドメイン(ドメインコンポーネントdc=内)とパスワードに置き換えて、ldapdomain.ldifという名前の別のLDIFファイルを作成してください。

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
LDAP Domain Configuration

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
Add LDAP Domain Attributes and Values

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

# adduser ldapuser
# vi ldapgroup.ldif

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

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

gidNumber/etc/groupのGIDです(ldapuserのための)、そしてこれをロードします:

# 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
LDAP User Configuration

同様に、作成したユーザーエントリを削除できます:

# 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 Client Configuration

要約

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

ご質問がある場合は、以下のコメントフォームを使用して自由にお問い合わせください。

Source:
https://www.tecmint.com/setup-ldap-server-and-configure-client-authentication/