chroot - ルートディレクトリを変更しコマンドを実行する

スポンサーリンク

chrootコマンドはルートディレクトリを変更して、その変更したルートディレクトリでコマンドを実行するコマンドです。chrootは、多くのシステムで管理者権限が必要なコマンドになります。

また、コマンドを実行する際に、新しいルートディレクトリ中にその実行するコマンド、共有ライブラリ、前提とするディレクトリ構造等が必要になる場合があります。

スポンサーリンク

chrootコマンドの構文

chrootコマンドの基本的な構文

newroot:新しいルートディレクトリにするディレクトリ

command [args]:新しいルートディレクトリに変更した後に実行するコマンド、省略した場合は、環境変数SHELLを実行、また、環境変数SHELLが設定されていない場合は/bin/shを実行

 

 

 

chrootコマンドの利用例

ルートディレクトリを変更しbashを動作

chrootコマンドで、カレントディレクトリをルートディレクトリに変更したいと思います。

chrootコマンドの実行前準備

まず、空のカレントディレクトリに対して、bashの実行ファイル、共有ライブラリを用意していきます。bashの実行ファイルとその実行ファイルに使われる共有ライブラリを空のカレントディレクトリにコピーしていきます。

lddコマンドは実行ファイルの依存している共有ライブラリを表示するコマンドになります。
また、cpコマンドの--parentsオプションは、ファイルをコピーするときにそのファイルの親ディレクトリを作成してファイルをコピーするオプションになります。

 

ファイルのコピーが終わった後の最終的なカレントディレクトリの構造は以下のようになります。

 

 

 

chrootコマンドの実行例

chrootコマンドでルートディレクトリを変更して、bashを動作させる準備ができた状態でchrootコマンドを実行します。実行させるコマンドは新しいルートディレクトリを基準としたコマンドが実行されます。
実行するコマンドのプログラムやそのプログラムに使用される共有ライブラリが存在しない場合は、chrootコマンドの起動に失敗します。

コマンド例と実行結果

bashの実行ファイルを入れていないため、bashの組み込みコマンドしか動作させることができません。なので、lsコマンド等のコマンドはこの環境では利用できません。

 

また、このbashの環境から抜けるには、exitコマンドを使用します。exitコマンドを使用するとchrootコマンドを実行する前の環境に戻ることができます。

 

 

 

別のユーザとグループに変更
(--userspecオプション)

--userspecオプションで別のユーザとグループとして、ルートディレクトリを変更してコマンドを実行することができます。--userspecオプションの引数はuserまたはuser:groupになります。

コマンド例と実行結果

idコマンドはユーザIDやグループIDを確認するコマンドになります。
このコマンド例では、新しいルートディレクトリに対して、事前にidコマンドのプログラムと必要な共有ライブラリをコピーしています。
idコマンドをコピーするコマンド例

また、lddコマンドは依存する共有ライブラリを確認するコマンドになります。

 

 

補助グループの追加
(--groupsオプション)

--groupsオプションで補助グループを追加することができます。

コマンド例と実行結果

 

 

 

作業ディレクトリを変更しない
(--skip-chdirオプション)

--skip-chdirオプションは変更するルートディレクトリが変更前のルートディレクトリと同じ場合に実行できます。chrootコマンドを実行したときに作業ディレクトリはルートディレクトリに移動しますが、--skip-chdirオプションをつけると作業ディレクトリがそのままの状態になります。

コマンド例と実行結果