ライン

ポイント:*

ライン

 はじめに

RaspBSD

 我が家では、2台のRaspBerry PIが動いていて、うち1台がRaspBSD。
平行に何か動作させてしまうとノタノタしてしまいますけど、立派に動作はしています。
今回は、これに機能を加えます。

 今回は、OpenLDAPのサーバを動作させて、仮想マシンを動作させる際に利用することにしようと思っています。

 4コアで1GBのメモリー。そこそこ動きそうなんですが

 インストール

OpenLDAP2.4系

 サーバとクライアントの両方を入れます。

# pkg install openldap-client openldap-server
Updating FreeBSD repository catalogue...
FreeBSD repository is up-to-date.
All repositories are up-to-date.
Checking integrity... done (0 conflicting)
The following 3 package(s) will be affected (of 0 checked):

New packages to be INSTALLED:
        openldap-client: 2.4.42_2
        openldap-server: 2.4.42_2
        libltdl: 2.4.6

The process will require 7 MiB more space.

Proceed with this action? [y/N]:y

...

************************************************************

The OpenLDAP server package has been successfully installed.

In order to run the LDAP server, you need to edit
  /usr/local/etc/openldap/slapd.conf
to suit your needs and add the following lines to /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"

Then start the server with
  /usr/local/etc/rc.d/slapd start
or reboot.

Try `man slapd' and the online manual at
  http://www.OpenLDAP.org/doc/
for more information.

slapd runs under a non-privileged user id (by default `ldap'),
see /usr/local/etc/rc.d/slapd for more information.

************************************************************

インストールはこんな感じ。CyrusSASL版のクライアントはうまく入らなかったので、まずはこれで。
CentOSなどとの連動の際には、コンパイルするなどで考える…かなぁ。
/etc/rc.confに以下を加える。

# OpenLDAP
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
Starting slapd.
Unrecognized database type (mdb)
/usr/local/etc/rc.d/slapd: WARNING: failed to start slapd
このportsのオプションは、Dynamic_Backend, MDB, Syncprovだけが有効になっているはず。
slapd.conf にコメントになっている
moduleload      back_mdb

とすれば良さそう。

でも、まず先に必要な設定をしてからにします。
設定ファイルはいつも通りに以下にあります。

# cd /usr/local/etc/openldap
# ll
total 28
-rw-r--r--  1 root  wheel   245 Oct 28 02:05 ldap.conf
-rw-r--r--  1 root  wheel   245 Oct 28 02:05 ldap.conf.sample
drwxr-xr-x  2 root  wheel  1536 Nov  8 08:16 schema/
-rw-------  1 ldap  ldap   2103 Nov  8 08:30 slapd.conf
-rw-------  1 root  wheel  2111 Oct 30 02:09 slapd.conf.sample
-rw-------  1 root  wheel  2630 Oct 30 02:09 slapd.ldif
-rw-------  1 root  wheel  2630 Oct 30 02:09 slapd.ldif.sample

まず、パスワードを決めます。

# slappasswd
New password:********
Re-enter new password:********
{SSHA}1L2yKdynXAVXSOtfSVmLrbJAeNkfjNjW

slapd.conf の rootpw行を変更します。
suffixやrootdnも併せて変更しました。

これで起動させて…問題なしです。

でも、このままだとTLSが使えないので、設定を加えます。

# mkdir /usr/local/etc/openldap/certs
# cd /usr/local/etc/openldap/certs
# openssl genrsa -out ./server.key 2048
Generating RSA private key, 2048 bit long modulus
.......+++
.........................................................................................................................+++
e is 65537 (0x10001)
# cp -p server.key server.key_orig
# openssl rsa -in ./server.key_orig -out ./server.key
writing RSA key
# openssl req -new -x509 -days 3650 -key ./server.key -out ./server.crt
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:JP
State or Province Name (full name) [Some-State]:Tokyo
Locality Name (eg, city) []:Shinjuku-ward
Organization Name (eg, company) [Internet Widgits Pty Ltd]:example.com
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:ldap.example.com
Email Address []:
# chown ldap:ldap *
# chmod 400 *

10年動かそう…ということではありませんが、こんな感じ。
slapd.conf には以下を加えました。

# TLS
TLSCACertificateFile    /usr/local/etc/openldap/certs/server.crt
TLSCertificateFile      /usr/local/etc/openldap/certs/server.crt
TLSCertificateKeyFile   /usr/local/etc/openldap/certs/server.key

これでサービスを上げてみます。大丈夫。でも、636ポートで待っていない。

# vi /etc/rc.conf

 加えたのなら追記しないとダメ。

slapd_flags='-h "ldapi://%2fvar%2frun%2fopenldap%2fldapi/ ldap://0.0.0.0/ ldaps://0.0.0.0/" '

サービスを再起動して確認する。

