開発者ドキュメント

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の管理者パスワードを選択して確認するように求められます。 すぐに更新できるので、ここには何でも入力できます。

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

  1. sudo dpkg-reconfigure slapd

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

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

  1. sudo ufw allow ldap

LDAP接続をテストしてみましょう ldapwhoami、接続しているユーザー名を返す必要があります:

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

anonymous 私たちが走ったので、私たちが期待している結果です ldapwhoami LDAPサーバーにログインせずに。 これは、サーバーが実行され、クエリに応答していることを意味します。 次に、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 そして、各ドメインコンポーネント(ドットではないものすべて)をに入れて、これをLDAP構文に変換する必要があります。 dc= 表記:

/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 証明書へのアクセス。 証明書をにコピーする短いスクリプトを作成します /etc/ssl/、SSL証明書とキーの標準システムディレクトリ。 コマンドを手動で入力するのではなく、これを行うためのスクリプトを作成する理由は、Let’sEncrypt証明書が更新されるたびにこのプロセスを自動的に繰り返す必要があるためです。 更新します certbot これを有効にするために後でcronジョブ。

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

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

これにより、空白のテキストファイルが開きます。 次のスクリプトに貼り付けます。 必ず更新してください SITE=example.com Let’sEncrypt証明書が保存されている場所を反映する部分。 証明書ディレクトリを次のようにリストすることで、正しい値を見つけることができます。 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’sEncrypt証明書ディレクトリに移動し、ファイルをにコピーします /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*'

The sudo 上記のコマンドは通常とは少し異なります。 The 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ジョブの更新

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

  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データ交換形式を表す)に入れてから、変更をLDAPサーバーにロードします。 ldapmodify 指図。

新しい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

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

The ldapwhoami コマンドは戻る必要があります anonymous、エラーなし。 LDAP接続の暗号化に成功しました。

結論

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

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

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