CentOSでのLDAP設定:数百台のサーバーをスマートに一元管理する方法

CentOS tutorial - IT technology blog
CentOS tutorial - IT technology blog

課題:ローカルユーザー管理が「悪夢」に変わる時

私が駆け出しの頃、会社にはCentOS 7が5台ほどしかありませんでした。新入社員が入るたびに、各サーバーにSSHでログインしてuseraddを実行し、パスワードを設定していました。台数が少ないうちは問題ありませんでしたが、30台、50台と増えるにつれ、退職者のアクセス権限を削除する作業はまさに「惨事」となりました。どのサーバーにユーザーを作成したかすべて把握するのは不可能です。たった1台でもアカウントの消し忘れがあれば、それは致命的なセキュリティホールになります。

実際、50台のサーバーで1人の新規ユーザーを手動で管理すると10〜15分かかりますが、LDAPならわずか10秒です。/etc/passwdにローカル保存する代わりに、サーバーが「電話交換手」のようなDirectory Serverに「このユーザーはログイン可能か?」と問い合わせる仕組みになります。

Quick Start:5分で完了するLDAPクライアント設定

すでにLDAPサーバー(OpenLDAPやActive Directoryなど)がある場合は、SSSD (System Security Services Daemon)を使用しましょう。これは、従来の方法よりもモダンで安定しており、セキュリティも強固です。CentOSを即座に接続するための手順を以下にまとめます。

# 1. 必要なパッケージのインストール
sudo yum install -y sssd sssd-ldap oddjob-mkhomedir openldap-clients

# 2. 認証の設定(CentOS 7はauthconfig、CentOS 8/9はauthselectを使用)
# CentOS 7での例:
sudo authconfig --enablesssd --enablesssdauth --enablemkhomedir --update

# 3. 権限設定と起動
sudo chmod 600 /etc/sssd/sssd.conf
sudo systemctl restart sssd
sudo systemctl enable sssd

プロがSSSDを選ぶ理由

以前は、管理者の間でnslcdpam_ldapがよく使われていました。しかし、私の経験から言えるのは、何が何でもSSSDを使うべきだということです。SSSDが標準となっている主な理由は3つあります:

  • オフラインキャッシュ (Offline Caching): LDAPサーバーが一時的にダウンしても、キャッシュされたデータによりユーザーはログイン可能です。
  • 負荷軽減: ls -lなどのコマンドを実行するたびにLDAPサーバーへ頻繁にリクエストを送るのを防ぎます。
  • マルチタスク: OpenLDAPとWindowsのActive Directoryの両方に、同時にスムーズに接続できます。

ステップ1:パッケージのインストール

通信用のsssd-ldapと、ホームディレクトリ(/home/usernameなど)を自動作成するためのoddjob-mkhomedirが必要です。これがないと、LDAPユーザーがログインした際に個人の作業環境が用意されません。

sudo yum install sssd sssd-ldap oddjob-mkhomedir -y

ステップ2:sssd.confファイルの設定

ここがすべての動作の要となります。通常、このファイルはデフォルトでは存在しないため、/etc/sssd/sssd.confに新規作成する必要があります。ldap_urildap_search_baseの値は、自身のインフラ環境に合わせて変更してください。

[sssd]
services = nss, pam
config_file_version = 2
domains = default

[domain/default]
id_provider = ldap
auth_provider = ldap
ldap_uri = ldap://ldap.itfromzero.com
ldap_search_base = dc=itfromzero,dc=com
ldap_id_use_start_tls = True
ldap_tls_cacertdir = /etc/openldap/cacerts
cache_credentials = True
ldap_tls_reqcert = allow
ldap_schema = rfc2307bis

ここで注意点があります: SSSDはセキュリティに対して非常に厳格です。設定ファイルの権限設定が緩すぎると、起動を拒否します。必ず次のコマンドを実行してください:chmod 600 /etc/sssd/sssd.conf

ステップ3:ホームディレクトリの自動作成を有効化

ログインした瞬間にエラーで追い出されたり、ルートディレクトリ/に飛ばされたりしないようにしましょう。以下のコマンドにより、初回ログイン時にシステムが自動的に/home/userを作成するように設定します。

# CentOS 7の場合:
sudo authconfig --enablemkhomedir --update

# CentOS 8/9 (AlmaLinux, Rocky Linux)の場合:
sudo authselect select sssd with-mkhomedir --force
sudo systemctl enable --now oddjobd.service

応用:通信の暗号化とアクセス制限

通常の389番ポート経由でパスワードを送信するのは、平文(クリアテキスト)を送信しているのと同じです。本番環境(Production)では、データを暗号化するためにTLS(LDAPS – 636番ポート)を有効にすることを強く推奨します。これにより、内部ネットワーク内でのスニッフィング攻撃を防ぐことができます。

DevOpsチームだけに本番サーバーへのSSHを許可したい場合は、sssd.confにフィルタを追加します:

access_provider = ldap
ldap_access_filter = (memberOf=cn=sysadmins,ou=groups,dc=itfromzero,dc=com)

この設定行は非常に強力です。同じLDAPアカウントを使用しながら、「開発者はステージング環境のみ、システム管理者は本番環境もアクセス可能」といった権限の切り分けが容易になります。

実践的なトラブルシューティングのコツ

大規模なシステム運用の中で培った、3つの迅速な解決策を紹介します:

1. 基本的な接続確認

SSSDの設定を疑う前に、ldapsearchを使用してサーバーがLDAPを「認識」できているか確認しましょう。このコマンドが失敗する場合は、設定ファイルを直す前にファイアウォールやネットワークを先に確認してください。

ldapsearch -x -H ldap://ldap.itfromzero.com -b "dc=itfromzero,dc=com"

2. 情報が反映されない時のキャッシュ削除

LDAPでユーザーを追加した直後なのに、id usernameコマンドで見つからないと表示されることがあります。これはSSSDが古いキャッシュを保持しているためです。以下のコマンドでクリーンアップしましょう:

sudo sss_cache -E
sudo systemctl restart sssd

3. ログを読んで原因を特定する

SSSDの調子が悪い時は、推測に頼らず/var/log/sssd/にあるログを確認してください。設定ファイルでdebug_level = 5に設定すると、クライアントとサーバー間のやり取りの詳細を確認できます。

結論

LDAPの統合は単なる技術的な設定ではなく、プロフェッショナルな管理の考え方そのものです。システムが拡大するにつれ、一元管理は「幽霊アカウント」の消し忘れを心配することなく、夜にぐっすり眠るための唯一の方法となります。CentOS 7でも、Rocky Linuxのような新しいバージョンでも、この認証モデルは業界のゴールドスタンダードであり続けています。

Share: