ステータス:非推奨

この記事では、サポートされなくなったバージョンのUbuntuについて説明します。 現在Ubuntu12.04を実行しているサーバーを運用している場合は、サポートされているバージョンのUbuntuにアップグレードまたは移行することを強くお勧めします。

理由:
Ubuntu 12.04は2017年4月28日に保守終了(EOL)に達しました and no longer receives security patches or updates. This guide is no longer maintained.

代わりに参照してください:このガイドは参照として役立つ場合がありますが、他のUbuntuリリースでは機能しない場合があります。 可能な場合は、使用しているUbuntuのバージョン用に作成されたガイドを使用することを強くお勧めします。 ページ上部の検索機能を使用して、より新しいバージョンを見つけることができます。

序章

Linuxシステム内の特定のアプリケーション、ユーザー、または環境を分離したい場合が多くあります。 オペレーティングシステムが異なれば、分離を実現する方法も異なります。Linuxでは、古典的な方法はchroot環境を使用することです。

このガイドでは、通常のオペレーティングシステムと含まれている環境の間にバリアを作成するために、chrootを使用して分離された環境をセットアップする方法について説明します。 これは主にテスト目的で役立ちます。 このテクノロジーを利用したい場合と、別のソリューションを使用する方がよい場合について説明します。 これらの手順については、Ubuntu 12.04x86_64VPSインスタンスで説明します。

ほとんどのシステム管理者は、すばやく簡単なchroot環境を実現する方法を知っていることで恩恵を受けることができ、それは貴重なスキルです。

Chroot環境とは何ですか?

chroot環境は、ルートの場所を一時的に新しいフォルダーに変更するオペレーティングシステムコールです。 通常、オペレーティングシステムのルートディレクトリの概念は、「/」にある実際のルートです。 ただし、chrootを使用すると、chrootの期間中、最上位ディレクトリとして機能する別のディレクトリを指定できます。

chroot内から実行されるアプリケーションは、原則として残りのオペレーティングシステムを表示できません。 同様に、chroot環境に限定されているroot以外のユーザーは、ディレクトリ階層をさらに上に移動することはできません。

Chroot環境を使用する場合

これは、さまざまな状況で役立ちます。 たとえば、通常のオペレーティングシステムとは別の環境でソフトウェアをビルド、インストール、およびテストできます。 また、64ビット環境で32ビットアプリケーションを実行する方法としても使用できます。

一般に、chrootは、ファイルシステムのサブセットからオペレーティングシステム環境を一時的に再作成する方法と考える必要があります。 これは、通常のユーティリティを実験的なバージョンに切り替えることを意味し、汚染されていない環境でアプリケーションがどのように動作するかを確認できます。また、リカバリ操作、システムのブートストラップ、または攻撃者になる可能性があります。

Chroot環境を使用しない場合

Linuxのchroot環境は、セキュリティ機能として単独で使用しないでください。 それらはバリアとして使用できますが、攻撃者をより大きなシステムから遠ざけるための正当なガードとして機能するほど十分に分離されていません。 これは、chrootが実行される方法と、プロセスと人が環境から抜け出す方法によるものです。

chroot環境は確かに特権のないユーザーのために追加の作業を行いますが、セキュリティ機能ではなく強化機能と見なす必要があります。つまり、完全なソリューションを作成するのではなく、攻撃ベクトルの数を減らしようとします。 完全な分離が必要な場合は、Linuxコンテナー、Docker、vserverなどのより完全なソリューションを検討してください。

ツールの設定

chroot環境を最大限に活用するために、いくつかの基本的な配布ファイルを新しい環境にインストールするのに役立ついくつかのツールを使用します。 これにより、プロセスが迅速になり、ライブラリと基本的な基本パッケージを確実に利用できるようになります。

dchrootまたはschrootと呼ばれる1つのツールを使用して、さまざまなchroot環境を管理します。 これは、chroot環境内でコマンドを簡単に実行するために使用できます。 dchrootコマンドはレガシーコマンドであり、現時点では、ほとんどのシステムで最新のバリアントであるschrootの互換性ラッパーとして実際に実装されています。

もう1つのツールはdebootstrapと呼ばれ、別のシステムのサブディレクトリ内にベースオペレーティングシステムを作成します。 これにより、chroot環境が適切に機能するために環境内に特定のツールとライブラリが必要になるため、すぐに作業を開始して実行できます。

これら2つのパッケージをインストールしましょう。 dchrootをインストールします。これは、実際にschrootを取り込み、次のいずれかを柔軟に使用できるようにするためです。

sudo apt-get update
sudo apt-get install dchroot debootstrap

適切なツールが揃ったので、環境ルートとして使用するディレクトリを指定するだけです。 ルートディレクトリにtestというディレクトリを作成します。

sudo mkdir /test

前に述べたように、最近のシステムのdchrootコマンドは、実際には、より高性能なschrootコマンドのラッパーとして実装されています。 このため、schroot構成ファイルを私たちの情報で変更します。

管理者権限でファイルを開きましょう。