# sockstat -4 -l -p 636,389
USER     COMMAND    PID   FD PROTO  LOCAL ADDRESS         FOREIGN ADDRESS
ldap     slapd      56864 6  tcp4   *:389                 *:*
ldap     slapd      56864 7  tcp4   *:636                 *:*

今度は大丈夫。デバックを入れてコンパイルしていないので、何かあってもログが出力されない。
Raspberry PIでコンパイルするのは日が暮れそうでやだなぁ。そのうちに考えることにして、今回はパス。

 ログイン/sshで利用できるように設定

nss_ldap pam_ldap

 毎度の導入関連。

# pkg install nss_ldap pam_ldap
Updating FreeBSD repository catalogue...
FreeBSD repository is up-to-date.
All repositories are up-to-date.
Updating database digests format: 100%
The following 2 package(s) will be affected (of 0 checked):

New packages to be INSTALLED:
        nss_ldap: 1.265_12
        pam_ldap: 1.8.6_3

The process will require 193 KiB more space.
76 KiB to be downloaded.

Proceed with this action? [y/N]:y
Fetching nss_ldap-1.265_12.txz: 100%   50 KiB  51.1kB/s    00:01
Fetching pam_ldap-1.8.6_3.txz: 100%   26 KiB  26.6kB/s    00:01
Checking integrity... done (0 conflicting)
[1/2] Installing nss_ldap-1.265_12...
[1/2] Extracting nss_ldap-1.265_12: 100%
[2/2] Installing pam_ldap-1.8.6_3...
[2/2] Extracting pam_ldap-1.8.6_3: 100%
Message from nss_ldap-1.265_12:
=====================================================================
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
=====================================================================
Message from pam_ldap-1.8.6_3:
================================================================================
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: head/etc/nsswitch.conf 224765 2011-08-10 20:52:02Z dougb $
#
#group: compat
#group_compat: ldap nis
group: files ldap

hosts: files dns
networks: files
#passwd: compat
#passwd_compat: ldap nis
passwd: files ldap

shells: files
services: compat
services_compat: nis
protocols: files
rpc: files

/usr/local/etc/nss_ldap.conf は、毎度でサンプル含めて利用しないので、以下のようにしました。

# rm  /usr/local/etc/nss_ldap.conf
# ln -s /usr/local/etc/openldap/ldap.conf /usr/local/etc/nss_ldap.conf
# ln -s /usr/local/etc/openldap/ldap.conf /usr/local/etc/ldap.conf
# cd /etc/pam.d/
# ll
total 64
-r--r--r--  1 root  wheel  2898 Aug 20 09:11 README
-rw-r--r--  1 root  wheel   312 Aug 20 09:11 atrun
-rw-r--r--  1 root  wheel   189 Aug 20 09:11 cron
-rw-r--r--  2 root  wheel   521 Aug 20 09:11 ftp
-rw-r--r--  2 root  wheel   521 Aug 20 09:11 ftpd
-rw-r--r--  1 root  wheel   355 Aug 20 09:11 imap
-rw-r--r--  1 root  wheel   363 Aug 20 09:11 login
-rw-r--r--  1 root  wheel   661 Aug 20 09:11 other
-rw-r--r--  1 root  wheel   308 Aug 20 09:11 passwd
-rw-r--r--  1 root  wheel   355 Aug 20 09:11 pop3
-rw-r--r--  1 root  wheel   318 Aug 20 09:11 rsh
-rw-r--r--  1 root  wheel   738 Aug 20 09:11 sshd
-rw-r--r--  1 root  wheel   374 Aug 20 09:11 su
-rw-r--r--  1 root  wheel   704 Aug 20 09:11 system
-rw-r--r--  1 root  wheel   754 Aug 20 09:11 telnetd
-rw-r--r--  1 root  wheel   519 Aug 20 09:11 xdm
# vi system
# vi sshd

追加で1行書きます。pam_unix.soの前に記載しています。

# auth
auth            sufficient      pam_opie.so             no_warn no_fake_prompts
auth            requisite       pam_opieaccess.so       no_warn allow_local
#auth           sufficient      pam_krb5.so             no_warn try_first_pass
#auth           sufficient      pam_ssh.so              no_warn try_first_pass

#20151108
auth            sufficient      /usr/local/lib/pam_ldap.so      no_warn try_first_pass

auth            required        pam_unix.so             no_warn try_first_pass

で、動作確認。しかし、残念ながら、

/usr/local/etc/rc.d/slapd: WARNING: failed to start slapd

なエラー。
デバッグモードが入っていないのでさっぱりわからない。やったのはスキーマを加えただけなのに…。
結果、あー…。nis.schemaを加えたら、”Depends upon core.schema and cosine.schema”なものも適用していないからなのだね。
ということで修正。slapd.confを以下のようにして、サービス再起動。

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

