いますぐ実践! Linuxシステム管理

[バックナンバーのトップへ] [Linux システム管理のトップへ]


いますぐ実践! Linux システム管理 / Vol.126 / 読者数:1221名

こんばんは、うすだです。

わたくし、当メルマガとは別に、毎日栗の絵を描いています、 というだけのメルマガ「栗日記」を発行しています。
その「栗日記」が、このたび、まぐまぐ大賞2007 の、 アート・文芸部門にノミネートされてしまいました。

まぐまぐ大賞2007
http://www.mag2.com/events/mag2year/2007/
ノミネートされた「栗日記」
http://www.mag2.com/m/0000126454.html

読者数や知名度などは関係なく、誰かに推薦していただくとエントリされまして、 まぐまぐさんの一次審査にパスすると、めでたくノミネート、 ということになっているようです。

というわけで、場違い感たっぷりなのですが、もし万が一、「栗日記」をご存じで、 アート・文芸部門の他のメルマガよりもええやん、と思われたかたは、 一票を投じていただけますと感謝感激です。
(もちろん、他のメルマガのほうがいいと思われたなら、 そちらに一票を投じてくださいませ。)

まぐまぐさんからメールで連絡があったとき、 なにかの間違いかいたずらだと思いました。こういうのは、 1万名以上のメジャーなメルマガにしか関係ないものだと思っていましたので…。
ですので、ここ数日は、なんだか浮き足立ってしまっています。

しかし、神さまがくれたチャンスですので、精いっぱいの努力、 もしくは悪あがきをしてみたいと思います。うおりゃー!

…動揺していますが、そろそろ今週も、はりきってまままいりましょう。

今週のお題 - named を chroot して動かす

先週、chroot してなにかを動かす、というネタをご紹介しました。

Vol.125 - chroot してデーモンを動かす
http://www.usupi.org/sysad/125.html

ここでは、chroot コマンドを使って、chroot した環境の中で、 デーモンなどを動かせることを、確認しました。
しかし、ものによっては、自ら chroot システムコールを呼び出して動作するという、 賢いひともいらっしゃいます。

今週は、その代表的な存在である named を、chroot で動かしてみたいと思います。


今回のターゲットは、BIND(Berkeley Internat Name Domain)さんです。
ISC(Internet Systems Consortium)というところが開発されていて、 今や named といえば BIND と言っても過言ではないくらい、 一般的に普及しておられます。

Internet Systems Consortium, Inc.
http://www.isc.org/index.pl

ちなみに、以下によると、BIND は、あわせて 70% 近く使われています。

DNS SURVEY: OCTOBER 2007
http://dns.measurement-factory.com/surveys/200710.html

さて、サーバとして動かしていれば、 bind パッケージはインストール済だと思います。もし入っていなければ、 以下を参考に、インストールしてみてください。

  # yum install bind       (Fedora なひと)
  # apt-get install bind9  (Ubuntu なひと)
  # apt-get install bind   (Vine なひと)

他のディストリビューションは確認できていません。…すみません。


ディストリビューションによって、設定が微妙に異なります。
先の Fedora, Ubuntu あたりの方法を、ご紹介していきましょう。

おっと、その前に、chroot する先のディレクトリは、/usr/lib/named とします。 これが正しいというわけではありませんので、気に入らないかたは、 お好きなところに構築してください。


まずは、Fedora 系の設定方法を、以下に示します。(Vine も含みます。)

  1. /etc/sysconfig/named で、ROOTDIR を指定してください。
      ROOTDIR="/usr/lib/named"
    
    Vine の場合は、OPTIONS に -t /usr/lib/named を追加してください。
      OPTIONS="既存の設定 -t /usr/lib/named"
    
  2. /usr/lib/named 以下に、必要なものを作っていきます。
      # mkdir /usr/lib/named
      # mkdir -p /usr/lib/named/dev /usr/lib/named/etc \
      /usr/lib/named/var/named /usr/lib/named/var/run/named
    
    named は named ユーザの権限で動作しますが、 var/run/named に書き込めないといけませんので、named ユーザの所有物にします。
      # chown named.named /usr/lib/named/var/run/named
    
    また、dev/random が必要ですので、デバイスファイルを作成します。
      # mknod -m 666 /usr/lib/named/dev/random c 1 8
    
    そして、/etc や /var/named 以下にあるファイルをコピーします。
      # cp -p /etc/named.conf /etc/rndc.key /usr/lib/named/etc/
      # tar cf - -C /var named | tar xvfp - -C /usr/lib/named/var
    
  3. dev/log 経由で syslog に通知できるよう、syslogd の設定を変更します。 具体的には、/etc/sysconfig/syslog の SYSLOGD_OPTIONS に、 -a /usr/lib/named/dev/log を追加します。
      SYSLOGD_OPTIONS="既存の設定 -a /usr/lib/named/dev/log"
    
  4. 設定できましたので、syslogd および named を再起動します。
      # /etc/init.d/syslog restart
      # /etc/init.d/named restart
    

以上で動作するはずです…が、うまく動作しないときは、dev/log が存在するか、 /var/log/messages に何か出力されていないかなどを、確認してみてください。

