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

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


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

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

前回の最後に、月2回発行を宣言してから、初めての発行になります。
やはり、2週間の猶予があると、余裕があっていいですね。

…なんて思っていましたら、前週末に、また風邪を引いてしまいました。
月2回にしますと言っておいて、正解でした。(^ε^;
相変わらず、ギリギリでラッキーだということを、痛感しております。
(気が緩んで風邪を引いたのでは、とも考えられますが…。)

それはさておき、やはり、ネタを考えるのも、構成などを考えて動作確認を行うのも、 時間に余裕のある方が、なにかとうまくいくようです。
(あ、よく考えなくても、ものすごく当り前のことですね…。)

そのかいがあったのでしょうか、今回、自分では面白いと思えるネタを、 思いつくことができました。
(本来、思いつくものではないはずですが…ご容赦ください。)

まあ、こんな調子で、月2回発行を続けていきたいと思います。
これからも楽しくがんばっていきますので、よろしくお願いします。

…特にオチはありませんので、今週も、はりきってまいりましょう!

今週のお題 - chroot してデーモンを動かす

近年の仮想化技術の発展にともない、1台のマシン上で複数の OS を立ち上げ、 それぞれの仮想マシン上で別のサービスを動作させる、なんていうことが、 ごく普通にできるようになりました。

これにより、セキュリティの強化と管理のしやすさが両立できるように… なったかと言いますと、論理的には PC の数が増えていることになりますので、 一概にそうとは言えないように思います。
(バックアップや障害時の対応のしやすさなど、メリットがたくさんあるということは、 理解しているつもりです。)

もう少し、管理の手間を省きつつ、セキュリティを強化したいなあということで、 今週は、chroot を使って、 隔離された環境下でデーモンを動作させてみたいと思います。


その前にまず、chroot とはなんぞや? というところから始めたいと思います。
(ご存じのかたは、すっとばすか、アラを探してください。)

chroot とは、カレントプロセスのルートディレクトリを、 / 以外に設定してくれる機能です。

指定したディレクトリがルートディレクトリになりますので、 それより上のディレクトリを参照できなくなります。
ということは、/etc などにある大事なファイルに、 たとえ root の権限があっても参照できなくなります。
ということは、chroot してからデーモンを起動すると、 そのデーモンにセキュリティホールがあって侵入されても、 大事なファイルを参照したり改竄したりできない、ということになります。

先ほど、さらっと「機能です」とか言いましたが、実際には、 chroot を実行する同名のコマンドと、やはり同名のシステムコールがあります。

コマンドの方が例を示しやすいので、以降では、chroot コマンドを使用して、 いろいろ試してみたいと思います。


まずは、chroot を体験してみましょう。

ここでは、/bin/sh を chroot で動かしてみたいと思います。
ルートディレクトリに指定するディレクトリは、/tmp/chroot-sh とでもしておきます。 /tmp/chroot-sh の下に、必要最低限なものを揃えます。

  # cd /tmp
  # mkdir chroot-sh

なにはともあれ必要なのは、/bin/sh そのものです。
以下のように、/bin/sh をコピーしましょう。

  # mkdir chroot-sh/bin
  # cp -p /bin/sh chroot-sh/bin/

また、/bin/sh はたいていダイナミックリンクされていますので、 必要なライブラリを、ldd コマンドで確認します。

  # ldd /bin/sh
          linux-gate.so.1 =>  (0xffffe000)
          libtermcap.so.2 => /lib/libtermcap.so.2 (0xb7f6d000)
          libdl.so.2 => /lib/libdl.so.2 (0xb7f68000)
          libc.so.6 => /lib/i686/libc.so.6 (0xb7e46000)
          /lib/ld-linux.so.2 (0xb7f82000)

libtermcap.so.2, libdl.so.2, libc.so.6 および ld-linux.so.2 が必要ですので、 これらをコピーします。

  # mkdir chroot-sh/lib
  # cp -p /lib/libtermcap.so.2 /lib/libdl.so.2 /lib/i686/libc.so.6 \
  /lib/ld-linux.so.2 chroot-sh/lib

最低限のものが用意できましたので、実行してみましょう。
chroot コマンドを実行するには、root の権限が必要です。 su コマンドで権限を得たり、sudo コマンド経由で実行するなどしてください。
以下のように、第1引数にルートにしたいディレクトリを、 第2引数に実行するコマンドを指定します。

  # chroot /tmp/chroot-sh /bin/sh
  sh-2.05# 

上記のように、シェルのプロンプトが出力されれば、成功です。
ただ、/bin/sh しかありませんので、

  sh-2.05# ls
  sh: /bin/ls: No such file or directory

なにかコマンドを実行しようとしても、ないよと言われてしまいます。
ここはひとつ、シェルの組込みコマンドで我慢しておきましょう。

  sh-2.05# echo *
  bin lib
  sh-2.05# echo lib/*
  lib/ld-linux.so.2 lib/libc.so.6 lib/libdl.so.2 lib/libtermcap.so.2

もういいと思われたら、exit してください。もとのシェルに戻ります。

  sh-2.05# exit
  exit
  #

ちなみに、必要なライブラリがないと、以下のように文句を言われ、 実行できません。

  # mv chroot-sh/lib/libc.so.6 chroot-sh/lib/libc.so.6-
  # chroot /tmp/chroot-sh /bin/sh
  /bin/sh: error while loading shared libraries: libc.so.6: cannot \
  open shared object file: No such file or directory

chroot してなにかを動かす方法が、それとなくわかりました。
それではいよいよ、なにかデーモンさんを動かしてみましょう。

とはいえ、たとえば Apache なんかですと、 必要なライブラリやファイルなどが大量にありますので、 簡単にご紹介することができません。

いろいろ探した結果、dhcpd が簡単に実現できますので、 異論のある貴兄もいらっしゃるとは思いますが、 dhcpd を動かしてみたいと思います。
(dhcpd は root の権限で動作しますので、chroot して動かしておけば、 万が一侵入されたとしても、なにかと安心です。よね。ね。)

まずは、先ほどと同様、dhcpd を動作させるのに必要な、 実行ファイルとライブラリを一通りそろえます。
(/tmp/chroot-dhcpd を chroot 先のディレクトリにしています。)

  # cd /tmp
  # mkdir -p chroot-dhcpd/sbin chroot-dhcpd/lib
  # cp -p `which dhcpd` chroot-dhcpd/sbin
  # ldd `which dhcpd`
          linux-gate.so.1 =>  (0xffffe000)
          libc.so.6 => /lib/i686/libc.so.6 (0xb7e62000)
          /lib/ld-linux.so.2 (0xb7f95000)
  # cp -p /lib/i686/libc.so.6 /lib/ld-linux.so.2 chroot-dhcpd/lib

これだけでいいかと言いますと、実は、dhcpd を動かすには、 上記の他に以下のファイルを必要とします。

  /etc/dhcpd.conf
  /var/lib/dhcp/dhcpd.leases

ですので、これらをコピーします。

  # tar cf - -C / etc/dhcpd.conf var/lib/dhcp/dhcpd.leases | \
  tar xvfp - -C chroot-dhcpd

これで、準備が整いました。では、実行してみましょう。

  # chroot /tmp/chroot-dhcpd /sbin/dhcpd

特に文句を言われていなければ、動作しているはずです。
他の PC などからアドレスを取得してみるなど、確認してみてください。


以上、chroot を用いて、 限られた環境下でデーモンを動作させる方法をご紹介しました。

デーモンを動作させるには、必要なファイルを洗い出す必要があります。
これが結構大変だったりしますが、たとえば、 そのパッケージの一覧から推測することは可能だと思います。
あとは、地道に試行錯誤を繰り返してくださいませ。

また、動作させたいものが /proc や /sys 等を使用する場合、 そのままではうまくいきません。
どうしても使いたいなら、 chroot 先のディレクトリに procfs や sysfs を mount するしかないように思います。

それから、/etc 以下などのファイルを見せなくすることはできますが、 たとえばネットワークには制限がかかりませんので、 踏台として使われるリスクは変わりません。 chroot によって守られる箇所とそうでない箇所を把握した上で、お使いください。

さて、最後に、ここまで引っ張っておいてたいへん申し訳ありませんが、 chroot にはアナがありまして、もう一度 chroot することで、 指定したルートディレクトリより上に行けてしまうようです。
ただ、簡単にできてしまうというわけではありませんし、 将来改善される可能性もありますので、chroot を用いて保護するという考え方自体は、 個人的にはよいのではないかと思っております。

宿題の答え

先週の宿題は、

  dump/restore の代わりに、tar を使って、フルバックアップと復元を
  試みてください。

でした。

というわけで、実際にやってみました。

前回の手順のうち、dump コマンドと restore コマンドを実行するところを、 tar コマンドに差し替えて試しました。
ですので、全部の手順ではなく、差し替えた部分だけを、ご紹介します。

まず、バックアップですが、前回では、以下のように、 dump コマンドを実行していました。
(/mnt に NFS マウントしていますので、ファイルは NFS サーバ側に作成されています。以降も同様です。)

  # dump -0u -f /mnt/ubuntu.dump /

この部分を、tar コマンドの実行に置き換えます。

  # tar cfz /mnt/ubuntu.tgz bin boot cdrom dev etc home initrd* \
  lib media opt root sbin srv usr var vmlinuz

/mnt, /proc および /sys を対象から外すため、 それ以外のディレクトリをすべて指定しています。
これらはマウントポイントで、実際は単体のディレクトリですので、 後で手動で作成することにします。

そして、バックアップを復元する際に、前回では、 以下のように restore コマンドを実行していました。

  # restore -r -f /media/nfs/ubuntu.dump

これを、tar コマンドの実行に置き換えます。
(/mnt, /proc および /sys も、忘れずに作成します。)

  # tar xfz /media/nfs/ubuntu.tgz
  # mkdir mnt proc sys

その後、同様に GRUB の設定を行うことで、無事 Ubuntu が立ち上がるのかと言いますと…

…問題なく、普通に立ち上がりました。

厳密には、/var/lock, /var/run や /dev 以下など、 実際には tmpfs として使用されるところもバックアップ・復元しているため、 冗長になっていますが、tar でもそれなりになんとかなりました。

前回の手順につきましては、以下をご参照ください。

Vol.124 - 正統派なバックアップを行う / 王の帰還
http://www.usupi.org/sysad/124.html

ちなみに、 telinit 1 でシングルユーザモードに移行してバックアップを行っていますが、 recovery mode で立ち上げるという方法もアリだと思います。

今週の宿題

今週の宿題は、

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

です。

原理的にはできるはずですが、既存のサービスでこれっていうものがありませんので、 簡単なサービスを作成して、それを chroot で起動できないか、 試行錯誤してみたいと思います。

あとがき

以前にも書きましたが、わたしは成功マニアです。(あるいは、でした。)

数年前までは、世間でそれなりに話題になっている成功本があると、つい購入して、 読んで、高揚して、よーしやるぞと決意して、数日で断念するかやらない、 という失敗スパイラルを繰り返しました。

ですから、まあ、さすがに、もう、ここのところは、話題の成功本を見ても、 心ときめくことなく、購入することもなく、スルーしておりました。

しかし、以下の本が話題になったとき、またしても、 わたしの中の何かが反応してしまい、ブックオフで見つけた瞬間に購入していました。

夢をかなえるゾウ
http://www.amazon.co.jp/exec/obidos/ASIN/4870318059/usupiorg06-22

評判の内容はさまざまですが、主に、 「笑える」「今までの成功本を網羅している」「理想の成功本」 という声が多いように思われます。
(成功本、のところは、自己啓発とか成功法則に置き換えてください。)

実際読んでみますと、まず「笑える」という時点で、 今までの成功本とは違うと言っても過言ではないと思います。面白いです。

しかし、注目すべき点は、各章にある「今日の課題」だと思います。
普通の成功本ですと、 「目標を紙に書くとかなう」とか「寄付をしよう」などと書かれているのですが、 「今日の課題」はもっと具体的です。
「コンビニでお釣りを募金する」とか「その日がんばれた自分をホメる」など、 やろうと思えばすぐできそうなことが、書かれています。

というわけで、一気に読んでしまうのがもったいないので、 1日に1章ずつ読んでいます。
肝心の課題は…えーと、簡単なはずなのに、ときどきしか実行していないですね。 またしても、成功から遠ざかっているようです…。

ロウソクの火がまだ小さくなっていない方は、是非読んでみてください。

あ、著者のサイトも面白いです。
日によっては、上品でないこともありますが、おおお鋭い! と思うことがよくあります。普通の道を歩んでいないひとは、なにかが違いますね。

ウケる日記
http://www.mizunokeiya.com/

 

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

 

「いますぐ実践! 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 5 をサーバとしたときの設定例が、これでもかというくらいたくさん載っています。 CentOS以外のディストリビューションや、Solaris10の例も充実しています。
LINUXで自宅サーバーを構築・導入(Fedora8)
Fedora8のインストールの仕方から管理方法まで、詳しく載っています。 SearchManには情報がもりだくさんです。
マロンくん.NET
〜サーバ管理者への道〜
Linuxをサーバとして使用するための、いろいろな設定方法が載っています。 マロンくんもかわいいです。 なんといっても、マロンくんという名前がいいですね!!
日本の Linux 情報
日本の、Linux 総本山的なところです。
Linux Square − @IT
@ITが提供する、Linux の情報が満載。 載っていない設定方法はないんじゃないでしょうか。
Open Tech Press
Linux に限らず、オープンソース関連の記事が網羅されています。
ITmediaエンタープライズ:Linux Tips 一覧
Tips というより FAQ 集でしょうか。わからないことがあれば覗きましょう。
IBM developerWorks : Linux
開発者向けですが、勉強になりますよ。
Yahoo!ニュース - Linux
Yahoo!のLinuxに関するニュース一覧です。
栗日記
システム管理とかと全然関係ありませんが、毎日栗の絵を描いています。
システム管理につかれちゃったとき、癒されたいときに、ご覧ください。:-)
WEB RANKING - PC関連
ランキングに参加してみました。押してやってください。

