システム管理者は、おそらくすでにLDAPプロトコルに精通しているでしょう。 。
中規模から大規模の会社で働いている場合は、会社がすでにLDAPサーバーを所有していることを確認できます。 、LinuxまたはWindowsのどちらでも。
80年代初頭に発明されたLDAPプロトコル(ライトウェイトディレクトリアクセスプロトコル用) )は、ネットワーク経由でアクセスする必要のあるデータを保存するために作成されました。
LDAPプロトコルはRFC4511仕様の一部として定義されており、さまざまなベンダーによって実装されています。
このチュートリアルでは、LDAPプロトコルの実装の1つである OpenLDAPを見ていきます。 。
OpenLDAPは、LDAPの無料のオープンソース実装です。 サーバー(slapdと呼ばれる)と、開発者向けのユーティリティとライブラリを提供します。
このチュートリアルを使用すると、完全なOpenLDAPサーバーをセットアップし、中央認証に使用するために構成することができます。
何を学ぶか
このチュートリアルを最後まで実行すると、次のトピックについて学ぶことができます:
- OpenLDAPサーバーをインストールする方法 Debian10で;
- OpenLDAPを設定する方法 構成の実際の意味;
- LDIFの使用方法 およびLDAPユーティリティ LDAPデータベースを変更するには;
- OpenLDAPサーバーにユーザーを追加する方法 中央認証用;
- クライアントのセットアップ方法とLinuxでの中央認証の仕組み
これはかなり長い記事なので、これ以上面倒なことはせずに、Debian10に簡単なOpenLDAPサーバーをインストールすることから始めましょう。
Debian10にOpenLDAPサーバーをインストールする
開始する前に、システムの管理者権限があることを確認する必要があります。新しいパッケージをインストールするために管理者権限が必要になります。
sudo権限があるかどうかを確認するには、「-v」オプションを指定して「sudo」コマンドを実行します。
$ sudo -v
Debian10またはCentOS8のユーザーにsudo権限を提供する方法がわからない場合は、それに関する専用ガイドを必ずお読みください。
また、リポジトリから最新のパッケージバージョンを取得するには、パッケージが正しく更新されていることを確認してください。
$ sudo apt-get update
Linuxでは、OpenLDAPサーバーは「 slapd」と呼ばれます 「。
これは、シンプルで構成可能なスタンドアロンサーバーです。 これは、LDAPディレクトリの読み取り、変更、および削除に使用されます。
slapdデーモンには、新しいエントリを簡単に作成したり、エントリを簡単に変更したりするために使用できるさまざまなユーティリティも付属しています。たとえば、slapaddやslappasswdなどです。
$ sudo apt-get install slapd
この新しいパッケージをインストールするとき、インストールの最後にslapdデーモンを構成するように求められます。
Debian10でのslapdの設定
slapd構成は、テキストベースのインターフェイスとして提供されます。 サーバーを適切にセットアップするために入力する必要があること。
まず、LDAPサーバーの管理者パスワードを入力するように求められます。

安全なパスワードを選択してください LDAPディレクトリの管理者エントリには、ツリー全体に対するすべての権限があるためです。つまり、すべてのエントリを追加、削除、変更し、すべてのLDAP属性を読み取ります。
次の画面で、パスワードの確認を求められます。前の画面で入力した内容を入力するだけです。

そこから、LDAPサーバーを初期化する必要があります 。
slapdサーバーをインストールする場合、インストールも:
- 「openldap」という名前のユーザーを作成しました サーバー上の」
- / etc / ldapで利用できる初期構成を作成しました
- 初期の空のデータベースを作成しました 新しいエントリを受け入れる準備ができています。

デフォルトでは、OpenLDAPサーバーは現在のドメイン名を反映する最初のデータベースエントリを作成します。
ただし、ドメイン名を適切に構成しなかった場合(たとえば、インストール中)、OpenLDAPサーバーが正しく構成されていない可能性があります。
OpenLDAPサーバーの初期構成を最初に確認するには、「slapcat」コマンドを使用して、slapdによって作成された識別名を監視します。
$ sudo slapcat
$ sudo slapcat | grep dn

通常、OpenLDAPの上位DNはドメインのDNS名と一致する必要があります。
つまり、現在「devconnected.com」ドメインで作業している場合、OpenLDAPサーバーには「dc =devconnected、dc=com」という上位の識別名が必要です。
ご覧のとおり、現時点ではそうではありませんが、幸いなことに、slapdデーモンを再構成する方法があります。
dpkg-reconfigureを使用したslapdの再構成
slapdデーモンを再構成するには、「 dpkg-reconfigure」を実行します。 「slapd」デーモンの「」コマンド。繰り返しますが、slapdを再構成するにはsudo権限が必要です。
$ sudo dpkg-reconfigure slapd

