[ 通常表示 ]  [ 簡易表示 ]  [ シンプル表示 ]

「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典イメージぴよ画像「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典

chroot【コマンド】

pointこの用語のポイント

pointUNIX系で使えるコマンドだよ

pointルートディレクトリを変更するよ

スポンサーリンク

簡単に書くよ

chroot【コマンド】とは

ルートディレクトリ(「これ以上は上に行けないよ」なディレクトリ)を変更するときに使うコマンド
です。

image piyo

詳しく書くよ

ルートディレクトリは「これ以上は上に行けないよ」なディレクトリね。
UNIX系のコンピュータ(LinuxとかMacとか)においては

/

で表現されます。

例えば

/etc

と書くと

一番上(外側)のディレクトリの中にある「etc」ディレクトリ

の意味になります。

chroot

同じ理屈で

/etc/hoge.txt

と書いた場合は

一番上(外側)のディレクトリの中にある「etc」ディレクトリの中にある「hoge.txt」ファイル

の意味です。

chroot2

以上を踏まえて、ルートディレクトリを変更するときに使うコマンドが「chroot」コマンドです。

「chroot」コマンドはUNIX系(LinuxとかMacとか)で使えます。

書き方は

chroot [オプション] [変更先ルートディレクトリ] [実行するコマンド]

です。
オプションは少しだけあります。

オプション説明
--userspec=【ユーザ】:【グループ】指定したユーザーおよびグループ(ID または名前)で実行する
---groups=【グループのリスト】「g1,g2,..,gN 形式で追加のグループを指定します」らしい
--helpヘルプを表示する
--versionバージョン情報を表示する

などですね。

それでは、実際の使い方を見てみましょう。

私の環境(CentOS 7)を例に説明します。
環境が違っても似たり寄ったりだとは思いますが、上手くいかない場合はごめんなさい。

まずは基本的な使い方です。

chroot [ルートディレクトリ]

と指定すると、ルートディレクトリが変わります。

chroot /usr

を実行したところ「/usr」がルートディレクトリになりました。

chroot3

この状態で

ls

を実行すると

ls: Command not found.

とメッセージが出てエラーになります。

理由は「ls」コマンドのファイルがあるのは、もともと

/usr/bin/ls

だったからです。

chroot4

今は「chroot」の影響によって、ルートディレクトリが「/usr」配下に変わっています。

chroot5

よって「ls」コマンドを実行したければ

/bin/ls

と指定してあげる必要があります。

少し余談も入りましたが、これが一番基本的な使い方です。
ルートディレクトリの変更ね。
ちなみに、ルートディレクトリの変更を解除したいときは

exit

を実行します。

次に、ルートディレクトリを変更した後にコマンドを実行してみましょう。

chroot [ルートディレクトリ] [コマンド]

と指定すると

1.ルートディレクトリが変更される
2.指定したコマンドが実行される
3.ルートディレクトリの変更が解除される


が一気に行われます。

詳細は面倒くさくなったので説明しませんが、例えば

chroot /usr /bin/ls

を実行すると

1.ルートディレクトリが「/usr」に変更される
2.「ls」コマンドが実行される
3.ルートディレクトリの変更が解除される(「/」に戻る)


が一気に行われます。

これがルートディレクトリを変更してコマンドを実行する方法です。

次に、実行する際のユーザを指定してみましょう。
「--userspec」を指定すると、ルートディレクトリを変更するついでにユーザも変更してくれます。

やっぱり面倒くさくなったので詳細は説明しませんが、例えば

chroot --userspec=piyota:piyota / id

を実行すると、ユーザが「piyota」の状態で「id」コマンド(ユーザIDグループIDを表示するときに使うコマンド)が実行されます。
私の環境では、以下の内容が表示されました。

uid=1000(piyota) gid=1000(piyota) groups=1000(piyota),0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

ちゃんと、ユーザもグループも指定した「piyota」になっています。

ざっと説明しましたが、これが「chroot」コマンドの使い方です。

注意点として「chroot」コマンドでルートディレクトリを変更すると、ルートディレクトリが変わります。
「何を当たり前のことを」と思うかもしれませんが、とても大事なことなのです。

何が言いたいかというと、シェルパス(ファイルやディレクトリの場所)も変わります。

例えば、私は「tcsh」というシェルを使っていますが、パスは

/bin/tcsh

です。

chrootでルートディレクトリを「/hoge」に変更すると、変更前の状態における

/hoge/bin/tcsh

に対して、tcshを探しに行ってしまいます。
「/hoge/bin/tcsh」には当然、tcshのファイルはありません。
結果として「シェルが起動できなかったよ~」なエラーになります。

例えば、どこかのディレクトリの中に環境を丸ごと用意して、そこを一つの独立した環境として扱いたいときに使うコマンドですね。

image piyo2

一言でまとめるよ

まぁ「chroot」ってコマンドが出てきたら「ルートディレクトリを変更するときに使うんだな~」と、お考えください。

一番上に戻るよ
スポンサーリンク