ライン

ポイント:*

ライン

 はじめに

FreeBSD 9.2-RELEASE

 今回も実サーバに入れているわけではなくて、VMware Player上にインストールした環境に入れます。

 ここでは割愛しますが、pkg install perl5 portupgrade portauditなどを入れ、portsnap fetch extractも完了後の環境です。

 まずは、最初にパッケージの導入とPHPLDAPadminを入れて登録を行うところから開始する想定です。
構成は、特にシングルの構成でスレーブ動作を考える予定はありません。

 導入と設定

導入

 導入を開始します。

# pkg info
# pkg install openldap-server

 /usr/local/etc/openldap 以下ファイルが準備されています。

DB_CONFIG.example
ldap.conf
ldap.conf.default
schema/
slapd.conf
slapd.conf.default
slapd.ldif
slapd.ldif.default

/etc/rc.confに設定を加えます。

slapd_enable="YES"
slapd_flags='-h "ldapi://%2fvar%2frun%2fopenldap%2fldapi/ ldap://0.0.0.0/"'
slapd_sockets="/var/run/openldap/ldapi"

service slapd startでとりあえず起動。

 Apche24などをつっこんでおきます。
終わったら、phpldapadminを追加で入れます。

# pkg install apache24 php5 php5-ldap
# pkg install phpldapadmin

 以下をhttpd.confに入れるようにメッセージが出て完了。
Apache連動でPHP5を使いたいので、php5はportsでmake reinstallで入れ直しました。
httpd.confには2行追加しました。(細かな設定は他のページにあります)

AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps

/etc/rc.confに以下を追加。

apache24_enable="YES"
apache24_http_accept_enable="YES"

導入はこんな感じ。

設定

 PHP LDAP Adminは、/usr/local/www/phpldapadmin以下に導入がされていますので、引き続き設定を行っていきます。
config/config.phpにIPアドレスの許可を入れました。

 次に、apacheの設定にphpldapadminのディレクトリ等の許可を入れます。
今回はこんな感じにしてみました。

# 2013-11-30
    Alias /phpldapadmin /usr/local/www/phpldapadmin/htdocs
    Alias /ldapadmin /usr/local/www/phpldapadmin/htdocs
..
<Directory "/usr/local/www/phpldapadmin/htdocs">
        Options All
        AllowOverride None
        Require ip 127.0.0.1 192.168.1.0/255.255.255.0 192.168.0.0/24
        Require all denied
        DirectoryIndex index.php index.html
</Directory>

サービスを再起動し画面を表示させてみます。
http://~/phpldapadmin/

ちゃんと表示を確認することができました。
slapd.confには

suffix          "dc=fkimura,dc=com"
rootdn          "cn=Manager,dc=fkimura,dc=com"
rootpw          {SSHA}eHiznw~Z2T

のように追加。ルートのパスワードは

# slappasswd -s (パスワード)

で生成し、上記にペーストしています。
ldap.confには、

BASE    dc=fkimura,dc=com
URI     ldap://ldap.fkimura.com

を記述。初期データを生成するために、initdata.ldifを作成。例は以下。

dn: dc=fkimura,dc=com
objectClass: top
objectClass: dcObject
objectClass: organization
o: ldap

これを喰わせてしまいましょう。

# ldapadd -x -h 127.0.0.1 -D "cn=Manager,dc=fkimura,dc=com" -w (PASSWORD) -f initdata.ldif

さて、これでログインできるはずです。

ログインすることができました。
何ができるようになったかというと、ウェブでインポートとエクスポート(表示や手入力も可能)です。

 さて、この後はやっとLDAPを利用することにします。

 個人的には、ユーザが自らのパスワードをどうやって変更したりできるかが興味があります。
 例で考えれば、FTPサーバの認証やメールの送受信パスワードなどを考えています。
SquirrelMailを使えば、「change_ldappass」等のプラグインにより変更もできそうですから、便利ですし。

LDAPを利用する

 …ということで、LDAPを使う話にやっと進みます。
どれだけ本や雑誌記事を読んでも理解に届かないので、この手は真似して入れてみるのに限るのです。

 まずはOSアカウントをLDAP管理することを考えます。
細かいこと抜きで、つっこみます。

# pkg install nss_ldap pam_ldap
..
The following 2 packages will be installed:

        Installing nss_ldap: 1.265_7
        Installing pam_ldap: 1.8.6_2

The installation will require 185 kB more space

76 kB to be downloaded

Proceed with installing packages [y/N]:y
Checking integrity... done
[1/2] Installing nss_ldap-1.265_7... done
[2/2] Installing pam_ldap-1.8.6_2... done
=====================================================================
The nss_ldap module expects to find its configuration files at the
following paths:

LDAP configuration:     /usr/local/etc/nss_ldap.conf
LDAP secret (optional): /usr/local/etc/nss_ldap.secret


WARNING: For users of previous versions of this port:
WARNING:
WARNING: Previous versions of this port expected configuration files
WARNING: to be located at /etc/ldap.conf and /etc/ldap.secret.  You
WARNING: may need to move these configuration files to their new
WARNING: location specified above.
=====================================================================
================================================================================
Copy /usr/local/etc/ldap.conf.dist to /usr/local/etc/ldap.conf, then edit
/usr/local/etc/ldap.conf in order to use this module.  Add a line similar to
the following to /etc/pam.conf on 4.X, or create an /etc/pam.d/ldap on 5.X
and higher with a line similar to the following:

