前書き

LDAP(Lightweight Directory Access Protocol)は、ネットワーク経由で階層ディレクトリ情報を管理およびアクセスするために設計された標準プロトコルです。 あらゆる種類の情報を保存するために使用できますが、ほとんどの場合、集中認証システムとして、または企業の電子メールと電話のディレクトリに使用されます。

このガイドでは、Ubuntu 16.04にOpenLDAPサーバーをインストールおよび構成する方法について説明します。 次に、LDAP情報を表示および操作するためのWebインターフェイスであるphpLDAPadminをインストールします。 無料の自動証明書を提供するLet’s EncryptのSSL証明書を使用して、ウェブインターフェースとLDAPサービスを保護します。

前提条件

このチュートリアルを開始する前に、ApacheおよびPHPでUbuntu 16.04サーバーをセットアップする必要があります。 チュートリアルhttps://www.digitalocean.com/community/tutorials/how-to-install-linux-apache-mysql-php-lamp-stack-on-ubuntu-16-04[Linuxのインストール方法、 Ubuntu 16.04上のApache、MySQL、PHP(LAMP)スタック]。MySQLデータベースサーバーは必要ないため、ステップ2はスキップします。

さらに、Webインターフェースにパスワードを入力するため、SSL暗号化でApacheを保護する必要があります。 Ubuntu 16.04でLet’s EncryptでApacheを保護する方法を読んでください無料のSSL証明書をダウンロードして設定します。 この手順を完了するには、ドメイン名が必要です。 これらと同じ証明書を使用して、安全なLDAP接続も提供します。

ステップ1-LDAPサーバーのインストールと構成

最初の手順は、LDAPサーバーといくつかの関連ユーティリティをインストールすることです。 幸い、必要なパッケージはすべてUbuntuのデフォルトリポジトリで利用できます。

サーバーにログインします。 このセッションで初めて `+ apt-get +`を使用するので、ローカルパッケージインデックスを更新し、必要なパッケージをインストールします。

sudo apt-get update
sudo apt-get install slapd ldap-utils

インストール中に、LDAPの管理者パスワードを選択して確認するように求められます。 ここに何でも入力できます。すぐに更新できるためです。

パッケージをインストールしたばかりですが、すぐに再構成します。 `+ slapd +`パッケージには多くの重要な設定に関する質問をする機能がありますが、デフォルトではインストールプロセスでスキップされます。 システムにパッケージを再構成するように指示することにより、すべてのプロンプトにアクセスできます。

sudo dpkg-reconfigure slapd

このプロセスで回答する新しい質問がかなりあります。 ほとんどのデフォルトを受け入れます。 質問を見ていきましょう。

  • OpenLDAPサーバーの構成を省略しますか?

  • DNSドメイン名?

  • このオプションは、ディレクトリパスの基本構造を決定します。 メッセージを読んで、これがどのように実装されるかを正確に理解してください。 実際のドメインを所有していない場合でも、実際に好きな値を選択できます。 ただし、このチュートリアルでは、サーバーの適切なドメイン名があることを前提としているため、それを使用する必要があります。 チュートリアル全体で* example.com *を使用します。

  • 組織名?

  • このガイドでは、組織の名前として* example *を使用します。 適切だと思うものなら何でも選択できます。

  • 管理者パスワード?

  • データベースバックエンド?

  • slapdが削除されたときにデータベースを削除しますか?

  • 古いデータベースを移動しますか?

  • LDAPv2プロトコルを許可しますか?

この時点で、LDAPサーバーが構成され、実行されています。 外部クライアントが接続できるように、ファイアウォールのLDAPポートを開きます。

sudo ufw allow ldap

`+ ldapwhoami +`を使用してLDAP接続をテストしてみましょう。これにより、接続しているユーザー名が返されます。

ldapwhoami -H ldap:// -x
Outputanonymous

「+ anonymous 」は、LDAPサーバーにログインせずに「 ldapwhoami +」を実行したため、予想される結果です。 これは、サーバーが実行され、クエリに応答していることを意味します。 次に、LDAPデータを管理するためのウェブインターフェースを設定します。

手順2-phpLDAPadmin Webインターフェイスのインストールと構成