のようにしました。ldap.confは、最終的には以下にしました。
bind_policy softを加えたのは、OpenLDAPのサービスを停止した際に、システムが2分間動けなくなったことが原因。
これは流石に困るので、最終的に追加したものです。

BASE    dc=example,dc=com
URI     ldaps://ldap.example.com ldap://ldap.example.com

TLS_CACERT      /usr/local/etc/openldap/certs/server.crt
TLS_REQCERT     never

nss_base_passwd ou=People,dc=exmaple,dc=com
nss_base_group ou=Group,dc=example,dc=com

bind_policy soft

さて、実際にユーザを加えて見ます。
流れはこんな感じ。初期だけ入れる init.ldifと、ユーザとグループごとに入れる~-user.ldifと~-group.ldifという形にしました。

# ldapadd -x -D 'cn=Manager,dc=example,dc=com' -W -f /root/init.ldif
adding new entry "dc=example,dc=com"
adding new entry "ou=People,dc=example,dc=com"
adding new entry "ou=Group,dc=example,dc=com"
# ldapadd -x -D 'cn=Manager,dc=example,dc=com' -W -f /root/test01-user.ldif
adding new entry "uid=test01,ou=people,dc=example,dc=com"
# ldapadd -x -D 'cn=Manager,dc=example,dc=com' -W -f /root/test01-group.ldif
adding new entry "cn=test01,ou=group,dc=example,dc=com"

具体的には、init.ldifが

dn: dc=example,dc=com
objectClass: top
objectClass: dcObject
objectClass: organization
o: example
dc: example

dn: ou=People,dc=example,dc=com
objectClass: top
objectClass: organizationalUnit
ou: People

dn: ou=Group,dc=example,dc=com
objectClass: top
objectClass: organizationalUnit
ou: Group

みたいな感じ。exampleな部分を自分の利用するドメインに変更すればそのまま使える。
初期ユーザとして仮にtest01 というユーザを準備してみました。自分だけのグループを持つ感じのイメージ。
最初はユーザを登録します。ここではtest01-user.ldifというファイルにしました。

dn: uid=test01,ou=people,dc=example,dc=com
objectClass: account
objectClass: posixAccount
objectClass: shadowAccount
objectClass: top
uidNumber: 10000
gidNumber: 10000
userPassword: {SSHA}pMnGyPGNhKc3f9Vv8X5ECyvT1id2bGDJ
homeDirectory: /home/test01
loginShell: /bin/csh
uid: test01
cn: test01

パスワード部分は、先にslappasswd -s testのような感じで文字列を準備しておき、貼っているイメージです。
GIDやUIDは、お好きな数字をどうぞっていう感じです。
ここで、ユーザディレクトリも書いていますが、先に準備している方がいいでしょう。
今回は自動生成するようなものは準備せずに手動にしました。

グループ用のファイルは同様に、test01-group.ldifというファイルにしました。

dn: cn=test01,ou=group,dc=example,dc=com
objectClass: posixGroup
objectClass: top
gidNumber: 10000
cn: test01

みたいなファイルにしました。

実際にsshで接続してみることにします。

Welcome to FreeBSD!
Could not chdir to home directory /home/test01: No such file or directory
% id
uid=10000(test01) gid=10000 groups=10000

こんな感じ。
管理者権限で、

# cd /home
# mkdir test01
# chmod 10000:10000 test01
drwxr-xr-x  2 test01   10000    512 Nov  8 17:58 test01/

ふーん、グループは置き換わった表示をしてくれないな。どこか勘違いしているだろうか。
なるほど。ldap.confの記載がミスしてた。訂正したら表示が直りました。

データは、

# slapcat -f /usr/local/etc/openldap/slapd.conf

とすれば、表示されたはず。この内容をバックアップしておけば、最悪の場合でもDBの中身はすぐに復活しますので、定期的に保存する運用になります。

# ldapsearch -h localhost "uidNumber=10000"
# extended LDIF
#
# LDAPv3
# base <dc=example,dc=com> (default) with scope subtree
# filter: uidNumber=10000
# requesting: ALL
#

# test01, People, example.com
dn: uid=test01,ou=People,dc=example,dc=com
objectClass: account
objectClass: posixAccount
objectClass: shadowAccount
objectClass: top
uidNumber: 10000
gidNumber: 10000
userPassword:: e1NTSEF9cE1uR3lQR05oS2MzZjlWdjhYNUVDeXZUMWlkMmJHREo=
homeDirectory: /home/test01
loginShell: /bin/csh
uid: test01
cn: test01

# search result
search: 2
result: 0 Success

# numResponses:

他のマシンからの使い勝手などは後日続きをしようと思います。


【改訂履歴】作成:2015/11/08 更新:-/-/-

【リンク】

RaspBSD…ポータルページ

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