▼ 作ってみました

Add to Google

▼ せんでん





▼ 最近読んだ本

ハリー・ポッターと不死鳥の騎士団 ハリー・ポッターと不死鳥の騎士団
J.K.Rowling
  ハリポ月刊なので読み直してます
ハリー・ポッターと炎のゴブレット ハリー・ポッターと炎のゴブレット
J.K.Rowling
  ハリポ月刊なので読み直してます
ハリー・ポッターとアズカバンの囚人 ハリー・ポッターとアズカバンの囚人
J.K.Rowling
  ハリポ月刊なので読み直してます
ハリー・ポッターと秘密の部屋 ハリー・ポッターと秘密の部屋
J.K.Rowling
  ハリポ月刊なので読み直してます
ハリー・ポッターと賢者の石 ハリー・ポッターと賢者の石
J.K.Rowling
  ハリポ月刊なので読み直してます
アルケミスト アルケミスト
パウロ・コエーリョ
  また読んだ
賢者の書 賢者の書
喜多川 泰
  違った視点から見られてよかった
セキュリティウォリア セキュリティウォリア
Cyrus Peikari, Anton Chuvakin
  やや冗長…ためにはなりました
CORE MEMORY CORE MEMORY
John Alderman, Mark Richards
  この筐体でPC作ってほしい!
