読者です 読者をやめる 読者になる 読者になる

opamp_sando's blog

クソザコが割りと適当なことを書くためにある備忘録です。あとたまに普通の日記も書きます

ArchLinuxでOpneLDAPサーバー動かす その1

はじめに

とりあえず動かすだけ。
そのうち色々やってみたらその2とか作るかもしれない。

今日の目標

slapd動かす
初期データの搬入をする
sslで暗号化通信する

ということでこの3つをやっていく。

注意: LDAPはよくわかってない初心者なので記事の内容が間違えていたり適切でない場合があるのでその辺りは自己責任でお願いします。

Install openldap

openldappacmanからインストールすることができるので、以下のコマンドでぱっぱとインストールしてしまう。

$ (sudo) pacman -S openldap

インストールできたら設定ファイルは"/etc/openldap"以下に入る。

Prepare database directory

初めて導入した場合、おそらく特に何も入っていないと思うが念のため削除しておく

$ (sudo) rm -rf /var/lib/openldap/openldap-data/*

そして次のコマンドを実行

$ (sudo) cp /etc/openldap/DB_CONFIG.example /var/lib/openldap/openldap-data/DB_CONFIG

所有者を変更する

$ (sudo) chown ldap:ldap /var/lib/openldap/openldap-data/DB_CONFIG

これでおk

Setting slapd.conf

続いてslapd.confを設定していく。"/etc/openldap/slapd.conf"に入っている。 includeやらpidfileなどは少なくとも今のところは変更する必要はない。
とりあえず今回変更が必要な箇所は

suffix
rootdn
rootpw

である。SSLの設定もここで行う必要があるが、それは後で行う。
またdirectoryが先ほど上で設定したdatabase directoryになっているかを確認する。

directory   /var/lib/openldap/openldap-data

となっていればおk。
逆に変更する場合はここをいじるといい(と思う)

で、話を戻してsuffixから設定する。suffixは接頭辞である。
普通は自分のhostnameを指定する。例えばexample.comなら

suffix "dc=example,dc=com"

といった具合。dcがなんの略だったかは忘れた...

続いてrootdnだが、これはLDAPの管理者を設定する項目。なんかちゃんとした名前があった気がするが忘れた。

rootdn "cn=Manager,dc=example,dc=com"

と、Managerという名前にするのが一般的なようだ。ちなみにcnはなんの略かちゃんと覚えてて"Common Name"の略のはず。

そして次のrootpwは名前から察する通り上のrootdnのパスワードである。
平文で書いても動きはするがやっぱり不安なのでハッシュ化する。

$ slappasswd 
New Password:
Re-enter new password:
{SSHA}DDNLDNwHiBNre/Alz9m45jkxg5MTsvmB

という具合にslappasswdコマンドでパスワードをハッシュ化できる。ちなみにhogeでパスワードを作ると上みたいな感じになる。
ある程度頑丈なのを適当に考えて上の例のように実行する。
で、最後に出力された{SSHA}....で始まる奴をそのままrootpwにコピペ

rootpw {SSHA}DDNLDNwHiBNre/Alz9m45jkxg5MTsvmB

で、おk。

Try to start slapd

起動してみる。

$ slaptest

してみて特に問題がないようだったら

$ (sudo) systemctl start slapd

とすると起動できる。エラーが起こった場合何らかの設定が間違えているとかそんなん。

最近気がついたけど、/run/openldapがパーミションがなくて作られない場合があるようなので、初回起動する前に

 $ sudo mkdir /run/openldap
 $ sudo chown ldap:ldap /run/openldap

するとうまくいくかも?

Import first datas

例えば自分のhomeディレクトリ以下などどこでもいいので適当にldifファイルを作ってデータの搬入をしてみる。

$ vim ~/init.ldif

で、以下を参考にして書いてみる...とか

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

dn: cn=Manager,dc=example,dc=com
objectClass: organizationalRole
cn: Manager

dcとoとか組織名やらなんやらなんだけどぶっちゃけなんの組織でもないので適当にhost名の一部を入れてみたりとか色々。
上のdcのところはdnに記述したdcと同じ値にしないと64番のエラーが返る。

http://software.fujitsu.com/jp/manual/manualfiles/M050000/B1WN4901/02/irepab/irep0192.htm

で、下のcn=Mangerのところはdc=example,dc=comだけ書き換えればおk。
ちなみに、これで2つのデータを表す。このように1つのファイルに空白行で区切って複数のデータを書くことができるようだ。

で、実際に書き終わったらsaveして搬入してみる。

$ ldapadd -h localhost -x -W -D "cn=Manager,dc=example,dc=com" -f init.ldif

のように-fでファイルを指定する。"-D"にはManagerのあれを書く。
これでうまく行けばそれっぽい表示がでてデータ搬入が完了した感じになる。

Setting SSL

ではSSLを設定してみる。
ただしSSL証明書とか鍵とかは取得済みとする。(確かオレオレの奴だとなんかslapd.confに正当性を確認しないオプションを付けないといけないらしい)

slapd.confを開いて以下の例のような感じに行を追加する。

TLSCipherSuite HIGH:MEDIUM:+SSLv2
TLSCertificateFile /path/to/ssl.crt
TLSCertificateKeyFile /path/to/ssl.key

これを/path/to/ssl.*のところは自分の証明書と鍵のファイルに合わせて書き換える。
で、これで再起動すれば動くのかなーと思ってたけど動かなかったので調べてみたらどうやらサーバー起動時のオプションに以下をつける

-h 'ldap:/// ldaps:///'

これをつけてサーバーを起動すれば大丈夫っぽいようだ。
で、多分slapd.argsに書き込めばなんとかなる気もするけどよくわからなかったので、ちょっと邪道だがsystemdのslapd.serviceに直接書き込んだorz

で、slapdを動かすと無事にldapsで通信ができました。
ちなみに、636番ポートだった気がします。

もしiptablesなんかを設定しているのなら更にポート開放が必要なので忘れないように...外部からアクセスするなら。

END

終わった...

英語が休講になったのでとりあえず現段階で自分ができるところまで書いてみた。
このあとLinuxのユーザー認証をldapから参照してみたりとかWebの認証も参照してみたりとか色々やってみたい感じ。
phpldapadminも導入に挑戦してたが謎のエラーで一時凍結。
まあ、ああいうツールに頼りすぎるといざというときに...ね? ああいうのは基本的な操作ができる人が使うんだよきっと...

Firefox ブラウザ無料ダウンロード