課題:ローカルユーザー管理が「悪夢」に変わる時
私が駆け出しの頃、会社には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を選ぶ理由
以前は、管理者の間でnslcdやpam_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_uriとldap_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のような新しいバージョンでも、この認証モデルは業界のゴールドスタンダードであり続けています。

