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
このセッションでは、ローカルパッケージインデックスを更新してから、必要なパッケージをインストールします。
- sudo apt-get update
- sudo apt-get install slapd ldap-utils
インストール中に、LDAPの管理者パスワードを選択して確認するように求められます。 すぐに更新できるので、ここには何でも入力できます。
パッケージをインストールしたばかりですが、すぐに再構成します。 The slapd
パッケージには多くの重要な構成の質問をする機能がありますが、デフォルトでは、インストールプロセスでスキップされます。 パッケージを再構成するようにシステムに指示することで、すべてのプロンプトにアクセスできます。
- sudo dpkg-reconfigure slapd
このプロセスで答えるべき新しい質問がかなりあります。 ほとんどのデフォルトを受け入れます。 質問を見てみましょう:
- OpenLDAPサーバー構成を省略しますか? いいえ
- DNSドメイン名?
- このオプションは、ディレクトリパスの基本構造を決定します。 メッセージを読んで、これがどのように実装されるかを正確に理解してください。 実際のドメインを所有していない場合でも、実際には任意の値を選択できます。 ただし、このチュートリアルでは、サーバーに適切なドメイン名があることを前提としているため、それを使用する必要があります。 チュートリアル全体でexample.comを使用します。
- 組織名?
- このガイドでは、組織の名前としてexampleを使用します。 適切と思われるものなら何でも選択できます。
- 管理者パスワード? 安全なパスワードを2回入力します
- データベースバックエンド? MDB
- slapdがパージされたときにデータベースを削除しますか? いいえ
- 古いデータベースを移動しますか? はい
- LDAPv2プロトコルを許可しますか? いいえ
この時点で、LDAPサーバーが構成され、実行されています。 外部クライアントが接続できるように、ファイアウォールのLDAPポートを開きます。
- sudo ufw allow ldap
LDAP接続をテストしてみましょう ldapwhoami
、接続しているユーザー名を返す必要があります:
- ldapwhoami -H ldap:// -x
Outputanonymous
anonymous
私たちが走ったので、私たちが期待している結果です ldapwhoami
LDAPサーバーにログインせずに。 これは、サーバーが実行され、クエリに応答していることを意味します。 次に、LDAPデータを管理するためのWebインターフェイスを設定します。
ステップ2—phpLDAPadminWebインターフェイスのインストールと設定
コマンドラインからLDAPを管理することは非常に可能ですが、ほとんどのユーザーはWebインターフェイスを使用する方が簡単です。 この機能を提供するPHPアプリケーションであるphpLDAPadminをインストールします。
UbuntuリポジトリにはphpLDAPadminパッケージが含まれています。 あなたはそれをインストールすることができます apt-get
:
- sudo apt-get install phpldapadmin
これにより、アプリケーションがインストールされ、必要なApache構成が有効になり、Apacheがリロードされます。
これで、Webサーバーがアプリケーションを提供するように構成されましたが、さらにいくつかの変更を加える必要があります。 ドメインを使用し、LDAPログイン情報を自動入力しないようにphpLDAPadminを設定する必要があります。
テキストエディタでroot権限でメイン設定ファイルを開くことから始めます。
- sudo nano /etc/phpldapadmin/config.php
で始まる行を探します $servers->setValue('server','name'
. の nano
次のように入力して文字列を検索できます CTRL-W
、次に文字列、次に ENTER
. カーソルが正しい行に置かれます。
この行は、LDAPサーバーの表示名であり、Webインターフェースがサーバーに関するヘッダーとメッセージに使用します。 ここで適切なものを選択してください。
$servers->setValue('server','name','Example LDAP');
次に、下に移動します $servers->setValue('server','base'
ライン。 この設定は、LDAP階層のルートが何であるかをphpLDAPadminに通知します。 これは、再構成時に入力した値に基づいています。 slapd
パッケージ。 この例では、 example.com
そして、各ドメインコンポーネント(ドットではないものすべて)をに入れて、これをLDAP構文に変換する必要があります。 dc=
表記:
$servers->setValue('server','base', array('dc=example,dc=com'));
ログインを見つけます bind_id
構成行とコメントアウト #
行頭:
#$servers->setValue('login','bind_id','cn=admin,dc=example,dc=com');
このオプションは、Webインターフェースに管理者ログインの詳細を事前入力します。 これは、phpLDAPadminページが一般公開されている場合に共有してはならない情報です。
最後に調整する必要があるのは、いくつかのphpLDAPadmin警告メッセージの表示を制御する設定です。 デフォルトでは、アプリケーションはテンプレートファイルに関するかなりの数の警告メッセージを表示します。 これらは、ソフトウェアの現在の使用に影響を与えません。 検索することでそれらを隠すことができます hide_template_warning
パラメータ、それを含む行のコメントを解除し、trueに設定します。
$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ジョブ。
まず、シェルスクリプトの新しいテキストファイルを開きます。
- sudo nano /usr/local/bin/renew.sh
これにより、空白のテキストファイルが開きます。 次のスクリプトに貼り付けます。 必ず更新してください SITE=example.com
Let’sEncrypt証明書が保存されている場所を反映する部分。 証明書ディレクトリを次のようにリストすることで、正しい値を見つけることができます。 sudo ls /etc/letsencrypt/live
.
#!/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ジョブ。
ファイルを保存して閉じてから、実行可能にします。
- 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}/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ジョブ:
- sudo crontab -e
あなたはすでに持っている必要があります certbot renew
ライン。 以下の強調表示された部分を追加します。
15 3 * * * /usr/bin/certbot renew --quiet --renew-hook /usr/local/bin/renew.sh
crontabを保存して閉じます。 今、いつでも certbot
証明書を更新すると、スクリプトが実行されてファイルがコピーされ、アクセス許可が調整され、再起動されます。 slapd
サーバ。
安全な接続を提供するためのslapdの構成
openldapユーザーをssl-certグループに追加する必要があります。 slapd
秘密鍵を読み取ることができます:
- sudo usermod -aG ssl-cert openldap
再起動 slapd
したがって、新しいグループを取得します。
- sudo systemctl restart slapd
最後に、構成する必要があります slapd
これらの証明書とキーを実際に使用します。 これを行うには、すべての構成変更を LDIF ファイル(LDAPデータ交換形式を表す)に入れてから、変更をLDAPサーバーにロードします。 ldapmodify
指図。
新しいLDIFファイルを開きます。
- cd ~
- nano 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
:
- 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://example.com -x -ZZ
安全な接続を使用する場合は、完全なホスト名が必要です。これは、クライアントがホスト名が証明書のホスト名と一致することを確認するためです。 これにより、攻撃者が接続を傍受してサーバーになりすます可能性のある中間者攻撃を防ぐことができます。
The ldapwhoami
コマンドは戻る必要があります anonymous
、エラーなし。 LDAP接続の暗号化に成功しました。
結論
このチュートリアルでは、OpenLDAPをインストールして設定しました slapd
サーバー、およびLDAPWebインターフェイスphpLDAPadmin。 また、両方のサーバーで暗号化を設定し、更新しました certbot
自動的に処理する slapd
のLet’sEncrypt証明書の更新プロセス。
私たちが設定したシステムは非常に柔軟性があり、必要に応じて独自の組織スキーマを設計し、リソースのグループを管理することができます。 その他のコマンドラインツールやテクニックなど、LDAPの管理の詳細については、チュートリアルOpenLDAPユーティリティでLDAPサーバーを管理および使用する方法をお読みください。 すべてのクライアントに安全な接続を使用させる方法など、LDAPサーバーの保護に関する詳細については、STARTTLSを使用してOpenLDAP接続を暗号化する方法を参照してください。