sudo nano /etc/schroot/schroot.conf

内部では、作成するシステムに一致する構成オプションを作成する必要があります。 Ubuntuシステムの場合、バージョンなどを指定する必要があります。 Debianシステムにはよくコメントされた値があり(schrootはもともとDebianから来ています)、それはあなたに良い考えを与えるはずです。

現在Ubuntu12.04システムを使用していますが、Ubuntu13.10で利用可能なコード「SaucySalamander」をテストしたいとします。 これを行うには、次のようなエントリを作成します。

[saucy]
description=Ubuntu Saucy
location=/test
priority=3
users=demouser
groups=sbuild
root-groups=root

ファイルを保存して閉じます。

Chroot環境にSkeletonオペレーティングシステムを実装する

これで、chrootターゲットの下にシステムをインストールするために必要なのは次のタイプだけです。

sudo debootstrap --variant=buildd --arch amd64 saucy /test/ http://mirror.cc.columbia.edu/pub/linux/ubuntu/archive/

上記のコマンドで、--variantフラグは、ビルドするchrootのタイプを指定します。 builddオプションは、build-essentialパッケージに含まれるビルドツールもインストールして、ソフトウェア作成用にそのまま使用できるようにする必要があることを指定します。 次のように入力すると、その他のオプションを見つけることができます。

man debootstrap

--variantの説明を検索します。

--archは、クライアントシステムのアーキテクチャを指定します。 アーキテクチャが親アーキテクチャと異なる場合は、--foreignフラグも渡す必要があります。 その後、次のような方法を使用して、debootstrapコマンドをもう一度呼び出して、インストールを完了する必要があります。

sudo chroot /test /debootstrap/debootstrap --second-stage

これにより実際のインストールが実行されますが、最初のコマンドはアーキテクチャに違いがある場合にのみパッケージをダウンロードします。 アーキテクチャが一致しない場合は、最初のdebootstrap--foreignフラグを忘れないでください。

コマンドのsaucyは、schroot.confファイルで構成用に選択した見出しと一致する必要があります。 /test/はターゲットを指定し、URLは必要なファイルを含むリポジトリのURLです。 これらは通常、/etc/apt/sources.listファイルにあるものと同じ形式です。

これが完了すると、ターゲットディレクトリをチェックアウトすることで、ダウンロードおよびインストールされたすべてのファイルを確認できます。

ls /test

bin   dev  home  lib64  mnt  proc  run   srv  tmp  var
boot  etc  lib   media  opt  root  sbin  sys  usr

ご覧のとおり、これは通常のファイルシステムと同じように見えます。 型破りなディレクトリに作成されたばかりです。

最終構成と新しい環境への変更

システムをインストールした後、システムが正しく機能することを確認するために、いくつかの最終構成を行う必要があります。

まず、ホストfstabがゲスト内のいくつかの疑似システムを認識していることを確認する必要があります。 fstabの下部に次のような行を追加します。

sudo nano /etc/fstab

proc /test/proc proc defaults 0 0
sysfs /test/sys sysfs defaults 0 0

ファイルを保存して閉じます。

次に、これらのファイルシステムをゲスト内にマウントする必要があります。

sudo mount proc /test/proc -t proc
sudo mount sysfs /test/sys -t sysfs

また、/etc/hostsファイルをコピーして、正しいネットワーク情報にアクセスできるようにします。

cp /etc/hosts /test/etc/hosts

最後に、次のようなコマンドを使用してchroot環境に入ることができます。

sudo chroot /test/ /bin/bash

新しいchroot環境に移動します。 これをテストするには、ルートディレクトリに移動して、次のように入力します。

cd /
ls -di

2以外の番号が返される場合は、chroot環境にあります。 この環境内から、ソフトウェアをインストールし、ホストオペレーティングシステムに影響を与えることなく(リソースを消費する以外に)多くのことを実行できます。

Chrootを終了する

chroot環境を終了するには、前に構成した手順のいくつかを逆にする必要があります。

まず、他のシェル環境を終了するのと同じように、chroot環境をrootとして終了します。

exit

その後、procおよびsysファイルシステムをアンマウントする必要があります。

sudo umount /test/proc
sudo umount /test/sys

これを定期的に使用する予定がない場合は、/etc/fstabファイルから追加の行を削除することもできます。

この環境が完全に終了した場合は、すべてが保存されているディレクトリを自由に削除してください。

rm -rf /test/

結論

より完全な分離を提供するDockerのような他のテクノロジーは確かにありますが、これらのchroot環境は作成と管理が簡単で、ホストオペレーティングシステム内から利用できるため、場合によっては有利です。 それは持っているのに良いツールであり、非常に軽量です。

chrootが役立つ状況を念頭に置き、chrootの使用が適切でない状況を回避するようにしてください。 Chroot環境は、完全に独立したシステムがなくても、さまざまなアーキテクチャのソフトウェアをテストおよび構築するのに最適です。 適切な状況でそれらを使用すると、さまざまな問題に対して柔軟なソリューションを提供することがわかります。

ジャスティン・エリングウッド