login   auth    sufficient      /usr/local/lib/pam_ldap.so
================================================================================

では、/etc/nsswitch.confから編集します。原型は以下でした。

#
# nsswitch.conf(5) - name service switch configuration file
# $FreeBSD: release/9.2.0/etc/nsswitch.conf 224765 2011-08-10 20:52:02Z dougb $
#
group: compat
group_compat: nis
hosts: files dns
networks: files
passwd: compat
passwd_compat: nis
shells: files
services: compat
services_compat: nis
protocols: files
rpc: files

以下のように2行に「ldap」の記述を加えました。

group_compat: nis ldap
passwd_compat: nis ldap

/usr/local/etc/openldap/slapd.confは、

include         /usr/local/etc/openldap/schema/cosine.schema
include         /usr/local/etc/openldap/schema/inetorgperson.schema
include         /usr/local/etc/openldap/schema/nis.schema

を追加しました。

引き続き、/etc/groupと/etc/passwdに設定を加えます。
/etc/groupはvi /etc/groupで

nogroup:*:65533:
nobody:*:65534:
+:*::

のように1行を加えます。

/etc/passwdはvipwにより同様に加えていきます。

nobody:*:65534:65534::0:0:Unprivileged user:/nonexistent:/usr/sbin/nologin
ldap:*:389:389::0:0:OpenLDAP Server:/nonexistent:/usr/sbin/nologin
+:*::::::::

こんな感じで1行です。viの使い方が慣れない人も、適当に頑張って入れてください。
LDAP用のファイルが、/usr/local/etc以下に2つ作成されています。

# cd /usr/local/etc
# grep -v "^#" ldap.conf.dist | grep -v '^$'
host 127.0.0.1
base dc=padl,dc=com

もう1つ側も確認します。

# grep -v "^#" nss_ldap.conf | grep -v '^$'
host 127.0.0.1
base dc=padl,dc=com

コメント行以外は同じものだった、ということですね。
どうでも良かったんですが、以下のようにしました。

# ln -s openldap/ldap.conf nss_ldap.conf
# ln -s openldap/ldap.conf ldap.conf

ldap.confはこれまででも作成されているものなので。特に以下の部分程度でした。

base dc=fkimura,dc=com

こんな感じ。
次は、/etc/pam.d以下ですが、systemに一括で動けば十分なので、個別には入れずに記述しました。

# fkimura
auth            sufficient      /usr/local/lib/pam_ldap.so             no_warn try_first_pass
session         optional        /usr/local/lib/pam_ldap.so

/etc/pam.d以下って意外と細かいパーミッションになっていないみたい。

# chmod 600 /etc/pam.d/system

secretファイルはオプションとか書かれていたし、ここでは書かないで進めました。
テストユーザを作成し、追加。

dn: ou=System,dc=fkimura,dc=com
objectClass: organizationalUnit
ou: System

dn: ou=Users,ou=System,dc=fkimura,dc=com
objectClass: organizationalUnit
ou: users

dn: ou=Group,ou=System,dc=fkimura,dc=com
objectClass: organizationalUnit
ou: group

dn: uid=test,ou=Users,ou=System,dc=fkimura,dc=com
objectClass: account
objectClass: posixAccount
objectClass: shadowAccount
cn: test
uid: test
userPassword:   {SSHA}45c8o6l3q0K48UaFlPa21OyyVNCdYcOp
uidNumber: 49000
gidNumber: 49000
homeDirectory: /nonexistent
loginShell: /usr/sbin/nologin
gecos: test user

dn: cn=test,ou=Group,ou=System,dc=fkimura,dc=com
objectClass: posixGroup
cn: test
gidNumber: 49000
memberUid: test

コマンドは、前回にほぼ同じ、
"ldapadd -x -h 127.0.0.1 -D "cn=Manager,dc=fkimura,dc=com" -W -f testuser.ldif" でした。

結果、こんなでした。

adding new entry "ou=System,dc=fkimura,dc=com"
adding new entry "ou=Users,ou=System,dc=fkimura,dc=com"
adding new entry "ou=Group,ou=System,dc=fkimura,dc=com"
adding new entry "uid=test,ou=Users,ou=System,dc=fkimura,dc=com"
adding new entry "cn=test,ou=Group,ou=System,dc=fkimura,dc=com"

結果、確認してみました。

# id test
uid=49000(test) gid=49000(test) groups=49000(test)

なんとなく動くと嬉しい。
面倒だけど、こんな風に作るものだと理解し始めた日になりました。

この後はまた後日になります。

【改訂履歴】作成:2013/11/04 更新:2013/12/1
【参考リンク】
FreeBSD-Ports-OpenLDAP-LDAP Authentication - Cocelo Style
openLDAP 構築(11) - エントリーの追加 arinux
【FreeBSD 5.3】OpenLDAP の設定 by nabe@abk さん
CentOS6系でSSH公開鍵認証をLDAP認証にする方法。
CentOS 5.4でLDAPサーバーの構築 - パンダのメモ帳

Copyright © 1996,1997-2006,2007- by F.Kimura,