ステータス:非推奨

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

理由: Ubuntu 12.04は2017年4月28日に保守終了(EOL)に達し、セキュリティパッチまたはアップデートを受信しなくなりました。 このガイドはもう維持されていません。

代わりに参照してください:このガイドは参照として役立つ場合がありますが、他の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環境を最大限に活用するために、いくつかの基本的な配布ファイルを新しい環境にインストールするのに役立ついくつかのツールを使用します。 これにより、プロセスが迅速になり、ライブラリと基本的な基本パッケージを確実に利用できるようになります。

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

他のツールはと呼ばれます 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 flagは、ビルドするchrootのタイプを指定します。 The buildd オプションは、に含まれるビルドツールもインストールする必要があることを指定します build-essential ソフトウェア作成のために箱から出して使用できるようにするためのパッケージ。 次のように入力すると、その他のオプションを見つけることができます。

man debootstrap

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

The --arch クライアントシステムのアーキテクチャを指定します。 アーキテクチャが親アーキテクチャと異なる場合は、 --foreign 国旗! その後、電話する必要があります debootstrap 次のようなコマンドを使用して、インストールを完了するためにもう一度コマンドを実行します。

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

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

The saucy コマンドのは、で構成用に選択した見出しと一致する必要があります。 schroot.conf ファイル。 The /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環境は、完全に独立したシステムがなくても、さまざまなアーキテクチャのソフトウェアをテストおよび構築するのに最適です。 適切な状況でそれらを使用すると、さまざまな問題に対して柔軟なソリューションを提供することがわかります。

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