開発者ドキュメント

Ubuntu16.04にOpenLDAPとphpLDAPadminをインストールして設定する方法

序章

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

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

前提条件

このチュートリアルを開始する前に、ApacheとPHPを使用してUbuntu16.04サーバーをセットアップする必要があります。 チュートリアルLinux、Apache、MySQL、PHP(LAMP)スタックをUbuntu 16.04 にインストールする方法は、MySQLデータベースサーバーが必要ないため、手順2をスキップして実行できます。

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

注: Let’s Encryptチュートリアルでは、サーバーがパブリックインターネットにアクセスできることを前提としています。 そうでない場合は、別の証明書プロバイダーを使用するか、組織独自の認証局を使用する必要があります。 いずれにせよ、主に証明書のパスまたはファイル名に関して、最小限の変更でチュートリアルを完了することができるはずです。

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

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

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

  1. sudo apt-get update
  2. sudo apt-get install slapd ldap-utils

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

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

  1. sudo dpkg-reconfigure slapd

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

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

  1. sudo ufw allow ldap

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

  1. ldapwhoami -H ldap:// -x
Output
anonymous

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

ステップ2—phpLDAPadminWebインターフェイスのインストールと設定

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

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

  1. sudo apt-get install phpldapadmin

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

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

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

  1. sudo nano /etc/phpldapadmin/config.php

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

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

/etc/phpldapadmin/config.php
$servers->setValue('server','name','Example LDAP');

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

/etc/phpldapadmin/config.php
$servers->setValue('server','base', array('dc=example,dc=com'));

次に、ログイン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'] = true;

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

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

ステップ3—phpLDAPadminWebインターフェイスにログインする

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

https://example.com/phpldapadmin

phpLDAPadminランディングページが読み込まれます。 ページ左側のメニューのログインリンクをクリックします。 ログインフォームが表示されます:

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

cn=admin,dc=example,dc=com

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

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

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

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

このプロセスはUbuntu16.04でも以前のバージョンと同じであるため、Ubuntuの LDAPインストール記事の組織単位、グループ、およびユーザーの追加セクションに記載されている手順に従うことができます。 12.04

これらの手順は、phpLDAPadminのこのインストールでうまく機能するので、インターフェースを操作してデータを構造化する方法を学ぶための練習を続けてください。

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

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

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

Let’sEncrypt証明書をコピーする

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

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

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

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

/usr/local/bin/renew.sh
#!/bin/sh

SITE=example.com

# 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ジョブから実行されたときに、新しい証明書が確実に読み込まれます。

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

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

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

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

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

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

上記の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/example.com.cert.pem -rw-r--r-- 1 root root 3440 May 31 13:58 /etc/ssl/certs/example.com.fullchain.pem -rw-r----- 1 root ssl-cert 1704 May 31 13:58 /etc/ssl/private/example.com.privkey.pem

次に、certbotを使用してこれを自動化します。

CertbotRenewalCronジョブの更新

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

  1. sudo crontab -e

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

crontab
15 3 * * * /usr/bin/certbot renew --quiet --renew-hook /usr/local/bin/renew.sh

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

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

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

  1. sudo usermod -aG ssl-cert openldap

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

  1. sudo systemctl restart slapd

最後に、これらの証明書とキーを実際に使用するようにslapdを構成する必要があります。 これを行うには、すべての構成変更を LDIF ファイル(LDAPデータ交換形式を表す)に入れ、ldapmodifyコマンドを使用して変更をLDAPサーバーにロードします。

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

  1. cd ~
  2. nano ssl.ldif

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

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

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

  1. sudo ldapmodify -H ldapi:// -Y EXTERNAL -f ssl.ldif
Output
SASL/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オプションを追加して、安全な接続を強制する必要があります。

  1. ldapwhoami -H ldap://example.com -x -ZZ

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

ldapwhoamiコマンドは、エラーなしでanonymousを返すはずです。 LDAP接続の暗号化に成功しました。

結論

このチュートリアルでは、OpenLDAPslapdサーバーとLDAPWebインターフェイスphpLDAPadminをインストールして構成しました。 また、両方のサーバーで暗号化を設定し、slapdのLet’sEncrypt証明書の更新プロセスを自動的に処理するようにcertbotを更新しました。

私たちが設定したシステムは非常に柔軟であり、独自の組織スキーマを設計し、ニーズに応じてリソースのグループを管理することができます。 その他のコマンドラインツールやテクニックなど、LDAPの管理の詳細については、チュートリアルOpenLDAPユーティリティでLDAPサーバーを管理および使用する方法をお読みください。 すべてのクライアントに安全な接続を使用させる方法など、LDAPサーバーの保護に関する詳細については、STARTTLSを使用してOpenLDAP接続を暗号化する方法を参照してください。

モバイルバージョンを終了