この記事は、以下の続きです。
改めて状況を整理してみた。
問題が起こったのは、「nss-softokn-freebl」パッケージの更新で、バージョンは以下の通り。
nss-softokn-freebl-3.14.3-18.el6_6.x86_64.rpm
↓
nss-softokn-freebl-3.14.3-19.el6_6.x86_64.rpm
この2つのRPMパッケージを入手して、中身のファイルに差がないか確認。
作業用ディレクトリを作成
$ mkdir /tmp/3-18 $ mkdir /tmp/3-19
まずは3-18から。
$ cd /tmp/3-18 $ wget http://ftp.jaist.ac.jp/pub/Linux/CentOS/6/updates/x86_64/Packages/nss-softokn-freebl-3.14.3-18.el6_6.x86_64.rpm $ rpm2cpio nss-softokn-freebl-3.14.3-18.el6_6.x86_64.rpm | cpio -idv ./lib64/libfreebl3.chk ./lib64/libfreebl3.so ./usr/lib64/libfreebl3.chk ./usr/lib64/libfreebl3.so 937 blocks
次に3-19。
$ cd /tmp/3-19 $ wget http://ftp.jaist.ac.jp/pub/Linux/CentOS/6/updates/x86_64/Packages/nss-softokn-freebl-3.14.3-19.el6_6.x86_64.rpm $ rpm2cpio nss-softokn-freebl-3.14.3-19.el6_6.x86_64.rpm | cpio -idv ./etc/prelink.conf.d ./etc/prelink.conf.d/nss-softokn-prelink.conf ./lib64/libfreebl3.so ./lib64/libfreeblpriv3.chk ./lib64/libfreeblpriv3.so ./usr/lib64/libfreebl3.so ./usr/lib64/libfreeblpriv3.chk ./usr/lib64/libfreeblpriv3.so ./usr/share/dracut/modules.d/05nss-softokn ./usr/share/dracut/modules.d/05nss-softokn/install 960 blocks
3-19 以降で含まれるようになった設定ファイルらしきものを確認。
このファイルは、本日時点での最新版である3-22も同様。
$ cat ./etc/prelink.conf.d/nss-softokn-prelink.conf -b /lib{,64}/libfreeblpriv3.so -b /lib{,64}/libsoftokn3.so -b /lib{,64}/libnssdbm3.so -b /usr/lib{,64}/libfreeblpriv3.so -b /usr/lib{,64}/libsoftokn3.so -b /usr/lib{,64}/libnssdbm3.so
これは、prelinkの除外リストらしい。
http://blog.hatena.ne.jp/savakan/shobon.hatenablog.com/edit#preview
man で確認すると、以下の通り。
-b --black-list=PATH This option allows blacklisting certain paths, libraries or binaries. Prelink will not touch them during prelinking.
改めて以前のエラーメッセージを確認すると・・・
# /usr/sbin/prelink -v /usr/bin/elinks ・ ・省略 ・ /usr/sbin/prelink: Could not prelink /usr/lib64/libnss_compat_ossl.so.0 because its dependency /usr/lib64/libnssdbm3.so could not be prelinked /usr/sbin/prelink: Could not prelink /usr/bin/elinks because its dependency /usr/lib64/libnss_compat_ossl.so.0 could not be prelinked # /usr/sbin/prelink -v /usr/bin/links ・ ・省略 ・ /usr/sbin/prelink: Could not prelink /usr/lib64/libnss_compat_ossl.so.0 because its dependency /usr/lib64/libnssdbm3.so could not be prelinked /usr/sbin/prelink: Could not prelink /usr/bin/links because its dependency /usr/lib64/libnss_compat_ossl.so.0 could not be prelinked
なので、「/usr/lib64/libnssdbm3.so」が除外リストに入っており、「/usr/lib64/libnss_compat_ossl.so.0」がprelinkされない。
これに依存して、「/usr/bin/elinks」「/usr/bin/links」もprelinkされない。
「nss-softokn-prelink.conf」を削除したり、除外リストから削除したりする事は、動作に不安があるのでできない。
ところで、そもそもの現象は、rkhunter でコマンドのハッシュをチェックして、ハッシュが合わなくなったという事だった。
原因は、prelink と nss-softokn-freebl の更新によるもの。
prelink とrkhunter の動作を考慮してまとめると、以下のようになる。
<nss-softokn-freebl-3.14.3-18 以前>
・nss-softokn-prelink.conf は存在しない。
・prelink で elinks/links いずれでもエラーは出ない。
・rkhunter で、以前のハッシュ値と、prelink を再度実行した後のハッシュ値は同じになり、エラーは発生しない。
<nss-softokn-freebl-3.14.3-19 以降>
・nss-softokn-prelink.conf が存在する。
・prelink で elinks/links いずれでもエラーが出る(nss-softokn-prelink.conf で除外リストに指定されているモジュールがあるため)。
・prelink でハッシュ値が更新されない。
・rkhunter で、以前のハッシュ値と、prelink を再度実行した後のハッシュ値を比較しようとした際に、エラーになる。
(/var/log/rkhunter.log に出力される Warning: No hash value found for file... のこと)
rkhunter では、elinks/links が prelink したハッシュ値を記録している。
prelink を undo して、rkhunter に elinks/links が prelink されない(エラーが出て失敗する)ハッシュ値を再登録させてみる事にした。
prelink を undo する。-v も付けると、undo されたリストが表示される。
# /usr/sbin/prelink -au
その後、「rkhunter --propupd」を実行。
# rkhunter --propupd [ Rootkit Hunter version 1.4.0 ] File updated: searched for 167 files, found 141
prelink は cron で実行されるので、prelink 後に再びハッシュ値のエラーが出ないか確認のため、手動で prelink を実行して確認。
# /etc/cron.daily/prelink # rkhunter --propupd [ Rootkit Hunter version 1.4.0 ] File updated: searched for 167 files, found 141
エラーが出なくなった。たぶん、これで良かったと思う。
なお、rkhunter でチェックされるのハッシュ値は、以下で管理されている模様。
/var/lib/rkhunter/db/rkhunter.dat /var/lib/rkhunter/db/rkhunter.dat.old
/usr/bin/rkhunter を cat してみたら、18000行もあるシェルスクリプトだった。