| CentOS BIND ソースファイルからのインストール方法 | ||||
| このページでは、 | ||||
| ・ パッケージが既にインストールされていたCentOSで、新たにソースからインストールする | ||||
| ・ ソースファイルのインストール先は、既存のBINDと同じ(=上書きインストール)にする | ||||
| ・ OpenSSLは使用するが、バージョン確認はしない | ||||
| ・ パッケージの削除はしない | ||||
| として説明している。 | ||||
| パッケージの削除を行う場合は、起動スクリプトから設定ファイルまでほぼ全部が消えるので注意する。 | ||||
| ■ 事前準備 | ||||
| 1.パッケージ版BINDによるDNSの設定の確認 | ||||
| すでにパッケージ版のBINDがインストールされている場合は、実際にDNSの設定を行い、問題がないことを確認する。 | ||||
| chroot環境も自分で用意しなくても良いように、bind-chrootパッケージをインストールして構築しておく。 | ||||
| ※ パッケージ版のBINDを使用せずに最初からソースファイルを使ってBINDを構築する場合は、起動や設定に必要なファイル、ディレクトリ、 | ||||
| chroot環境、ユーザは作成されない。 | ||||
| パッケージ版のBINDを使うと、多くは自動で作成される。 | ||||
| # ls /etc/init.d/named | 起動スクリプトがあることを確認 | |||
| /etc/init.d/named | ||||
| # ls /etc/sysconfig/named | namedの起動オプション用ファイルがあることを確認 | |||
| /etc/sysconfig/named | ||||
| # more /etc/sysconfig/named | ROOTDIRが設定されていること | |||
| ROOTDIR=/var/named/chroot | ||||
| # chkconfig --list named | 自動起動設定ができていること | |||
| named 0:off 1:off 2:off 3:on 4:off 5:on 6:of | ||||
| # grep named /etc/passwd | ユーザが作成されていること | |||
| named:x:25:25:Named:/var/named:/sbin/nologin | ||||
| # grep named /etc/group | グループが作成されていること | |||
| named:x:25: | ||||
| ★ その他named.confやゾーンファイルの作成等はここでは割愛 | ||||
| # ps -ef | grep named | ||||
| named 5214 1 0 16:33 ? 00:00:00 /usr/sbin/named -u named -t /var/named/chroot | 起動ができることを確認しておく | |||
| 2. gccのインストール | ||||
| configure実行時に必要なgccがない(または見つからない)場合エラーになるため、事前にインストールを行っておく | ||||
| # yum install gcc gcc-c++ | gcc , gcc-c++のインストール | |||
| $ which gcc | gccへパスが通っていることを確認 | |||
| /usr/bin/gcc | ||||
| ★ gccをインストールしているのにエラーが出る場合は、 | ||||
| PATHが通ってないのでPATHの見直しを行う | ||||
| gccが見つからなかったときのエラー | ||||
| $ ./configure --prefix=/usr --exec_prefix=/usr --localstatedir=/var --sysconfdir=/etc \ | ||||
| --disable-openssl-version-check --enable-ipv6 --enable-threads --enable-chroot | ||||
| checking build system type... i686-pc-linux-gnu | ||||
| checking host system type... i686-pc-linux-gnu | ||||
| checking whether make sets $(MAKE)... yes | ||||
| checking for gcc... no | ||||
| checking for cc... no | ||||
| checking for cl.exe... no | ||||
| configure: error: no acceptable C compiler found in $PATH | ||||
| See `config.log' for more details. | ||||
| 3. opensslv.h(openssl-develパッケージ)のインストール | ||||
| configure実行時に必要なopensslv.htがない(または見つからない)場合エラーになるため、事前にインストールを行っておく | ||||
| OpenSSLをパッケージではなくソースからインストールしても良いが、ここではパッケージで済ませた | ||||
| $ yum provides */openssl/opensslv.h | opensslv.hを含むパッケージの検索を検索 | |||
| : | ||||
| openssl-devel-0.9.8e-12.el5_4.6.i386 | openssl-develパッケージに含まれていることがわかる | |||
| : | (2つ出るのは異なるバージョンのパッケージがあるため) | |||
| Filename : /usr/include/openssl/opensslv.h | ||||
| : | ||||
| openssl-devel-0.9.8e-12.el5_5.7.i386 | ||||
| : | ||||
| Filename : /usr/include/openssl/opensslv.h | ||||
| : | ||||
| # yum list linstalled | grep openssl | opensslのパッケージがインストールされているか確認 | |||
| # yum install openssl-devel | ない場合は、openssl-develのインストール | |||
| # ls /usr/include/openssl/opensslv.h | 確認 | |||
| /usr/include/openssl/opensslv.h | ||||
| あらかじめconfigureスクリプト内で指定されているディレクトリにopensslv.hが見つからなかった場合のエラー | ||||
| 違うディレクトリにあるのなら--with-opensslオプションを、OpenSSLを使わないのなら--without-opensslを使うように指示している | ||||
| $ ./configure --prefix=/usr --exec_prefix=/usr --localstatedir=/var --sysconfdir=/etc \ | ||||
| --disable-openssl-version-check --enable-ipv6 --enable-threads --enable-chroot | ||||
| : | ||||
| checking for OpenSSL library... configure: error: OpenSSL was not found in any of /usr | ||||
| /usr/local /usr/local/ssl /usr/pkg /usr/sfw; use --with-openssl=/path | ||||
| If you don't want OpenSSL, use --without-openssl | ||||
| PATHにopensslv.hが見つからなかった場合のエラー | ||||
| $ ./configure --prefix=/usr --exec_prefix=/usr --localstatedir=/var --sysconfdir=/etc \ | ||||
| --disable-openssl-version-check --enable-ipv6 --enable-threads --enable-chroot | ||||
| : | ||||
| checking for OpenSSL library... configure: error: "/usr/include/openssl/opensslv.h" not found | ||||
| ■ BINDのダウンロード | ||||
| ダウンロードしたファイルの検証(正当性確認)は、ここでは省略 | ||||
| BINDを提供しているISCでは、ファイルの正当性確認のためにGPG署名を用意している | ||||
| $ cd /tmp | 適当なディレクトリへ移動 | |||
| $ wget http://ftp.isc.org/isc/bind9/9.7.3-P3/bind-9.7.3-P3.tar.gz | BIND本体のダウンロード | |||
| --2011-08-02 14:27:14-- http://ftp.isc.org/isc/bind9/9.7.3-P3/bind-9.7.3-P3.tar.gz | ||||
| ftp.isc.org をDNSに問いあわせています... 204.152.184.110, 2001:4f8:0:2::18 | ||||
| ftp.isc.org|204.152.184.110|:80 に接続しています... 接続しました。 | ||||
| HTTP による接続要求を送信しました、応答を待っています... 200 OK | ||||
| 長さ: 7586748 (7.2M) [application/x-gzip] | ||||
| `bind-9.7.3-P3.tar.gz' に保存中 | ||||
| 100%[====================================================>] 7,586,748 709K/s 時間 11s | ||||
| 2011-08-02 14:27:25 (698 KB/s) - `bind-9.7.3-P3.tar.gz' へ保存完了 [7586748/7586748] | ||||
| ■ BINDのインストールと起動 | ||||
| makeまでは一般ユーザで行う 灰色の部分は主に確認のために行ったものであり、やらなくても良いもの | ||||
| $ ls | ||||
| bind-9.7.3-P3.tar.gz | ||||
| $ tar -xzvf bind-9.7.3-P3.tar.gz | 解凍と展開 | |||
| bind-9.7.3-P3/ | ||||
| bind-9.7.3-P3/bin/ | ||||
| bind-9.7.3-P3/doc/ | ||||
| bind-9.7.3-P3/Atffile | ||||
| (以下、省略) | ||||
| $ ls -l | 確認 | |||
| drwxr-xr-x 10 test1000 test1000 4096 6月 22 05:59 bind-9.7.3-P3 | ||||
| -rw-rw-r-- 1 test1000 test1000 7586748 7月 5 21:08 bind-9.7.3-P3.tar.gz | ||||
| $ cd bind-9.7.3-P3 | 移動 | |||
| $ ls | 内容確認 | |||
| Atffile README config.h.win32 docutil libtool.m4 | ||||
| CHANGES acconfig.h config.sub install-sh ltmain.sh | ||||
| COPYRIGHT aclocal.m4 config.threads.in isc-config.sh.1 make | ||||
| FAQ bin configure isc-config.sh.docbook mkinstalldirs | ||||
| FAQ.xml bind.keys configure.in isc-config.sh.html util | ||||
| HISTORY config.guess contrib isc-config.sh.in version | ||||
| Makefile.in config.h.in doc lib win32utils | ||||
| $ ./configure --help | configureのヘルプをを見て、オプションを確認 | |||
| $ ./configure --prefix=/usr --exec_prefix=/usr --localstatedir=/var --sysconfdir=/etc \ | configure実施 | |||
| --disable-openssl-version-check --enable-ipv6 --enable-threads --enable-chroot | オプションの意味は後述 | |||
| (出力内容は省略) | ||||
| $ view Makefile | Makefileの確認 | |||
| prefix = /usr | 左側はインストール先のディレクトリを指す変数 | |||
| exec_prefix = /usr | ||||
| bindir = ${exec_prefix}/bin | ||||
| sbindir = ${exec_prefix}/sbin | ||||
| includedir = ${prefix}/include | ||||
| libdir = ${exec_prefix}/lib | ||||
| sysconfdir = /etc | ||||
| localstatedir = /var | ||||
| mandir = ${datarootdir}/man | ||||
| datarootdir = ${prefix}/share | ||||
| DESTDIR = | ||||
| top_builddir = /tmp/bind-9.6-ESV-R3 | ||||
| $ make clean | make clean 実施 | |||
| (出力内容は省略) | ||||
| $ make | make実施 | |||
| (出力内容は省略) | ||||
| $ make test | ||||
| (出力内容は省略) | ||||
| $ su - | rootに変更 | |||
| パスワード: | ||||
| # ps -ef | grep named | 起動中のnamedを確認 | |||
| named 18773 1 0 13:01 ? 00:00:00 /usr/sbin/named -u named -t /var/named/chroot | ||||
| # service named stop | namedの停止 | |||
| # cd /tmp/bind-9.7.3-P3 | 移動 | |||
| # make install | make install 実行 | |||
| (出力内容は省略) | ||||
| # /usr/sbin/named -v | バージョン確認 | |||
| BIND 9.7.3-P3 | ||||
| # service named start | serviceコマンドで起動確認 | |||
| named を起動中: [ OK ] | ||||
| # ps -ef | grep named | プロセス確認 | |||
| named 9039 1 0 16:33 ? 00:00:00 /usr/sbin/named -u named -t /var/named/chroot | ||||
| # rndc status | rndcコマンドが使用できることを確認 | |||
| version: 9.7.3-P3 (Not available.) | ||||
| CPUs found: 1 | ||||
| worker threads: 1 | ||||
| number of zones: 20 | ||||
| debug level: 0 | ||||
| xfers running: 0 | ||||
| xfers deferred: 0 | ||||
| soa queries in progress: 0 | ||||
| query logging is ON | ||||
| recursive clients: 0/2900/3000 | ||||
| tcp clients: 0/100 | ||||
| server is up and running | ||||
| ■ ./configureのオプションについて | ||||
| ./configureで指定できる各種オプションは、 ./configure --help で確認できる(ただし、全てではない様子) | ||||
| また、READMEファイルにオプションの説明がある | ||||
| [ 主なオプションの説明 ] | ||||
| --prefix=PREFIX | 省略時は、/usr/local | |||
| --exec-prefix=EPREFIX | 省略時は、prefixの値 | |||
| --sysconfdir=DIR | named.confが保存されるディレクトリ 省略時は、PREFIX/etc | |||
| --localstatedir=DIR | zoneなどのファイルが保存されるディレクトリ 省略時は、PREFIX/var | |||
| --enable-openssl-version-check | OpenSSLのバージョンをチェックする 省略時はチェックする | |||
| --disable-openssl-version-check | OpenSSLのバージョンをチェックしない | |||
| --enable-threads | マルチスレッディングを有効にする | |||
| シングルCPUでもこのオプションをつけても特に問題はない | ||||
| --enable-ipv6 | IPv6を有効にする デフォルトは、IPv6を自動検出 | |||
| --disable-ipv6 | IPv6を無効にする | |||
| --disable-chroot | chrootを無効にする デフォルトは、chroot有効 | |||
| --with-openssl=PATH | 使用するOpenSSLのパスを指定 | |||
| --with-openssl=yes | OpenSSLを使用する 省略時はyes DNSSECを使用する場合はOpenSSL必須 | |||
| --with-openssl=no | OpenSSLを使用しない | |||
| ■ make install前の稼動テスト | ||||
| 上記のインストールの流れには入れていないが、make installを実行する前に、実際に動かして問題ないことを確認することもできる | ||||
| 特に今回のように既存のBINDを上書きでインストールする場合は、インストール前に戻せないので試したほうが良い | ||||
| [ 上記設定例のmake test 以降で、赤字が追加した部分 ] | ||||
| $ su - | rootに変更 | |||
| パスワード: | ||||
| # ps -ef | grep named | 起動中のnamedを確認 | |||
| named 18773 1 0 13:01 ? 00:00:00 /usr/sbin/named -u named -t /var/named/chroot | ||||
| # service named stop | namedの停止 | |||
| # cd /tmp/bind-9.7.3-P3 | 移動 | |||
| # ./bin/named/named -u named -t /var/named/chroot | 新しいBINDのnamedの実行ファイルを使って起動させる | |||
| # ps -ef | grep named | 確認 | |||
| named 367 1 1 13:02 ? 00:00:00 ./bin/named/named -u named -t /var/named/chroot | ||||
| # tail /var/log/messages | ログをみて、異常が無いことを確認 | |||
| # tail /var/named/chroot/var/log/named/named.info | ||||
| # ./bin/dig/dig @localhost www.example.co.jp a | 新しいdigの確認と問い合わせができることを確認 | |||
| # ./bin/dig/dig @8.8.8.8 www.yahoo.co.jp a | ||||
| # ./bin/rndc/rndc | 新しいrndcの確認 | |||
| # ./bin/rndc/rndc status | bindのバージョンを確認 | |||
| # ./bin/rndc/rndc reload | (できるのであれば、rndc reloadも確認したい) | |||
| # service named stop | その他検証してみて問題なければ停止 | |||
| # make install | make install 実行 | |||
| (出力内容は省略) | ||||
| # /usr/sbin/named -v | バージョン確認 | |||
| BIND 9.7.3-P3 | ||||
| # service named start | serviceコマンドで起動確認 | |||
| named を起動中: [ OK ] | ||||
| # ps -ef | grep named | プロセス確認 | |||
| named 9039 1 0 16:33 ? 00:00:00 /usr/sbin/named -u named -t /var/named/chroot | ||||
| # rndc status | rndcコマンドが使用できることを確認 | |||
| ■ OpenSSLに関する警告 | ||||
| ./configure時にOpenSSLのバージョンを確認する場合、opensslの暗号化ライブラリのいくつかに脆弱性があるので、指定のバージョン以上に | ||||
| アップデートするような以下の警告が出ることがある | ||||
| Your OpenSSL crypto library may be vulnerable to one or more of the the following known security | ||||
| [ 警告内容 ] | ||||
| $ ./configure --prefix=/usr --exec_prefix=/usr --localstatedir=/var --sysconfdir=/etc --enable-ipv6 --enable-threads --enable-chroot | ||||
| : | ||||
| WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING | ||||
| WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING | ||||
| WARNING WARNING | ||||
| WARNING Your OpenSSL crypto library may be vulnerable to WARNING | ||||
| WARNING one or more of the the following known security WARNING | ||||
| WARNING flaws: WARNING | ||||
| WARNING WARNING | ||||
| WARNING CAN-2002-0659, CAN-2006-4339, CVE-2006-2937 and WARNING | ||||
| WARNING CVE-2006-2940. WARNING | ||||
| WARNING WARNING | ||||
| WARNING It is recommended that you upgrade to OpenSSL WARNING | ||||
| WARNING version 0.9.8d/0.9.7l (or greater). WARNING | ||||
| WARNING WARNING | ||||
| WARNING You can disable this warning by specifying: WARNING | ||||
| WARNING WARNING | ||||
| WARNING --disable-openssl-version-check WARNING | ||||
| WARNING WARNING | ||||
| WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING | ||||
| WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING | ||||
| [ バージョンの確認方法 ] | ||||
| CentOSのパッケージ版OpenSSLのバージョンは、0.9.8eなので指定のバージョン以上だが・・ | ||||
| # yum list installed | grep openssl | パッケージ版のバージョン確認 | |||
| openssl.i686 0.9.8e-12.el5_5.7 installed | ||||
| $ openssl version | opensslにversionの引数をつけて確認した場合 | |||
| OpenSSL 0.9.8e-fips-rhel5 01 Jul 2008 | ||||
| [ 対応策 ] | ||||
| 既存のOpenSSLのライブラリに依存しているパッケージが多いので、今回の検証ではAを採用して実施している | ||||
| DNSSECを導入するなら、@をしたほうがよい | ||||
| @ OpenSSLをソースファイルからインストールして、パッケージで提供しているバージョン以上にアップデートする | ||||
| A ./configureを実行するときに、--disable-openssl-version-check オプションをつけてopensslのバージョンのチェックをしないようにする | ||||
| ■ 作業ディレクトリへの書き込みができない | ||||
| 起動に成功していても、下記のようなログが出力されていることがある | ||||
| Apr 13 11:34:20 notePC01 named[17578]: the working directory is not writable | ||||
| named.confのdirectoryで指定している作業ディレクトリに対して、namedユーザが書き込むことができないという意味である | ||||
| 起動スクリプトから起動した場合、以下のようにスクリプト内でroot:namedにディレクトリの所有権を書き換えてしまう設定があるため、 | ||||
| このディレクトリの所有権をnamedに変えても、起動スクリプトが書き換えてしまうので意味がない | ||||
| [ 起動スクリプト内の設定 ] | ||||
| # more /etc/init.d/named | ||||
| : | ||||
| /bin/chown -f --from=named:named root:named $ROOTDIR/var/named | ||||
| : | ||||
| [ 対応策 ] | ||||
| @とAが考えられるが、今回はAを採用した | ||||
| @ named.conf内のdirectoryで指定している作業ディレクトリを、/var/named以外にする | ||||
| A 所有権はroot:namedのままとし、namedグループに書き込み権限を与える | ||||
| # chmod g+w /var/named/chroot/var/named | ||||
| # ls -ld /var/named/chroot/var/named | ||||
| drwxrwx--- 5 root named 4096 4月 13 13:01 /var/named/chroot/var/named | ||||
| # rndc restart | namedを再起動してログが出ないことを確認 | |||