新訳 星の王子さま 新訳 星の王子さま
サン=テグジュベリ
倉橋 由美子
  つまらない大人になったのか…
.....

[X]
「センネン画報」 今日 マチ子
「粟津潔 デザインする言葉」 粟津潔
「Binary Hacks」 高林 哲,鵜飼 文敏,佐藤 祐介,浜地 慎一郎,首藤 一幸
「Make: Volume01」 オライリー・ジャパン
「セーラが町にやってきた」 清野 由実
「手紙屋」 喜多川 泰
「Linuxカーネル2.6解読室」 高橋 浩和,小田 逸郎,山幡 為佐久
「人蕩し術」 無能 唱元
「子育てハッピーアドバイス2」 明橋 大二, 太田 知子
「ラッセル幸福論」 B. Russell
「それでも人生にイエスと言う」 Viktor Emil Frankl
「子育てハッピーアドバイス」 明橋 大二, 太田 知子
「考具」 加藤 昌治
「北欧デザイン<3>」 渡部 千春
「北斎の謎を解く」 諏訪 春雄
「体感美術館」 平野 暁臣
「チベット永遠の書」 Theodore Illion
「リナックスの革命」 Pekka Himanen
「人月の神話」 Frederick Phillips,Jr. Brooks
「ヤバい経済学」 Steven D. Levitt, Stephen J. Dubner
「小布施ッション<2001-2002>」 セーラ・マリ カミングス
「アンパンマン伝説」 やなせ たかし
「夢をかなえるゾウ」 水野 敬也
「ゲーム開発者のためのAI入門」 David M. Bourg, Glenn Seemann
「北欧デザイン<2>」 渡部 千春
「北欧デザイン<1>」 渡部 千春
「ヒューマン2.0」 渡辺 千賀
「中国・ロシア同盟がアメリカを滅ぼす日」 北野 幸伯
「超ロング・セラー 絶滅寸前商品」 湯浅 豊彦
「The BUG(ザ・バグ)」 すずき ひろのぶ,かとう みつあき
「デザインのデザイン」 原 研哉
「マキアヴェッリ語録」 塩野 七生
「ハンバーガーを待つ3分間の値段」 斎藤 由多加
「星の旅人-スペイン「奥の細道」-」 黛 まどか
「食品の裏側」 安部 司
「On Lisp」 Paul Graham
「ぼくが医者をやめた理由 つづき」 永井 明
「あなたならどうする?」 Jack Nikolaschka
「セキュアプログラミング−失敗から学ぶ設計・実装・運用・管理」
      Mark G. Graff, Kenneth R. van Wyk