まず、OpenLDAPサーバーの設定を省略するかどうかを尋ねられます。
データベースの初期構成を作成する必要があるため、このオプションで「いいえ」を押したいのは明らかです。
次のステップで、LDAPサーバーの基本識別名を入力するように求められます。

ご覧のとおり、slapdデーモンは、DNSドメイン名がOpenLDAPディレクトリのベースDNを構築するために使用されることを説明しています。
この場合、「dc =devconnected、dc =com」を選択しています。現在のDNS設定に一致するように、このエントリを変更する必要があることに注意してください。
所属するドメインがわからない場合は、端末で「domainname」コマンドを使用してください。
$ domainname
devconnected.com
次に、組織の名前を入力するように求められます 。これは前に行った手順とまったく同じです。組織名を入力して[OK]をクリックするだけです。

最後に、最初のslapd構成と同様に、LDAPサーバーの管理者資格情報を提供するように求められます。 。
繰り返しになりますが、LDAPディレクトリ内のすべてのエントリを読み取って変更するために使用できる強力なパスワードを選択してください。

次の画面で、LDAPで使用するバックエンドを指定するように求められます。
このステップでは、別のストレージバックエンドを選択する理由がない限り、デフォルト値(MariaDBバックエンドのMDBを意味します)を維持する必要があります。

次に、slapdがパージされたときにデータベースを削除するかどうかを尋ねられます。
この場合、「いいえ」を選択します :slapdパッケージを更新したり、別のLDAPサーバーに切り替えたりするだけの状況はたくさんあります。
[はい]を選択すると、データベースが削除されます。これは、LDAPディレクトリのバックアップがない場合に実際に問題になる可能性があります。

最後に、警告が表示されます。“ / var / lib”にはすでにいくつかのファイルがあります。 サーバーのディレクトリ。
このディレクトリには、現在、古いデータベースが保存されています。 OpenLDAPサーバーを再構成しようとすると、このフォルダーの内容が上書きされます。
「はい」を選択すると、slapdユーティリティは既存のデータベースのコンテンツを「/ var/backups」フォルダにバックアップします。

終わり!
これで、slapdサーバーが現在のDNS設定と一致するように適切に構成されました。
LDAPデータベースのコンテンツを最初に確認するには、「slapcat」を実行するだけです(現在rootとしてログに記録されていない場合はsudo権限を使用)
$ sudo slapcat

この初期設定で:
- 構成ファイル 「/etc/ ldap」に保存されます:ldap構成ファイル、slapdに追加できるスキーマ、およびサーバーのカスタマイズに使用されるslapd.dディレクトリが保存されます。
- データベース 「data.mdb」データベースの下の「/var/ lib / ldap」に保存されます。すべてが失われないようにするために、おそらくこのファイルのバックアップを設定する必要があります。
LDAPのファイアウォールルールの構成
ファイアウォールを使用している場合は、LDAPサーバーへの受信要求を受け入れる必要がある可能性が非常に高くなります。
簡単に言うと、OpenLDAPはポート389で実行されます。
正しく実行されていることを確認するには、「slapd」サーバーで「systemctlstatus」コマンドを実行します。
$ sudo systemctl status slapd

Debianの最近のディストリビューションを使用している場合は、おそらく UFWを使用しています。 デフォルトのファイアウォールとして。
UFWでOpenLDAPを有効にするには、サーバーのポート389で「ufwallow」コマンドを実行します。 TCP接続とUDP接続をすべて一緒に受け入れることができます。
$ sudo ufw allow 389
Rule added
Rule added (v6)
次に、statusコマンドを使用してルールが正しく作成されたことを確認できます。