また、SELinux が有効ですと、上記だけではだめかもしれません。
そんなときは、以下をお試しください。(Fedora7 では必要でした。)

  # chcon system_u:object_r:device_t /usr/lib/named/dev
  # chcon system_u:object_r:random_device_t \
  /usr/lib/named/dev/random
  # chcon system_u:object_r:named_var_run_t \
  /usr/lib/named/var/run/named

次に、Ubuntu の場合の設定方法を、以下に示します。

  1. /etc/default/bind9 の OPTIONS に、-t /usr/lib/named を追加してください。
      OPTIONS="既存の設定 -t /usr/lib/named"
    
  2. /usr/lib/named 以下に、必要なものを作っていきます。
      # mkdir /usr/lib/named
      # mkdir -p /usr/lib/named/dev /usr/lib/named/etc/bind \
      /usr/lib/named/var/run/bind/run /usr/lib/named/var/cache/bind
    
    Ubuntu では bind ユーザの権限で named が動作します。
    var/run/bind/run に書き込めるよう、以下の設定を行います。
      # chown root.bind /usr/lib/named/var/run/bind/run
      # chmod 775 /usr/lib/named/var/run/bind/run
    
    Fedora のときと同様、dev/random を作成します。
      # mknod -m 666 /usr/lib/named/dev/random c 1 8
    
    /etc/bind 以下のファイルをごっそりコピーします。
      # tar cf - -C /etc bind | tar xvfp - -C /usr/lib/named/etc
    
  3. やはり同様に、dev/log 経由で syslog にログを渡します。
    /etc/default/syslogd の SYSLOGD に、 -a /usr/lib/named/dev/log を追加してください。
      SYSLOGD="既存の設定 -a /usr/lib/named/dev/log"
    
  4. 設定できましたので、syslogd および named を再起動します。
      # /etc/init.d/sysklogd restart
      # /etc/init.d/bind9 start
    

うまく動作しないときは、Fedora のときと同じく、dev/log が存在するか、 /var/log/syslog に何か出力されていないか、確認してください。


以上、named を chroot で動かす方法を、ご紹介しました。

前回の場合は、chroot コマンドを動かすため、root の権限がどうしても必要でした。 しかし、named は自前で chroot したあと、非 root 権限で動作しますので、 やや安心ではないかと思います。

ちなみに、*BSD 系の場合の設定方法も、基本的には同じです。
/etc/rc.conf.local などに、named_flags や syslogd_flags を指定し、 chroot 環境をせっせと構築すれば、同様に動作します。

…ああ、すみません、スレーブサーバとして動作させる場合、 ファイルが書き込めないといけませんでした。…続きは宿題で。

宿題の答え

先週の宿題は、

  inetd/xinetd 経由で起動されるサービスも chroot できるかどうか、
  試してみましょう。

でした。

頃合のサービスがありませんでしたので、 でっちあげサービスで確認してみたいと思います。
でっちあげサービスとは、ただ単に日時を返すだけのものです。
(それって daytime? と思われたかたは、ちょっと、 このペンの先に注目してください…ピカー。)

…まあ、ようは、/bin/date を実行するだけです。
ここでは、/var/lib/tameshi-chroot 以下に、 /bin/date を起動するための環境を作成してみましょう。
…と思いましたが、作り方を書いていますと長〜くなりますので、 必要なファイルを以下に示します。

  /var/lib/tameshi-chroot/bin/date
  /var/lib/tameshi-chroot/lib/ld-linux.so.2
  /var/lib/tameshi-chroot/lib/libc.so.6
  /var/lib/tameshi-chroot/lib/libpthread.so.0
  /var/lib/tameshi-chroot/lib/librt.so.1
  /var/lib/tameshi-chroot/run

最後の run は、chroot して /bin/date を動かすためのスクリプトで、 中身は以下の通りです。

  #!/bin/sh
  TZ=JST-9
  export TZ
  /usr/sbin/chroot /var/lib/tameshi-chroot /bin/date

chroot の環境を作ったら、次に、inetd/xinetd の設定を行います。

まずは、使用するポートを、/etc/services に書きましょう。
以下は、ポート番号 12346 を、 tameshi-chroot という名前で使用できるようにするための設定です。 (名前もポート番号も、他とだぶらなければなんでも構いません。 以下を使わないなら、適時読み替えてください。)

  tameshi-chroot  12346/tcp

そして、inetd/xinetd に設定を行います。
xinetd の場合は、/etc/xinetd.d/tameshi-chroot というファイルを作成してください。 中身は以下の通りです。

  service tameshi-chroot
  {
      disable = no
      socket_type = stream
      wait = no
      user = root
      server = /var/lib/tameshi-chroot/run
  }

inetd の場合は、/etc/inetd.conf に以下を追加してください。

  tameshi-chroot stream tcp nowait root /var/lib/tameshi-chroot/run \
  run

そして、xinetd または inetd に、設定を再読み込みしてもらいます。

  # /etc/init.d/xinetd reload   (xinetd の場合)
  # /etc/init.d/inet reload     (inetd の場合)