「「左利き」は天才?−利き手をめぐる脳と進化の謎
      David Wolman
「自分の中に毒を持て」 岡本 太郎
「アトピーの薬を減らす本」 田中 貴子
「岡本太郎「明日の神話」修復960日間の記録」 吉村 絵美留
「X51.ORG THE ODYSSEY」 佐藤 健寿
「アレルギーっ子の暮らし応援BOOK」 佐藤 のり子
「沖縄文化論」 岡本 太郎
「「伝説の社員」になれ!」 土井 英司
「コンピュータの構成と設計(上)」 Patterson & Hennessy
「カラスのジョンソン」 明川 哲也
「ドリルを売るには穴を売れ」 佐藤 義典
「頭がよくなる照明術」 結城 未来
「クロフォードのインタラクティブデザイン論」 Chris Crawford
「いじめの根を絶ち子どもを守るガイド」 Barbara Coloroso
「非常識のすすめ―逆発想の仏教論」 ひろさちや
「Linuxアドバンストネットワーク構築ガイド - HAサーバ構築編」
      デージーネット
「イノベーションの達人!」 Tom Kelly, Jonathan Littman
「クリエーター50人が語る創造の原点」 小原 啓渡
「欺術 - 史上最強のハッカーが明かす禁断の技法」 Kevin Mitnick
「楽しい気象観察図鑑」 武田 康男
「入門 Ajax」 高橋 登史朗
「リリカルな自画像」 岡本 太郎
「やぎの目ゴールデンベスト」 林 雄司
「初めてのPython 第2版」 Mark Lutz,David Ascher
「鼻兎」 小林 賢太郎
「なぜ、これがアートなの?」 Amelia Arenas
「芸術起業論」 村上 隆
「まほう色の瞳」 Enrique Barrios
「ラーメンズつくるひとデコ」 ラーメンズ
「R25 つきぬけた男たち」 R25編集部
「美の呪力」 岡本 太郎
「しろのあお」 上大岡 トメ
「ザ・ゴール」 Eliyahu M. Goldratt
「ハッカーと画家」 Paul Graham
「岡本太郎に乾杯」 岡本 敏子
「Fedore Core Expert」 Software Design
「誰も知らない男」 ブルース・バートン
「子どもが育つ魔法の言葉」 ドロシー・ロー・ノルト
「国家の罠」 佐藤 優
「夜回り先生」 水谷 修
「やぎの目絵日記」 林 雄司
「7つの習慣」 スティーブン・R. コヴィー
「まろ、ん?−大掴源氏物語」 小泉 吉宏
「ザ・サーチ グーグルが世界を変えた」 ジョン・バッテル
「ポストモダン・マーケティング」 スティーブン ブラウン
「機動戦士ガンダムさん」 大和田 秀樹
「小エロのひみつ - Webやぎの目研究発表」 林 雄司
「これ、誰がデザインしたの?」 渡部千春
「60分間・企業ダントツ化プロジェクト」 神田 昌典
「ガルシアへの手紙」 エルバート ハバード
「人生は素晴らしいものだ」 オグ・マンディーノ
「ザ・マインドマップ」 トニー・ブザン,バリー・ブザン
「ワインバーグのシステム思考法」 G.M.ワインバーグ
「渋谷ではたらく社長の告白」 藤田 晋
「渋井真帆の日経新聞読みこなし隊」 渋井 真帆
「コラム息切れ」 小野 法師丸
「早朝起業」 松山 真之介
「変な人が書いた驚くほどツイてる話」 斎藤 一人
「35歳から仕事で大切にしたいこと」 村井 勉
「金融広告を読め」 吉本 佳生
「発想する会社!」 トム・ケリー,ジョナサン・リットマン
「エハイク」 吉田 戦車
「人生の旋律」 神田 昌典
「仕事の思想」 田坂 広志
「CPUの創りかた」 渡波 郁
「非常識な成功法則」 神田 昌典
…これ以前は記録してません…

▼ 気に入ってる本

夢をかなえるゾウ 夢をかなえるゾウ
水野 敬也
  いままでで最高の「笑える」成功本
Linuxデバイスドライバ Linuxデバイスドライバ
Alessandro Rubini,
Jonathan Corbet
  ドライバ作らなくてもためになる
Firefoxの改造テクニック! Firefoxの改造テクニック!
大浦 淳
  いま栗日記拡張を考えてます
Apacheモジュール プログラミングガイド Apacheモジュール プログラミングガイド
小山 浩之
  Apacheの中身もわかるよ
図解 実戦マーケティング戦略 図解 実戦マーケティング戦略
佐藤 義典
  栗日記も戦略的に行こう!
やぎの目ゴールデンベスト やぎの目ゴールデンベスト
林 雄司
  よめも爆笑してました
アルケミスト アルケミスト
パウロ・コエーリョ
  ヘコみそうなとき読みます
X51.ORG THE ODYSSEY X51.ORG THE ODYSSEY
佐藤 健寿
  X51.ORGの集大成
チベット永遠の書 チベット永遠の書
Theodore Illion
  いろんな意味ですごい!!
影響力の武器 影響力の武器
ロバート・B・チャルディーニ
  思わず納得します