次のセクションでは、LDIFファイルを使用してLDAPサーバーに新しいエントリを簡単に追加する方法を説明します。
LDIFファイルを使用してOpenLDAPエントリを追加する
OpenLDAPサーバーに新しいエントリを追加する場合、「slapadd」ユーティリティを使用して新しいLDIFファイルを追加できます。
ただし、これは使用するユーティリティではなく、代わりに「ldapadd」を使用します。
slapaddとldapaddの違い
新しいエントリを追加する前に、slapユーティリティとldapユーティリティの違いを知っておくことが重要です。
どちらのユーティリティも、LDIF形式のファイルを引数として取り、データベースへのコンテンツを持っていました。
ただし、slapaddを使用する場合は、LDAPサーバーを再起動する必要があります。 適用される変更について。
これは、「ldapadd」などのldapユーティリティを使用する場合には当てはまりません。変更はディレクトリツリーで直接実行されます。
「ldapadd」、「ldapsearch」、およびその他のLDAPユーティリティを使用できるようにするには、システムに「ldap-utils」パッケージをインストールする必要があります。
$ sudo apt-get install ldap-utils
最初のLDIFファイルの作成
前に説明したように、コンソールラインを使用している場合は、LDIFファイルを作成する必要があります。 それらを現在のLDAP構成またはデータベースに追加します。
LDIF形式は、LDAPディレクトリ内の既存のエントリを追加または変更するために使用される形式です。
LDIFを使用して、変更するノードの識別名を指定し、実行する変更を記述します。
例として、LDAPディレクトリに「users」という名前の新しいノードを作成するとします。
ユーザーグループの追加
これを実現するには、「users.ldif」という名前の新しいLDIFファイルを作成し、その中に次のコンテンツを追加します。
$ sudo touch /etc/ldap/users.ldif
# Content of the users file
dn: ou=People,dc=devconnected,dc=com
objectClass: organizationalUnit
ou: People
ご覧のとおり、追加するノードの完全なDNが提供され、オブジェクトクラスと作成するノードの名前を指定します。
このエントリをLDAPディレクトリに追加するには、「ldapadd」コマンドを使用して、使用するLDIFファイルを指定する必要があります。
$ sudo ldapadd -D "cn=admin,dc=devconnected,dc=com" -W -H ldapi:/// -f users.ldif
Enter LDAP Password:
added new entry "ou=People,dc=devconnected,dc=com"
LDAPユーティリティのオプションに慣れていない場合は、提供されているオプションの説明を次に示します:
- -D :バインドするノードを指定するために使用されます。 LDAPサーバーに新しいエントリを追加する場合、認証メカニズムを選択できますが、通常は、ツリーのすべての権限を取得するために管理ノードにバインドする必要があります。
- -W :接続時にパスワードの入力を求めることを指定するために使用されます。
- -H :接続するLDAPサーバーを指定するために使用されます。この場合、ローカルホストで利用可能なLDAPサーバーに接続しています;
- -f :LDAPサーバーに追加するLDIFファイルを指定します。
デフォルトでは、LDAPに新しいエントリを追加するために外部認証を使用できないことに注意してください。ACLはそれを行うように構成されていません。
ノードがツリーに追加されたので、「ldapsearch」コマンドを使用してノードを見つけることができます。
$ sudo ldapsearch -x -b "dc=devconnected,dc=com" ou

すばらしい!
「People」組織単位が追加されたので、LDAPツリーにユーザーを追加しましょう。
LDAPへの新しいユーザーの追加
新しいユーザーを追加するために、同じロジックに従います。ユーザーの個々のエントリを含むLDIFファイルを作成します。
前に説明したように、OpenLDAPは「オブジェクト」を定義するためにスキーマを使用します 」ディレクトリに追加できます。
この場合、デフォルトでデータベース構成にすでに追加されている「posixAccount」スキーマを使用します。
「posixAccount 」オブジェクトには、ユーザー名、名前などのLinuxユーザーアカウントを説明するために使用できるいくつかのフィールドがありますが、最も重要なのはユーザーパスワードです。 。
新しいLDIFファイルを作成し、その中に次のコンテンツを追加します:
$ sudo touch /etc/ldap/new_users.ldif
# Content of new_users LDIF file
dn: cn=john,ou=People,dc=devconnected,dc=com
objectClass: top
objectClass: account
objectClass: posixAccount
objectClass: shadowAccount
cn: john
uid: john
uidNumber: 10001
gidNumber: 10001
homeDirectory: /home/john
userPassword: <password>
loginShell: /bin/bash
完了したら、ファイルを保存し、ldapaddコマンドを使用してエントリをLDAPディレクトリツリーに追加します。
$ sudo ldapadd -D "cn=admin,dc=devconnected,dc=com" -W -H ldapi:/// -f new_users.ldif
Enter LDAP Password:
added new entry "cn=john,ou=People,dc=devconnected,dc=com"
おめでとうございます。これで、最初のユーザーがOpenLDAPに保存されました。
LDAP検索コマンドを発行することにより、ユーザー情報を読み取ることができます。 ACLによって制限されているため、ユーザーパスワードを読み取ることができないことに注意してください。
$ sudo ldapsearch -x -b "ou=People,dc=devconnected,dc=com"

LDAPサーバーが構成されたので、中央認証を構成するためにクライアントを構成しましょう。
集中認証用のLDAPクライアントの構成
このOpenLDAPサーバー設定の最後のセクションでは、LDAPクライアントを構成する方法について説明します。 (つまり、ホストマシン)LDAP情報を使用して接続するため。
LDAPクライアント認証の仕組み
コマンドを発行する前に、私たちが実際に構築しているものをグローバルに理解することが重要です。
LDAP(およびNIS)の前は、ネットワークの複数のコンピューターでユーザーとグループのアクセス許可を構成する場合は、それらに1つずつ接続し、設定を変更する必要がありました。
LDAPは、このための優れたソリューションとして提供されます。 LDAPは、ユーザー情報をネットワーク上の1か所に一元化します。

