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 start

slapdに渡される引数を担当する設定ファイルに次のようなものがあることを確認してください(パスは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.ldif
ldapadd -D "cn=Manager,dc=domain,dc=com" -W -f /tmp/group.ldif
ldapadd -D "cn=Manager,dc=domain,dc=com" -W -f /tmp/passwd.ldif
ldapadd -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

まとめ

何か追加することがあれば、ぜひしてください。設定が完璧でないことは承知しています。

Share: X/Twitter LinkedIn

新しい投稿を受信箱で受け取る

スパムはありません。いつでも購読を解除できます。