- chroot技術を使用すると、プロセスまたはユーザーを安全な環境で分離することができます。 Linux.
- 機能的な jail をセットアップするには、必要なバイナリ、ライブラリ、およびディレクトリ構造を準備する必要があります。
- chroot は、サービスの制限と、システムの安全な復旧やソフトウェアのテストの両方に役立ちます。

Linuxシステム上でプロセスやサービスを完全に分離する方法を知りたいと思ったことはありませんか?最も伝統的で汎用性の高い解決策は、chroot環境を作成することです。これは強力でありながら、しばしば過小評価されているテクニックで、システムを保護し、障害を恐れることなく実験を行うための鍵となります。この記事では、chroot環境とは何か、どのような用途に使われるのか、そして最も重要な点として、Linux上でchroot環境を自分で作成する方法について、詳細なガイドを提供します。安全なテスト環境の構築、ユーザーのアクセス制限、システムの復旧など、どのような目的であっても、chroot環境は役立ちます。すべて分かりやすい言葉と実践的な例を用いて説明しているので、すぐに実装を開始できます。
Linuxをいじったことがある人なら、chroot環境について聞いたことはあるでしょうが、上級管理者向けの機能のように思えて、これまで使ったことがなかったかもしれません。しかし、chroot環境の作成は見た目よりも簡単で、実際の状況では非常に役立ちます。疑わしいソフトウェアの実行からシステムを保護したり、SSHやFTPなどのネットワークサービスを隔離したり、すべてが絶望的になったときに破損したシステムを復旧させたりと、様々な場面で活用できます。このガイドを読めば、chrootの仕組みだけでなく、その最大限に活用する方法もわかるので、キーボードを準備しておきましょう。
chroot ケージとは何ですか? いつ使用する必要がありますか?
chrootケージ(「change root」の略)とは、システム内でルートディレクトリ(/)がプロセスまたはユーザー向けに一時的に再定義される隔離された環境です。実際には、これによりプロセスまたはユーザーはケージ内のファイルとディレクトリのみにアクセスでき、ケージ外のファイルやディレクトリを閲覧したり変更したりすることができなくなります。ケージ内で発生するすべての事象はカプセル化され、システムの他の部分に影響を与えることはありません。
これは何のためですか?アプリケーションは非常に多様です。例えば:
- 疑わしいプログラムを実行する または、システム全体に損害を与えることなく、信頼性が低いものになります。
- ユーザーを制限する特にネットワーク サービスでは、FTP や SSH の場合のように、メイン システム上の機密情報にアクセスできないようにします。
- 特定のデバイスへのアクセスを制限し、特定の機能のみを許可します。
- 損傷したシステムを復旧する LiveCD から起動し、システムをジェイルブレイクして安全に修復を実行します。
- メイン システムの安定性を損なうことなく、複雑な構成やインストールをテストします。
この方法は、Linux における高度なセキュリティと管理のための効果的なツールです。参入障壁となる主な要因は、通常、jail を適切に設定し、必要なコンポーネントをすべてコピーする方法に関する知識不足ですが、いくつかの具体的な手順に従うことで、十分に実現可能であることがわかります。
chrootの一般的な操作と制限

