2013年1月8日火曜日

bindをchrootしたら起動しなくなった件(ubuntu)

結論から言うとlibgost.soもchroot環境に移さなきゃいけないのと、そうするとappaomorの設定もしなければならないということだった。

まずchroot環境を作って、適宜設定を変更してbindを起動しようとしてみた。するとsyslogにこんなエラーを吐いた。

named[16645]: initializing DST: openssl failure
named[16645]: exiting (due to fatal error)

ググるとlibgost.soというファイルをchroot環境にコピーしなさいとあったのでやってみた。(不親切な記述だったので修正@26/12/2013)

mkdir -p /var/bind/chroot/usr/lib/i386-linux-gnu/openssl-1.0.0/engines
# cp -a /usr/lib/i386-linux-gnu/openssl-1.0.0/engines/libgost.so /var/bind/chroot/usr/lib/i386-linux-gnu/openssl-1.0.0/engines

まだ起動できないのでsyslogを見てみると下記のログ。

kernel: [1991366.149893] type=1400 audit(1357608933.140:967466): apparmor="STATUS" operation="profile_replace" name="/var/bind/chroot/usr/l
ib/i386-linux-gnu/openssl-1.0.0/engines/libgost.so" pid=21977 comm="apparmor_parser"

今コピーしたファイルがapparmorに引っかかってるようだが、apparmorは全然勉強して無くて、今まではプロファイルを手で書いてたのだ。なので、激しくうんざりしたわけなのだが、これもググるとaa-genprofというツールが有るとのこと。そりゃそうだよな。
どうやらデフォルトでは入っていないのでapptitudeでapparmor-utilsをインストール。
で、下記のコマンドを実行した。

aa-genprof /var/bind/chroot/usr/lib/i386-linux-gnu/openssl-1.0.0/engines/libgost.so

画面にメッセージが表示されて、アプリケーション実行してみろという。別なシェルを立ち上げて/etc/init.d/bind9 startとし、元のシェルで(S)canを実行すると、だらだらとメッセージが表示されて(A)llowとか(D)enyとか選択待ちになる。(A)を押すと作業は完了した。
試しに/etc/apparmor.dを覗いてみると、var.bind.chroot.usr.lib.i386-linux-gnu.openssl-1.0.0.engines.libgost.soというプロファイルがちゃんと出来ていた。
これでbindは正常起動するようになった。
勉強になりました。apparmorのツールの存在を知ったのが大きな収穫でした。

0 件のコメント: