LoginSignup
3
0

More than 5 years have passed since last update.

CentOS7 + OpenLDAPにおけるsha2の利用

Posted at

まえがき

一年近く前にやった作業を今更アップするので、今は状況が改善してるかもしれない・・・
OpenLDAP上に保存している様々なデータ上で、例えばユーザパスワードとか保存している場合はよくある状況だろうけど、その際、平文のまま保存しておくのは当然ナンセンス。

普通は、sha1でハッシュ化した文字列で置いておくんだけど、ご存知の通り現在ではsha1やめてsha2使おうねってなってる。
ところが、CentOSにおけるyumでインストールしたOpenLDAPではsha2を標準では扱えない。
※他は知らない
そのため別途、sha2モジュールを自分でコンパイルして組み込んであげないといけない。

仕事で先輩に頼まれて、試行錯誤しながら頑張ったときのメモ。
ただし今回の場合、色々事情があってOpenLDAP自体はyumでインストールし、別途sha2モジュールだけを生成して組み合わせて使う、という少し変態なことをやってる。

要件とかにもよるんだろうけれど、yum版OpenLDAPは使用せず、自前でコンパイルしたOpenLDAPを使ったほうが本来は良いのだろうと思う。

環境

CentOS7(1503)

作業始める前に確認

sha2モジュールが使用可能か確認
sha2モジュールを明示的に指定して、sha2でパスワードをハッシュ化できるか試してみる

[root@localhost ~]# slappasswd -h '{SHA256}' -o module-load=/usr/lib64/openldap/pw-sha2.so -s foobar

※ここで使用不可/エラーなどなら下記コンパイル手順を行っていく
※というか絶対エラーになるはず・・・
※他の場所にモジュールがないことを確認するために、find / -name pw-sha2.so とかで検索してみてもよいかも

モジュールのコンパイル作業

前提

gccが導入済みであること
※未導入の場合、yum install gcc

作業ディレクトリに移動しソースをDLおよび解凍

[root@localhost ~]# cd /usr/local/src/
[root@localhost src]# wget ftp://ftp.openldap.org/pub/OpenLDAP/openldap-release/openldap-2.4.44.tgz
[root@localhost src]# tar xzvf openldap-2.4.44.tgz
[root@localhost openldap-2.4.44]# cd openldap-2.4.44

Makefileの作成

※db関連はあえて除外 (他にも必要なパッケージがたくさんありめんどうくさいため)
※除外させない場合、db4とかが必要になってくる

[root@localhost openldap-2.4.44]# ./configure --enable-bdb=no --enable-hdb=no

依存ライブラリと本体のコンパイル

[root@localhost openldap-2.4.44]# make depend
[root@localhost openldap-2.4.44]# make

sha2モジュールのコンパイル

[root@localhost openldap-2.4.44]# cd /usr/local/src/openldap-2.4.44/contrib/slapd-modules/passwd/sha2
[root@localhost sha2]# make
../../../../libtool --mode=link gcc -g -O2 -Wall -version-info 0:0:0 \
-rpath /usr/local/libexec/openldap -module -o pw-sha2.la slapd-sha2.lo sha2.lo ../../../../libraries/libldap_r/libldap_r.la ../../../../libraries/liblber/liblber.la
cc -shared  .libs/slapd-sha2.o .libs/sha2.o  -Wl,--rpath -Wl,/usr/local/src/openldap-2.4.44/libraries/libldap_r/.libs -Wl,--rpath -Wl,/usr/local/src/openldap-2.4.44/libraries/liblber/.libs -Wl,--rpath -Wl,/usr/local/lib -L/usr/local/src/openldap-2.4.44/libraries/liblber/.libs ../../../../libraries/libldap_r/.libs/libldap_r.so ../../../../libraries/liblber/.libs/liblber.so  -Wl,-soname -Wl,pw-sha2.so.0 -o .libs/pw-sha2.so.0.0.0
(cd .libs && rm -f pw-sha2.so.0 && ln -s pw-sha2.so.0.0.0 pw-sha2.so.0)
(cd .libs && rm -f pw-sha2.so && ln -s pw-sha2.so.0.0.0 pw-sha2.so)
ar cru .libs/pw-sha2.a  slapd-sha2.o sha2.o
ranlib .libs/pw-sha2.a
creating pw-sha2.la
(cd .libs && rm -f pw-sha2.la && ln -s ../pw-sha2.la pw-sha2.la)
[root@localhost sha2]# ls -l .libs/
total 220
-rw-r--r--. 1 root root 76796 Jan 14 15:17 pw-sha2.a
lrwxrwxrwx. 1 root root    13 Jan 14 15:17 pw-sha2.la -> ../pw-sha2.la
-rw-r--r--. 1 root root   887 Jan 14 15:17 pw-sha2.lai
lrwxrwxrwx. 1 root root    16 Jan 14 15:17 pw-sha2.so -> pw-sha2.so.0.0.0
lrwxrwxrwx. 1 root root    16 Jan 14 15:17 pw-sha2.so.0 -> pw-sha2.so.0.0.0
-rwxr-xr-x. 1 root root 61488 Jan 14 15:17 pw-sha2.so.0.0.0
-rw-r--r--. 1 root root 43184 Jan 14 15:14 sha2.o
-rw-r--r--. 1 root root 32288 Jan 14 15:14 slapd-sha2.o

OpenLDAPへの組み込み作業

準備

前工程で生成した以下を/usr/lib64/openldap/配下にコピー
pw-sha2.la
pw-sha2.so
pw-sha2.so.0
pw-sha2.so.0.0.0

コンフィグの変更

slapd.conf
※13行目あたりに追加
moduleload      pw-sha2.la

コンフィグ再生成

[root@localhost ~]# rm -rf /etc/openldap/slapd.d/*
[root@localhost ~]# slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d
[root@localhost ~]# chown -R ldap:ldap /etc/openldap/slapd.d

サービスの再起動および起動確認

[root@localhost ~]# systemctl restart slapd
[root@localhost ~]# journalctl -xn -u slapd

モジュールが読み込まれていることを確認

[root@localhost ~]# less /etc/openldap/slapd.d/cn=config/ ~~module
[root@localhost ~]# slappasswd -h '{SHA256}' -o module-load=/usr/lib64/openldap/pw-sha2.so -s foobar
3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0