`chroot`コマンドはほとんどのLinuxディストリビューションに含まれており、chroot環境内で実行されているプロセスのルートディレクトリ(`/`)を変更し、元のシステムから隔離します。一度chroot環境に入ると、コマンドやプログラムは隔離された環境内のファイルしか参照できず、chroot環境外のファイルにはアクセスできません。
すべてが完璧というわけではなく、すべてのプログラムがchroot環境内で正常に動作するとは限りません。複雑なサービスや、特定のバージョンのsendmailのように絶対パスを必要とするサービスは、正しく動作しない可能性があります。chroot環境にアプリケーションをデプロイする前に、使用するアプリケーションを計画し、それらの依存関係を確認することが不可欠です。
さらに、完全な仮想化ソリューションとは異なり、chrootはカーネルレベルのリソース分離を提供しません。chroot環境はファイルシステムレベルで分離されていますが、ホストシステムのカーネルとリソースを共有します。そのため、完全に独立した環境を必要とせず、ファイル領域とアクセスを分離するだけでよい場合に便利な、軽量な代替手段となります。
chroot jail のセットアップ手順: 構造と依存関係
機能的なjailを作成するには、ディレクトリ構造を準備し、必要なバイナリとライブラリをすべてコピーすることが不可欠です。空のフォルダを作成するだけでは不十分です。/bin/bash、/bin/ls、およびそれらの依存関係など、そのフォルダ内で実行する必要のあるすべてのものが、元のシステム構造を尊重して存在していなければなりません。
基本的な手順は次のとおりです。
- jailディレクトリを作成するたとえば、/opt/chroot_dir または /usr/src/jaula などです。
- 必須のバイナリをコピーする (例えば、 bash y ls)をケージ内のそれぞれの場所に置きます。
- lddコマンドを使用する バイナリに必要なライブラリを特定します(例: ldd /bin/bash y ldd /bin/ls).
- これらのライブラリをコピーする ケージ構造では、元のシステムと同じ組織を維持しながら、 / lib y / lib64.
- 含まれています 基本設定ファイル jail 内のユーザーを管理する場合は、/etc/passwd や /etc/group などを使用します。
- 対話型セッションが必要な場合は、通訳を追加します。 コマンド 次のようなファイルをカスタマイズします /etc/bash.bashrc 環境を構成します。
構造が準備され、ファイルがコピーされたら、chrootコマンドを使用して隔離された環境にアクセスし、そこで作業することができます。
典型的な例: bash と ls を実行するための chroot jail の作成
例えば、bashとlsを実行できるシンプルなケージが必要だとしましょう。手順は次のとおりです。
- ケージ フォルダーを作成します。
sudo mkdir /opt/chroot_dir
- 必要なバイナリをコピーします。
sudo cp /bin/bash /opt/chroot_dir/bin/ sudo cp /bin/ls /opt/chroot_dir/bin/
- ldd を使用してライブラリを識別し、コピーします。
ldd /bin/bash /bin/ls
リストされているライブラリを見つけて、それらを/opt/chroot_dir/lib/および/opt/chroot_dir/lib64/の chroot 構造に分割します。
エクスペリエンスを簡単にしたい場合は、プロンプトを編集できます。
エコー "PS1='CAGE $ '" | sudo tee /opt/chroot_dir/etc/bash.bashrc
アクセスするには、次を実行します:
sudo chroot /opt/chroot_dir /bin/bash
こうすれば、あなたは完全に隔離された檻の中に閉じ込められます。内部でさらにツールが必要な場合は、依存関係も含めてコピーする必要があることを覚えておいてください。
重要なシステムのマウント: /proc、/dev、/sys
chroot環境を真に有効活用するには、特にリカバリ作業やデバイスアクセスを必要とするプログラムの実行においては、/proc、/dev、および/sysをchroot環境内にマウントする必要があります。これはバインドマウントを使用して実現されます。
- 構造を作成し、パーティションをマウントします。
sudo mkdir /media/cage sudo mount /dev/sda1 /media/cage
- 仮想システムをマウントします。
sudo マウント --bind /proc /media/jaula/proc sudo マウント --bind /dev /media/jaula/dev sudo マウント --bind /sys /media/jaula/sys
これらのマウントにより、chroot 内のプログラムは正常に機能するために必要なリソースにアクセスできるようになります。ケージに入るには:
sudo chroot /media/cage
その時点から、実行するコマンドはマウントされたシステムにのみ影響するため、メイン システムに影響を与えずにタスクの回復や変更を行うのに最適です。
chroot によるユーザー制限: OpenSSH と ChrootDirectory オプション
chroot環境の一般的な用途の一つは、 OpenSSHのChrootDirectoryオプションを使用して、SSHユーザーの特定のディレクトリへのアクセスを制限することです。最近のバージョンでは、外部ユーティリティを使用せずにこれを設定できます。
一般的なプロセスは次のようになります。
- ケージ構造を準備する必要なツールとライブラリが含まれます。
- バイナリと依存関係をコピーします。 bash.
- ユーザーファイルを構成する(/etc/passwd, /etc/group)、必要に応じてシェルを調整します。
- ファイルを変更する /etc/ssh/sshd_config 次のような指令を含める:
一致するユーザー jaileduser ChrootDirectory /path/to/the/jail
SSH を再起動すると、ユーザーは自動的にそのディレクトリに制限され、その外部へのアクセスはできなくなります。機能的で安全なセッションのために、jail で使用できるバイナリとライブラリを確認することが重要です。
高度なヒント:ケージを各ケースに適応させ、自動化する
基本をマスターしたら、ケージをカスタマイズして最適化できます。
- 必要なコマンドのみを含める ユーザーごとにセキュリティを強化します。
- 次のようなツールを使用します デブートストラップ Debian では、完全かつ機能的な環境を素早く作成できます。
- 起動スクリプト、プロンプト、基本設定をカスタマイズして、ユーザー エクスペリエンスを向上させます。
- Gentooのようなディストリビューションでは、 systemd-nspawn chroot をより効率的に管理します。
考慮すべき事項: chroot の制限と実際の分離
chrootは完全なカーネル分離を提供するものではないことを覚えておくことが重要です。脆弱性や特定の機能が存在する場合、特権プロセスが脱出する可能性があります。より高いセキュリティを確保するには、Dockerなどのコンテナや完全な仮想化ソリューションの使用を検討してください。
グラフィカル インターフェイスまたはオーディオ/ビデオ アクセスを必要とするソフトウェアの場合は、バインド マウントとユーザー ID の同期を使用して、ソケットと適切な権限を共有する必要があります。リソースと依存関係を慎重に計画することが、安定した安全な環境を実現する鍵となります。
バイトの世界とテクノロジー全般についての情熱的なライター。私は執筆を通じて自分の知識を共有するのが大好きです。このブログでは、ガジェット、ソフトウェア、ハードウェア、技術トレンドなどについて最も興味深いことをすべて紹介します。私の目標は、シンプルで楽しい方法でデジタル世界をナビゲートできるよう支援することです。