コマンドラインからLDAPを管理することは非常に可能ですが、ほとんどのユーザーはWebインターフェイスを使用する方が簡単だと感じるでしょう。 この機能を提供するPHPアプリケーションであるphpLDAPadminをインストールします。

UbuntuリポジトリにはphpLDAPadminパッケージが含まれています。 `+ apt-get`でインストールできます:

sudo apt-get install phpldapadmin

これにより、アプリケーションがインストールされ、必要なApache構成が有効になり、Apacheがリロードされます。

これで、Webサーバーはアプリケーションを提供するように構成されましたが、さらに変更を加える必要があります。 ドメインを使用し、LDAPログイン情報を自動入力しないようにphpLDAPadminを構成する必要があります。

テキストエディタでルート権限でメイン構成ファイルを開くことから始めます。

sudo nano /etc/phpldapadmin/config.php

`+ $ servers→ setValue( ‘server’、 ‘name’ `で始まる行を探します。 「 nano 」では、「 CTRL-W 」、次に文字列、「 ENTER +」の順に入力して文字列を検索できます。 カーソルが正しい行に置かれます。

この行は、LDAPサーバーの表示名であり、Webインターフェイスがサーバーに関するヘッダーとメッセージに使用します。 ここで適切なものを選択してください。

/etc/phpldapadmin/config.php

$servers->setValue('server','name','');

次に、 `+ $ servers→ setValue( ‘server’、 ‘base’ `行に移動します。 この構成は、phpLDAPadminにLDAP階層のルートが何であるかを伝えます。 これは、 ` slapd `パッケージを再設定するときに入力した値に基づいています。 この例では、 ` example.com `を選択し、各ドメインコンポーネント(ドットではないもの)を ` dc = +`表記に入れることで、これをLDAP構文に変換する必要があります。

/etc/phpldapadmin/config.php

$servers->setValue('server','base', array(''));

ログイン `+ bind_id `設定行を見つけ、行の先頭にある `#+`でコメントアウトします:

/etc/phpldapadmin/config.php

$servers->setValue('login','bind_id','cn=admin,dc=example,dc=com');

このオプションは、Webインターフェースに管理者ログインの詳細を事前入力します。 これは、phpLDAPadminページが一般公開されている場合に共有すべきではない情報です。

最後に調整する必要があるのは、いくつかのphpLDAPadmin警告メッセージの可視性を制御する設定です。 デフォルトでは、アプリケーションはテンプレートファイルに関する非常に多くの警告メッセージを表示します。 これらは、ソフトウェアの現在の使用には影響しません。 `+ hide_template_warning +`パラメーターを検索し、それを含む行のコメントを外し、* true *に設定することで、それらを非表示にできます。

/etc/phpldapadmin/config.php

$config->custom->appearance['hide_template_warning'] = ;

これが最後に調整する必要があるものです。 ファイルを保存して閉じて終了します。 変更を有効にするために何も再起動する必要はありません。

次に、phpLDAPadminにログインします。

ステップ3-phpLDAPadmin Webインターフェースへのログイン

phpLDAPadminに必要な構成変更を行ったので、使用を開始できます。 Webブラウザーでアプリケーションに移動します。 以下の強調表示された領域をドメインに置き換えてください:

https:///phpldapadmin

phpLDAPadminのランディングページがロードされます。 ページの左側のメニューにある[ログイン]リンクをクリックします。 ログインフォームが表示されます。

image:https://assets.digitalocean.com/articles/install-openldap/phpldapadmin-login-screen.png [phpLDAPadminログインページ]

ログインDN *は、使用するユーザー名です。 これには、アカウント名が「+ cn = 」セクションとして含まれ、サーバーに対して選択したドメイン名が前の手順で説明したように「 dc = +」セクションに分割されています。 インストール中に設定したデフォルトの管理者アカウントは admin *と呼ばれるため、この例では次のように入力します。

cn=admin,

ドメインに適切な文字列を入力した後、構成中に作成した管理者パスワードを入力し、[認証]ボタンをクリックします。

メインインターフェイスに移動します。

image:https://assets.digitalocean.com/articles/install-openldap/phpldapadmin-interface.png [phpLDAPadminメインページ]

この時点で、phpLDAPadminインターフェースにログインしています。 ユーザー、組織単位、グループ、および関係を追加できます。