クライアントがドメインのいずれかのマシンに接続すると、ホストは最初にLDAPサーバーに接続し、提供されたユーザーパスワードが正しいことを確認します。
クライアントライブラリはバインド(または認証)します 管理者アカウントを使用してリモートLDAPサーバーに接続し、接続しようとしているユーザーに関連付けられている情報を取得します。
次に、アカウントに関連付けられているパスワードを取得し、ログイン時に入力したパスワードと比較します。
パスワードが一致する場合は、アカウントにログインします。一致しない場合は、拒否されます。

DebianでクライアントLDAP認証を設定する
クライアントLDAP認証を設定するには、「 libnss-ldap」をインストールする必要があります 」クライアントのパッケージ。
$ sudo apt-get install libnss-ldap
このパッケージをインストールすると、クライアントの集中認証を構成するために、さまざまな質問が表示されます。
まず、LDAPサーバーのURLを入力するように求められます。DNS解決の問題を回避するために、IPアドレス(明らかに静的として構成されている)を設定することをお勧めします。
サーバーで、ipコマンドを使用してIPアドレスを特定し、クライアントの対応するフィールドに入力します。
# On the server
$ ip a

注 :LDAPIプロトコルではなくLDAPプロトコルを使用していることを確認してください。 LDAPIプロトコルを使用すると、何らかの理由でサーバーにアクセスできなくなります。
次に、LDAPサーバーのルート識別名を入力するように求められます 。よくわからない場合は、サーバーでldapsearchコマンドを実行して、この情報を取得する必要があります。

次の画面で、使用するLDAPバージョンを尋ねられます:今のところLDAPバージョン3を選択してください。

次に、ローカルルートをデータベース管理者にするかどうかを尋ねられます。
「はい」と入力します ホストマシンから直接ユーザーパスワードを変更する場合は、このオプションに変更します。
このオプションを使用すると、「passwd」を実行して、LDAPディレクトリでパスワードを直接変更できるようになります。これは非常に便利です。

デフォルトでは、LDAPデータベースはログインを必要としないため、このオプションに「いいえ」と入力できます。
注 :LDAPデータベースにはログインがありませんが、LDAPディレクトリの最上位に管理者アカウントがあります。これらは2つの異なる概念であり、互いに大きく異なります。

次に、LDAP管理者アカウントと入力します bindindsに使用されます。
念のため、これはサーバーからユーザーパスワード情報を取得するために使用されるアカウントです。

最後に、LDAPサーバーの管理者アカウントに関連付けられているパスワードを入力します。

これで、LDAPサーバーにクエリを実行できるようになります。
クライアント情報をLDAPにリンクする
クライアント情報(ユーザー名やパスワードなど)をLDAPディレクトリにリンクするには、nsswitchファイルを変更する必要があります。
nsswitchファイルは、システム上の一部の情報(ユーザー、グループ、ホストなど)をさまざまなソース(ローカル、LDAP、NISなど)にリンクするために使用されます。
/etc/nsswitch.confファイルを編集し、最初の4つのセクション(passwd、group、shadow、gshadow)に「ldap」エントリを追加します。
$ sudo nano /etc/nsswitch.conf

ファイルを保存すると、LDAPサーバーからユーザーを一覧表示できるようになります。
$ getent passwd
注 :getentコマンドに慣れていない場合は、Linuxでユーザーを一覧表示するために使用されるすべてのコマンドを次に示します。

素晴らしい!
LDAPを介してユーザーを取得できるようになったため、LDAPディレクトリで指定したユーザーパスワードを使用してこのアカウントにログインできるようになります。
$ su - john
<Type password specified in LDAP>
[email protected]:/home/john
結論
このチュートリアルでは、Debian10で簡単なOpenLDAPサーバーを簡単にセットアップする方法を学びました。 slapdユーティリティを使用します。
LDAPユーティリティについても学びました LDAPディレクトリにエントリを追加および検索するために使用できます。
最後に、LDAP認証を使用してマシンに接続するためにクライアントマシンを構成する方法を確認しました。
これは、ほとんどの企業のITアーキテクチャで使用できるアーキテクチャです。パスワードがクリアテキストでネットワーク経由で送信されないようにするには、TLS暗号化を設定する必要があることに注意してください。
Linuxシステム管理に興味がある場合は、Webサイトに専用のセクションがありますので、ぜひチェックしてください!