以上で、設定はおしまいです。
ちゃんと動作するかどうか、telnet コマンドで確認してみましょう。

  % telnet localhost tameshi-chroot
  Trying 127.0.0.1...
  Connected to localhost.
  Escape character is '^]'.
  Fri Nov 30 23:01:20 JST 2007
  Connection closed by foreign host.

日時が返ってきましたので、問題ないですね。
だめでしたら、/var/log/message か syslog あたりを眺めましょう。
また、ちゃんと動作した暁には、ライブラリ等を rename するなどして、 動かなくなることを確認してもよいと思います。

inetd/xinetd に関しましては、以下を参考にしてもよいかもです。

Vol.006 - うそうそWWWサーバを作る
http://www.usupi.org/sysad/006.html

今週の宿題

今週の宿題は、

  スレーブサーバを chroot して動かしてください。

です。

スレーブサーバ(セカンダリサーバ)は、 ゾーン転送を用いてマスタサーバ(プライマリサーバ)から情報を入手し、 ファイルに記録します。
ということは、named が、 ファイルを保存するディレクトリに書き込める必要がありますよね。

あとがき

もんのすごく遅ればせながら〜ですが、Twitter を始めてみました。

世の中には、実際に行動するひとと、行動しないひとの2つに分かれると思います。 行動しなければ、そもそもチャンスは到来しない! と思いますので (でもなんのチャンスでしょうね?)、前者の仲間入りをすべく、登録などしてみました。

ありがたいことに、 Emacs 上で Twitter にアクセスするためのモードがありますので(twittering-mode)、 ときどき Emacs から更新しています。

しかし、だれともお友だちになっていませんので、 Twitter 本来の使い方ができていないように思います。また、 誰も見ていないのに更新しているのも、不毛な気がします。
…さみしいので、だ、だれか、お友だちになってください。
そして、Twitter の有効な使いかたを、教えてください。

Twitter: What are you doing?
http://twitter.com/

twittering-mode
http://hayamin.com/wiliki.cgi?twittering-mode

Twitter / kuriking (わたしのページです)
http://twitter.com/kuriking

 

ところで、もう12月になってしまったのですね。
年をとるごとに、時間の進みが加速している気がします。
このあいだから月2回ですが、今年はあと1回、発行できそうですね。
chroot で引っ張るのもどうかと思いますので、次回はまた別のネタを、 ご紹介したいと思います。

ご意見ご感想、叱咤激励、誤字脱字の指摘など、いつでも承りますので、 お気軽にメールしていただけますと幸いです。

 

今週も、ここまで読んでいただき、ありがとうございました。
それでは、次回は 12月16日 頃に、お会いしましょう!

 

「いますぐ実践! Linux システム管理」の解除は、以下からできます。
http://www.usupi.org/sysad/ (まぐまぐ ID:149633)

バックナンバーは、こちらにほぼ全部そろっています。
http://www.usupi.org/sysad/backno.html

「栗日記」−冬も栗を食べましょう。そして栗の絵を観ましょう。
http://www.usupi.org/kuri/ (まぐまぐ ID:126454)
http://usupi.seesaa.net/ (栗日記ブログ)


[バックナンバーのトップへ] [Linux システム管理のトップへ]

トップ

バックナンバー
    [日付順] [目的別]

プロフィール

▼ リンク

独学Linux
Linuxデスクトップ環境に関する情報が満載です。 メルマガもありますよ。
Server World
CentOS 6をサーバとしたときの設定例が、これでもかというくらいたくさん載っています。 CentOS以外のディストリビューション(Fedora, Ubuntu)も充実しています。
LINUXで自宅サーバーを構築・導入(Fedora9)
Fedora9のインストールの仕方から管理方法まで、詳しく載っています。 SearchManには情報がもりだくさんです。
マロンくん.NET
〜サーバ管理者への道〜
Linuxをサーバとして使用するための、いろいろな設定方法が載っています。 マロンくんもかわいいです。 なんといっても、マロンくんという名前がいいですね!!
日経Linux
今や数少なくなってしまったLinuxの雑誌。ニュースやガイドもあります。
Linux Square − @IT
@ITが提供する、Linux の情報が満載。 載っていない設定方法はないんじゃないでしょうか。
gihyo.jp…技術評論社
Linuxに限らず様々な技術情報が満載のサイト。 SoftwareDesign誌も、 ソフトウェア技術者は必見です。
SourceForge.JP Magazine
Linux に限らず、オープンソース関連の記事が網羅されています。
ITmediaエンタープライズ:Linux Tips 一覧
Tips というより FAQ 集でしょうか。わからないことがあれば覗きましょう。
IBM developerWorks : Linux
開発者向けですが、勉強になりますよ。
Yahoo!ニュース - Linux
Yahoo!のLinuxに関するニュース一覧です。
栗日記
システム管理とかと全然関係ありませんが、毎日栗の絵を描いています。
システム管理につかれちゃったとき、癒されたいときに、ご覧ください。:-)
WEB RANKING - PC関連
ランキングに参加してみました。押してやってください。

▼ 作ってみました

Add to Google

▼ せんでん




▼ 最近読んだ本

▼ 気に入ってる本