LDAPは、データおよびディレクトリ階層をどのように構成できるかについて柔軟性があります。 どんな種類の構造でも作成でき、相互作用のルールも作成できます。

このプロセスはUbuntu 16.04でも以前のバージョンと同じであるため、https://www.digitalocean.com/community/tutorials/の_Add Organizational Units、Groups、Users_セクションに記載されている手順に従うことができます。基本的なldap-server-on-an-ubuntu-12-04-vps#add-organizational-units-groups-and-usersのインストールと設定の方法[Ubuntu 12.04のLDAPインストール記事]。

これらの手順は、このphpLDAPadminのインストールで適切に機能するため、インターフェイスを操作してデータを構造化する方法を学習するための手順に従ってください。

ログインしてWebインターフェースに慣れたので、LDAPサーバーのセキュリティを強化するために少し時間を取りましょう。

ステップ4 – StartTLS LDAP暗号化の構成

ウェブインターフェースを暗号化しましたが、外部LDAPクライアントはまだサーバーに接続しており、プレーンテキストで情報をやり取りしています。 Let’s Encrypt SSL証明書を使用して、LDAPサーバーに暗号化を追加しましょう。

Let’s Encrypt証明書のコピー

+ slapd +`デーモンはユーザー* openldap として実行され、Let’s Encrypt証明書は root *ユーザーのみが読み取れるため、証明書への `+ slapd +`アクセスを許可するためにいくつかの調整を行う必要があります。 SSL証明書とキーの標準システムディレクトリである `+ / etc / ssl / +`に証明書をコピーする短いスクリプトを作成します。 コマンドを手動で入力するのではなく、これを行うスクリプトを作成する理由は、Let’s Encrypt証明書が更新されるたびにこのプロセスを自動的に繰り返す必要があるためです。 これを有効にするために、 `+ certbot + cronジョブを後で更新します。

まず、シェルスクリプト用の新しいテキストファイルを開きます。

sudo nano /usr/local/bin/renew.sh

これにより、空のテキストファイルが開きます。 次のスクリプトを貼り付けます。 Let’s Encrypt証明書が保存されている場所を反映するために、 `+ SITE = `の部分を必ず更新してください。 ` sudo ls / etc / letsencrypt / live +`で証明書ディレクトリをリストすることで正しい値を見つけることができます。

/usr/local/bin/renew.sh

#!/bin/sh

SITE=

# move to the correct let's encrypt directory
cd /etc/letsencrypt/live/$SITE

# copy the files
cp cert.pem /etc/ssl/certs/$SITE.cert.pem
cp fullchain.pem /etc/ssl/certs/$SITE.fullchain.pem
cp privkey.pem /etc/ssl/private/$SITE.privkey.pem

# adjust permissions of the private key
chown :ssl-cert /etc/ssl/private/$SITE.privkey.pem
chmod 640 /etc/ssl/private/$SITE.privkey.pem

# restart slapd to load new certificates
systemctl restart slapd

このスクリプトは、Let’s Encrypt証明書ディレクトリに移動し、ファイルを「+ / etc / ssl 」にコピーし、システムの* ssl-cert *グループが読み取れるように秘密鍵の権限を更新します。 また、 ` slapd `を再起動します。これにより、このスクリプトが ` certbot +`更新cronジョブから実行されたときに新しい証明書が確実にロードされます。

ファイルを保存して閉じ、実行可能にします。

sudo chmod u+x /usr/local/bin/renew.sh

次に、 `+ sudo +`を使用してスクリプトを実行します。

sudo /usr/local/bin/renew.sh

`+ / etc / ssl +`の新しいファイルをリストして、スクリプトが機能したことを確認します。

sudo su -c 'ls -al /etc/ssl/{certs,private}/*'

上記の「+ sudo 」コマンドは、通常とは少し異なります。 ` su -c ” `部分は、実行する前に ` ls `コマンド全体を* root *シェルでラップします。 これを行わなかった場合、「 * 」ワイルドカードファイル名の展開は非sudoユーザーの権限で実行され、ユーザーが「 / etc / ssl / private +」を読み取れないため失敗します。

`+ ls +`は3つのファイルに関する詳細を出力します。 所有権と許可が正しいことを確認します。

