Ubuntu 22.04でのOpenLDAPインストールガイド:1,000人のユーザーを一元管理する

Ubuntu tutorial - IT technology blog
Ubuntu tutorial - IT technology blog

システムが「肥大化」し始めた時の悪夢

5台のサーバーを管理していると想像してみてください。各マシンにSSHでログインしてadduserを叩くのは、まだ我慢できるかもしれません。しかし、その数が50台、100台と増え、数百台のUbuntuサーバーを集中管理するフェーズに入ると話は別です。新入社員が入ったり、誰かが退職したりするたびに、アカウント削除のコマンドをコピー&ペーストするだけで午前中が終わってしまいます。

最悪なのは、深夜2時に目をこすりながら画面を凝視し、上司のユーザーを誤って削除してしまわないか震える手で本番環境のコマンドを打つような状況です。それこそが、Centralized Identity Management(ID一元管理)が必要な瞬間です。

OpenLDAPはまさに救世主です。ユーザー情報を各サーバーの/etc/passwdにローカル保存する代わりに、すべてを中央のリポジトリに集約します。サーバーが認証を必要とするときは、OpenLDAPに「このユーザーはアクセス権があるか? パスワードは正しいか?」と問い合わせるだけで済みます。すべてが一瞬で完了し、同期され、SSSDでUbuntu ServerをWindows ADに参加させるのと同様に、非常にプロフェッショナルな運用が可能になります。

LDAPとは一体何なのか?

LDAP (Lightweight Directory Access Protocol) は、MySQLやPostgreSQLのようなリレーショナルデータベースではありません。巨大な電話帳のようなものだと考えてください。データの頻繁な書き込みよりも、読み取りと検索に特化して最適化されています。

始める前に、3つの核心的な概念を覚えておきましょう:

  • DIT (Directory Information Tree): ツリー状のデータ構造。
  • DN (Distinguished Name): オブジェクトの一意なID。例:cn=admin,dc=itfromzero,dc=com
  • ObjectClasses: ユーザーがどのような属性(メールアドレス、シェル、パスワードなど)を持つかを定義するルールセット。

ステップ1:OpenLDAPと管理ツールのインストール

LDAPはドメイン名に非常に敏感です。まず最初に、サーバーに標準的なホスト名を設定する必要があります。

sudo hostnamectl set-hostname ldap.itfromzero.com

次に、slapd(LDAPサーバーデーモン)とldap-utilsをインストールします。このutilsパッケージは、後でクエリコマンドを実行するために非常に重要です。

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

インストール中にLDAPの管理者パスワードの入力を求められます。123456のような簡単なパスワードは避け、複雑な文字列を生成してVaultなどに保管してください。これはシステム全体への万能鍵となります。

ステップ2:slapdの再設定

デフォルトでは、Ubuntuはホスト名に基づいて自動設定を行いますが、必ずしも意図通りとは限りません。私は常に以下のコマンドを実行して、すべてのパラメータを制御するようにしています。

sudo dpkg-reconfigure slapd

以下の重要な選択肢に注意してください:

  • Omit OpenLDAP server configuration? Noを選択します。
  • DNS domain name: 自身のドメインを入力します(例:itfromzero.com)。
  • Organization name: 会社名やプロジェクト名。
  • Database backend: MDBを選択します。これはBDBやHDBなどの古いものよりも高速で信頼性の高い、現代的なバックエンドです。
  • Allow LDAPv2 protocol? セキュリティ確保のため、Noを選択します。

ステップ3:ディレクトリ構造(Organizational Units)の構築

/etc/ldap内の設定ファイルを直接編集してはいけません。プロのやり方は、Ubuntu ServerでCloud-initを使うときのように、.ldifファイルを作成し、ldapaddコマンドで読み込ませることです。

通常、People(ユーザー用)とGroups(グループ用)の2つの主要なブランチに分けます。base.ldifファイルを作成しましょう。

dn: ou=People,dc=itfromzero,dc=com
objectClass: organizationalUnit
ou: People

dn: ou=Groups,dc=itfromzero,dc=com
objectClass: organizationalUnit
ou: Groups

この構造をデータベースに反映させます:

ldapadd -x -D cn=admin,dc=itfromzero,dc=com -W -f base.ldif

画面にadding new entry...と表示されれば、正しく進んでいます。

ステップ4:テスト用の最初のユーザー作成

ユーザーがLinuxサーバーにSSHでログインできるようにするには、posixAccount属性が必要です。users.ldifファイルにdevopsというグループと、tungdtというユーザーを作成します。

# グループの作成
dn: cn=devops,ou=Groups,dc=itfromzero,dc=com
objectClass: posixGroup
cn: devops
gidNumber: 5000

# ユーザーの作成
dn: uid=tungdt,ou=People,dc=itfromzero,dc=com
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
uid: tungdt
sn: Doan
givenName: Tung
cn: Tung Doan
uidNumber: 10001
gidNumber: 5000
userPassword: {SSHA}password_da_hash
loginShell: /bin/bash
homeDirectory: /home/tungdt

ヒント: パスワードは生テキストではなく、slappasswdコマンドを使用してハッシュ化された文字列を作成してください。また、uidNumberはローカルのシステムユーザーとの重複を避けるため、10000から始めるのが一般的です。

ユーザーファイルをシステムに読み込みます:

ldapadd -x -D cn=admin,dc=itfromzero,dc=com -W -f users.ldif

ステップ5:結果の確認

ユーザーがLDAPに正しく登録されたか確認するために、検索コマンドを使用します。これはトラブルシューティングの際にも最も早いデバッグ方法です。

ldapsearch -x -b "dc=itfromzero,dc=com" "(uid=tungdt)"

構築時の注意点(経験則)

実際、LDAPのエラーの90%は非常に些細な部分に起因します:

  1. 致命的なスペース: LDIFファイルでは、コロン(:)の後に必ず半角スペースが必要です。行末に余計なスペースがあるだけでも、コマンドが失敗することがあります。
  2. スキーマエラー: サポートされていないobjectClassにmobile属性などを追加しようとすると、すぐにエラーになります。インポート前にスキーマをよく確認してください。
  3. ファイアウォール: クライアントが接続できない場合は、ポート389(LDAP)と636(LDAPS)を確認してください。Ubuntu Serverの自動ハードニングにおいても、適切なポート管理は基本となります。
sudo ufw allow 389/tcp

おわりに

OpenLDAPのインストール完了は、あくまで土台ができたに過ぎません。システムを実際に稼働させるには、各クライアント(UbuntuやCentOS)がログイン時にLDAPを参照するように設定する必要があります。たった一度のldapaddコマンドで数十台のサーバーのユーザーが同期される様子を見るのは、それまでの苦労に見合う価値があります。次回の記事では、LDIFを毎回手で打つ代わりに、より直感的にユーザーを管理できるWebインターフェースの導入方法を解説します。

Share: