〜 技術解説からカーネルカスタマイズまで 〜
宮本 久仁男<miyamotokn@nttdata.co.jp>
NTTデータ システム開発事業本部
基盤システム事業部 第一ソリューション技術担当
2002/5/25
非標準カーネルモジュール/パッチの組み込み
ここまでで、「取りあえず動かす」ことはできたと思います。Host OSに与える危険度も少なく、仮想OS環境としてはまずまずのものでしょう。しかし、これだけでは面白くない、という方もいらっしゃると思います。そこで、ここではUMLに対するカーネルモジュールの組み込みとして、
- UMLに対するFreeS/WAN環境の組み込みと動作
- USAGIカーネルの構築と動作(編注)
について簡単に述べます。なお、筆者はFreeS/WANの組み込みやUSAGIカーネルの構築作業をroot権限で行いましたが、ソースコードを展開するディレクトリのパーミッションを適切に設定していればrootでなくても作業は可能です。
編注:USAGIとは、LinuxにおけるIPv6の実装。詳しくは、USAGI
Projectのサイトを参照。 USAGI Project:http://www.linux-ipv6.org/ |
■FreeS/WANの組み込みと動作
1.カーネルソースコードの展開
今回は、kernel 2.4.18を使用しました。/usr/src配下にカーネルソースコードを展開します。
2.FreeS/WANのソースコードの展開
今回は、FreeS/WAN 1.97を使用しました。これもまた、/usr/src配下にソースコードを展開します。
3.UMLパッチの適用
/usr/src配下に展開されたLinuxカーネルのソースに対してUMLのパッチを適用します。
4.FreeS/WANパッチの適用
FreeS/WAN対応カーネルの作成は、いくつかのフェイズに分けられます。FreeS/WANを展開したディレクトリ(例では/usr/src/freeswan-1.97)に移動し、以下のコマンドラインを順次実行します。
# make precheck |
ここまでのコマンド実行で、カーネルに対するFreeS/WANパッチが適用された状態になります。
5.カーネルのmake
/usr/src/linuxにカレントディレクトリを移動(cd /usr/src/linux)し、
# make menuconfig ARCH=um |
として、UMLのコンフィグレーションを実施します(画面2)。
画面2 FreeS/WANの設定画面 |
その後、
# make dep ARCH=um; make linux ARCH=um |
として、UMLのモジュールをコンパイルします。うまくコンパイルできていれば、/usr/src/linux配下に「linux」という実行ファイルが生成されています。
6.注意
UML自体は、シングルプロセッサ対応のカーネルとして作成する必要があります(画面3)。筆者は、これを知らずにSMP対応のカーネルを作ろうとしてハマりました。
画面3 「Symmetric multi-processing support」のチェックはオフにすること |
7.ブートとメッセージ確認
さて、ブートしてみましょう。ブート時のメッセージをGuest OS上のdmesgコマンドで確認してみてください。筆者の場合の例をリスト4に示します。ファイルシステムイメージは、最初にダウンロードしたものを試しに使ってみました。
例にKLIPSのメッセージが出てきていますが、これが確認できればIPSecの環境は組み込まれています。なお、IPSecの制御コマンド類は3の手順が終了した後の状態で、
# make programs |
とすれば、/usr/local/lib/ipsec配下や/usr/local/sbin配下にインストールされるので、hostfs機能を利用するなどしてGuest OS環境に転送してください。
編注:FreeS/WANについては、FreeS/WANによるIPSecの導入と運用で詳しく解説している。 |
■USAGI UMLカーネルの構築
1.ソースコードの展開
この部分はFreeS/WANの場合と同様です。
2.USAGIパッチの適用
ftp://ftp.linux-ipv6.org/pub/usagi/snap/split/からカーネルパッチを取得し、適用します。
今回は、usagi-linux24-s20020429-2.4.18.diff.bz2というパッチファイルを用いました。カーネルソースを展開したディレクトリ(例:/usr/src/linux)にcdし、
# bzip2 -dc usagi-linux24-s20020429-2.4.18.diff.bz2 | patch
-p1 |
とすることでパッチが適用されます。
3.UMLパッチの適用
カーネルソースを展開したディレクトリに移動し、
# bzip2 -dc uml-patch-2.4.18-22.bz2 | patch -p1 |
としてカーネルソースにパッチを適用します。以下のように、一部のドキュメント類では「offset x lines」のようなメッセージが出ますが、特に問題はありません。
patching file Documentation/Configure.help |
4.make
# make menuconfig ARCH=um |
とすることで、カーネルコンフィグレーションを行います。ただし、IPv6関係のうち、IPSecはこの段階では設定できない(注)ので、チェックを外しておきます(画面4)。
注:設定すると、途中で不足するシンボルが発生してUMLカーネルが作成できませんでした。 |
画面4 「IPv6: IP Security Support (EXPERIMENTAL)」はオフに |
コンフィグレーションが終了したら、
# make dep ARCH=um ; make linux ARCH=um |
としてUMLのモジュールをコンパイルします。
5.ブートとメッセージ確認
筆者の環境でのブート時のメッセージをリスト5に示します。コマンド類は、別途コンパイルしてhostfs機能などを使ってGuest OS環境に転送します。
6.忘れてはいけないセキュリティ
UML自体はかなり便利なものであり、見る限りハニーポットにも使えそうな印象を受けます。しかし、ハニーポットに使うにせよ、Guest OSを使用して不特定多数にサービスを提供するにせよ、セキュリティ面には気を使わなくてはいけません。
今回使った範囲で、真っ先に気を付けなければならないと感じたのは、Host OSのセキュリティとhostfsの扱いでしょう。Host OSのセキュリティは固めるしかありません。hostfsについては、いろいろ考えようがあるとは思いますが、一番手っ取り早いのはjailのように個別の環境を割り当ててしまうことでしょう。それができない場合は、最低限各Guest OSやHost OS上のほかのユーザーのファイルを保護する観点からも、個々のGuest OSは独立したユーザー権限(注)で稼働させるなどすべきです。
注:Guest OS 1はユーザーuser1の権限、Guest OS 2はユーザーuser2の権限で動作させるようなイメージです。 |
いずれにしても、偶然のhostfsマウントを避ける意味からも、第三者が使用するGuest OSには、hostfsドライバを組み込まない方がよいでしょう。
また、Guest OSで外向けサービスを提供し、Host OSはGuest OSの制御に徹する場合、Guest OSにはグローバルIPアドレス(もしくはそれに準ずるアドレス)を付与し、Host OSには内部で必要な管理用IPアドレスを付与しておいて、Host OSへの接続はGuest OSからのみ可能にしておくという運用も考えられます。
なお、ここで挙げたUMLに関するセキュリティについては、筆者がUMLに触った範囲で気付いたものにすぎません。このほかにもいろいろ気を付けるべき事項があると思います。皆さんの運用に合わせて注意点の洗い出しを心掛けてください。
4/5
|
|
||||||||||
|
Linux Square全記事インデックス |
Linux Squareフォーラム Linuxカーネル関連記事 |
連載:Linux Kernel Watch(連載中) Linuxカーネル開発の現場ではさまざまな提案や議論が交わされています。その中からいくつかのトピックをピックアップしてお伝えします |
|
連載:Linuxファイルシステム技術解説 ファイルシステムにはそれぞれ特性がある。本連載では、基礎技術から各ファイルシステムの特徴、パフォーマンスを検証する |
|
特集:全貌を現したLinuxカーネル2.6[第1章] エンタープライズ向けに刷新されたカーネル・コア ついに全貌が明らかになったカーネル2.6。6月に正式リリースされる予定の次期安定版カーネルの改良点や新機能を詳しく解説する |
|
特集:/procによるLinuxチューニング[前編] /procで理解するOSの状態 Linuxの状態確認や挙動の変更で重要なのが/procファイルシステムである。/procの概念や/procを利用したOSの状態確認方法を解説する |
|
特集:仮想OS「User
Mode Linux」活用法 Linux上で仮想的なLinuxを動かすUMLの仕組みからインストール/管理方法やIPv6などに対応させるカーネル構築までを徹底解説 |
|
Linuxのカーネルメンテナは柔軟なシステム カーネルメンテナが語るコミュニティとIA-64 Linux IA-64 LinuxのカーネルメンテナであるBjorn Helgaas氏。同氏にLinuxカーネルの開発体制などについて伺った |
|
|
- 【 pidof 】コマンド――コマンド名からプロセスIDを探す (2017/7/27)
本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、コマンド名からプロセスIDを探す「pidof」コマンドです。 - Linuxの「ジョブコントロール」をマスターしよう (2017/7/21)
今回は、コマンドライン環境でのジョブコントロールを試してみましょう。X環境を持たないサーバ管理やリモート接続時に役立つ操作です - 【 pidstat 】コマンド――プロセスのリソース使用量を表示する (2017/7/21)
本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、プロセスごとのCPUの使用率やI/Oデバイスの使用状況を表示する「pidstat」コマンドです。 - 【 iostat 】コマンド――I/Oデバイスの使用状況を表示する (2017/7/20)
本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、I/Oデバイスの使用状況を表示する「iostat」コマンドです。
|
|