Output-rw-r--r-- 1 root root     1793 May 31 13:58 /etc/ssl/certs/.cert.pem
-rw-r--r-- 1 root root     3440 May 31 13:58 /etc/ssl/certs/.fullchain.pem
-rw-r----- 1 root ssl-cert 1704 May 31 13:58 /etc/ssl/private/.privkey.pem

次に、「+ certbot +」でこれを自動化します。

Certbot Renewal Cronジョブの更新

証明書が更新されるたびにこのスクリプトを実行するには、 + certbot cronジョブを更新する必要があります。

sudo crontab -e

すでに `+ certbot renew +`行があるはずです。 以下の強調表示された部分を追加します。

crontab

15 3 * * * /usr/bin/certbot renew --quiet

crontabを保存して閉じます。 これで、 + certbot`が証明書を更新するたびに、スクリプトを実行してファイルをコピーし、権限を調整し、 + slapd`サーバーを再起動します。

安全な接続を提供するためのslapdの構成

  • openldap ユーザーを ssl-cert *グループに追加して、 `+ slapd +`が秘密鍵を読み取れるようにする必要があります。

sudo usermod -aG ssl-cert openldap

`+ slapd +`を再起動して、新しいグループを取得します。

sudo systemctl restart slapd

最後に、これらの証明書とキーを実際に使用するように「+ slapd 」を設定する必要があります。 これを行うには、すべての設定変更を_LDIF_ファイル(LDAPデータ交換フォーマットを意味します)に入れてから、 ` ldapmodify +`コマンドで変更をLDAPサーバーにロードします。

新しいLDIFファイルを開きます。

cd ~
nano ssl.ldif

これにより、空のファイルが開きます。 以下をファイルに貼り付け、ドメインを反映するようにファイル名を更新します。

ssl.ldif

dn: cn=config
changetype: modify
add: olcTLSCACertificateFile
olcTLSCACertificateFile: /etc/ssl/certs/.fullchain.pem
-
add: olcTLSCertificateFile
olcTLSCertificateFile: /etc/ssl/certs/.cert.pem
-
add: olcTLSCertificateKeyFile
olcTLSCertificateKeyFile: /etc/ssl/private/.privkey.pem

ファイルを保存して閉じ、 `+ ldapmodify +`で変更を適用します。

sudo ldapmodify -H ldapi:// -Y EXTERNAL -f ssl.ldif
OutputSASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "cn=config"

新しい証明書を読み込むために「+ slapd 」を再読み込みする必要はありません。これは、「 ldapmodify 」で設定を更新したときに自動的に発生しました。 確認するために、もう一度 ` ldapwhoami `コマンドを実行します。 今回は、適切なホスト名を使用し、安全な接続を強制するために ` -ZZ +`オプションを追加する必要があります。

ldapwhoami -H ldap:// -x -ZZ

クライアントはホスト名が証明書のホスト名と一致することを確認するため、安全な接続を使用する場合は完全なホスト名が必要です。 これにより、攻撃者が接続を傍受してサーバーになりすます中間者攻撃を防ぎます。

`+ ldapwhoami `コマンドは、エラーなしで ` anonymous +`を返します。 LDAP接続が正常に暗号化されました。

結論

このチュートリアルでは、OpenLDAP `+ slapd `サーバーとLDAP WebインターフェイスphpLDAPadminをインストールして設定しました。 また、両方のサーバーで暗号化を設定し、「 certbot 」を更新して、「 slapd +」のLet’s Encrypt証明書更新プロセスを自動的に処理します。

私たちがセットアップしたシステムは非常に柔軟性があり、ニーズに応じて独自の組織スキーマを設計し、リソースのグループを管理できます。 コマンドラインツールやテクニックなど、LDAPの管理の詳細については、チュートリアルhttps://www.digitalocean.com/community/tutorials/how-to-manage-and-use-ldap-servers-with-openldap-をご覧ください。ユーティリティ[OpenLDAPユーティリティでLDAPサーバーを管理および使用する方法]。 すべてのクライアントに安全な接続を使用させる方法など、LDAPサーバーの保護に関する詳細情報については、https://www.digitalocean.com/community/tutorials/how-to-encrypt-openldap-connections-using-を参照してください。 starttls [STARTTLSを使用してOpenLDAP接続を暗号化する方法]。