LDAP認証 · 1 min read · Dec 13, 2025
LinuxにおけるLDAP認証

このハウツーでは、ユーザーをLDAPに保存し、いくつかのサービスをそれに対して認証する方法を示します。特定のパッケージのインストール方法は示しません。なぜなら、それはディストリビューションやシステムに依存するからです。LDAP認証/ユーザーの保存に必要なすべてのコンポーネントの「純粋な」設定に焦点を当てます。このハウツーは、通常のpasswd/shadow認証から移行していることを前提としていますが、ゼロから始める人にも適しています。
要件
- OpenLDAP
- pam_ldap
- nss_ldap
- PADL migrationtools
はじめに
私たちが達成したいことは、ユーザーをLDAPに保存し、LDAP(直接またはpam)に対して認証し、人間が理解できる方法でそれを管理するツールを持つことです。
この方法で、LDAPサポートを持つすべてのソフトウェアを使用することができ、PAM LDAPモジュールにフォールバックすることができます。これはPAM->LDAPゲートウェイとして機能します。
LDAPのアイデアに関する詳細はWikipediaで確認できます: LDAP wikipedia
OpenLDAPの設定
OpenLDAPは、slapdとslurpdデーモンで構成されています。このハウツーでは、レプリケーションなしの1つのLDAPサーバーをカバーするので、slapdのみに焦点を当てます。また、OpenLDAPのインストールが完了し、初期化されていることを前提とします(システム/ディストリビューションに依存します)。それでは、設定部分に進みましょう。
私のシステム(Gentoo)では、OpenLDAPの設定は/etc/openldapに保存されており、/etc/openldap/slapd.confファイルに興味があります。しかし、最初にLDAP管理者のパスワードを生成し、設定ファイルに入れる必要があります:
slappasswd -h {md5}設定は次のようになります:
include /etc/openldap/schema/core.schema
include /etc/openldap/schema/cosine.schema
include /etc/openldap/schema/inetorgperson.schema
include /etc/openldap/schema/nis.schema
allow bind_v2
pidfile /var/run/openldap/slapd.pid
argsfile /var/run/openldap/slapd.args
modulepath /usr/lib/openldap/openldap
access to attrs=userPassword
by dn="uid=root,ou=People,dc=domain,dc=com" write
by dn="cn=Manager,dc=domain,dc=com" write
by anonymous auth
by self write
by * none
access to dn.base="" by * read
access to *
by dn="cn=Manager,dc=domain,dc=com" write
by * read
database bdb
suffix "dc=domain,dc=com"
rootdn "cn=Manager,dc=domain,dc=com"
rootpw {MD5}Tk1sMytv5ipjr+Vhcf03JQ==
directory /var/lib/openldap-data
index objectClass eq
suffixやパスを自分のニーズに合わせて変更することを忘れないでください。
これらは、ユーザーがパスワードを変更するために必要な基本的なACLを含む基本的なオプションです。より多くの機能が必要な場合は、OpenLDAPのマニュアルを読んでください。これでslapdの適切な設定ができたので、デーモンを起動できます:
service slapd startslapdに渡される引数を担当する設定ファイルに次のようなものがあることを確認してください(パスはslapd.sockを指す必要があります):
OPTS="-h 'ldaps:// ldapi://%2fvar%2frun%2fopenldap%2fslapd.sock'"これで、openldapが正常に実行されているかどうかをテストできます。まだディレクトリにデータはありませんが、cn=Manager,dc=domain,dc=comとしてバインドを試みることができます。パスワードを求められたら、生成したもの(もちろん平文のバージョン)を使用してください:
ldapsearch -D "cn=Manager,dc=domain,dc=com" -Wディレクトリへのデータの移行/追加
LDAPサーバーが稼働しているので、データを埋める必要があります。エントリを作成または移行します。通常の/etc/passwd、/etc/shadow、/etc/groupsから既存のエントリを移行する方法を示します。
最初のステップは、migrationtoolsを自分のニーズに合わせて設定することです。Gentooの設定ファイルは/usr/share/migrationtools/migrate_common.phにあります。
一般的に、次の2つを変更する必要があります:
$DEFAULT_BASE = "dc=domain,dc=com";
$EXTENDED_SCHEMA = 1;これでデータを移行する準備が整いました(実際にはexportコマンドなしでも動作します):
export ETC_SHADOW=/etc/shadow
./migrate_base.pl > /tmp/base.ldif
./migrate_group.pl /etc/group /tmp/group.ldif
./migrate_hosts.pl /etc/hosts /tmp/hosts.ldif
./migrate_passwd.pl /etc/passwd /tmp/passwd.ldifこれで、LDAPサーバーが理解できる形式のデータが得られました。構文に慣れるために、テキストエディタでファイルの1つを開いてください。その後、ldifからデータを追加できます。
ldapadd -D "cn=Manager,dc=domain,dc=com" -W -f /tmp/base.ldifldapadd -D "cn=Manager,dc=domain,dc=com" -W -f /tmp/group.ldifldapadd -D "cn=Manager,dc=domain,dc=com" -W -f /tmp/passwd.ldifldapadd -D "cn=Manager,dc=domain,dc=com" -W -f /tmp/hosts.ldifいくつかのデータを検索してみることができます:
ldapsearch uid=foouserクライアント設定
クライアントとは、LDAPサーバーに接続してユーザーを取得し、認証するマシンを指します。また、LDAPサーバーが実行されているマシンでもあります。どちらの場合でも、3つのファイルを編集する必要があります: /etc/ldap.conf、/etc/nsswitch.conf、/etc/pam.d/system-auth
ldap.conf、LDAPのクライアントから始めましょう:
BASE dc=domain, dc=com
scope sub
suffix "dc=domain,dc=com"
## rootがユーザーのパスワードを変更したい場合
rootbinddn cn=Manager,dc=domain,dc=com
## LDAPがダウンした場合に必要
timelimit 5
bind_timelimit 5
uri ldap://ldap.domain.com/
pam_password exop
ldap_version 3
pam_filter objectclass=posixAccount
pam_login_attribute uid
pam_member_attribute memberuid
nss_base_passwd ou=Computers,dc=cognifide,dc=pl
nss_base_passwd ou=People,dc=cognifide,dc=pl
nss_base_shadow ou=People,dc=cognifide,dc=pl
nss_base_group ou=Group,dc=cognifide,dc=pl
nss_base_hosts ou=Hosts,dc=cognifide,dc=pl次はnsswitch.confとpamです。
nsswitch.confに次のように追加します:
passwd: files ldap
shadow: files ldap
group: files ldapそして、system-auth(またはlogin、sshdなど)を次のように変更します:
auth required pam_env.so
auth sufficient pam_unix.so likeauth nullok
auth sufficient pam_ldap.so use_first_pass
auth required pam_deny.so
account sufficient pam_unix.so
account sufficient pam_ldap.so
account required pam_ldap.so
password required pam_cracklib.so difok=2 minlen=8 dcredit=2 ocredit=2 retry=3
password sufficient pam_unix.so nullok md5 shadow use_authtok
password sufficient pam_ldap.so use_first_pass
password required pam_deny.so
session required pam_limits.so
session required pam_unix.so
session optional pam_ldap.soテストする時間です。最適なツールは古き良きgetentです。システムからユーザーを選択し、次のコマンドを実行します:
getent passwd | grep foouser結果が2回表示されるはずです。そうであれば、nss_ldapは正常に機能しています。pam部分は、/etc/passwdからユーザーを削除し、sshを通じてログインを試みることでテストできます。
Apache mod_auth_ldap
ApacheでLDAP認証を行うには、mod_auth_ldapモジュールをロードする必要があります。
LoadModule mm_auth_ldap_module modules/mod_auth_ldap.so次に、.htaccessを次のように作成します:
AuthName "Restricted"
AuthType Basic
AuthLDAPURL ldap://ldap.domain.com:389/ou=People,dc=domain,dc=com?uid
AuthLDAPBindDN "cn=Manager,dc=domain,dc=com"
AuthLDAPBindPassword "your_secret_secret_password_to_ldap_admin"
require valid-userこの方法は、WebDAVサブバージョンの認証にも使用できます。
LDAP管理ツール
OpenLDAPサーバーを管理するために推奨するツールはいくつかあります。
- phpldapadmin - ウェブベースのツール
- ldapvi - vimブラウジング
- PADL migrationtools - 移行ツール
- IDEALX sambaldapツール - samba LDAPツール
その他のLDAP対応アプリケーション
- Postfix
- Courier IMAP
- jabberd
- eGroupware
まとめ
何か追加することがあれば、ぜひしてください。設定が完璧でないことは承知しています。
新しい投稿を受信箱で受け取る
スパムはありません。いつでも購読を解除できます。