[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

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

chroot は、指定されたディレクトリをルートディレクトリにして、コマンドを実行する。 多くのシステムでは、この操作を行うことができるのはスーパーユーザだけである。 (4)

書式:

 
chroot option newroot [command [args]…]
chroot option

通常、ファイル名の検索は、ディレクトリ構造の根 (ルート、root)、すなわち ‘/’ を起点として行われる。chroot はこのルートを newroot ディレクトリ (実在するディレクトリでなければならない) に変更し、 さらに、作業ディレクトリを ‘/’ に変更して、最後に command を、args の指定があれば args を付けて実行する。 command が指定されていない場合、デフォルトのコマンドは、環境変数 SHELL の値か、SHELL が設定されていなければ、/bin/sh であり、 それが ‘-i’ オプションを付けて、呼び出される。 command は シェルの組み込みコマンドであってはならない (see section 特殊ビルトイン・ユーティリティ)。

このプログラムでは以下のオプションが使用できる。参照: 共通オプション. オプションはオペランドの前に置かなければならない。

--groups=groups

このオプションを使えば、新しいプロセスが使用する補助 groups を変更することができる。グループのリストの各項目 (名前でも ID 番号でもよい) は、コンマで区切られていなければならない。 ‘--userspec’ オプションで自動的に行われる補助グループの照合をしないようにするには、 ‘--groups=''’ を使用すればよい。

--userspec=user[:group]

デフォルトでは、command は呼び出し側のプロセスと同じ資格情報を使って実行されるが、 このオプションを使えば、command を別の user の資格で実行することができる。別の基本 group を指定することも可能だ。 user が指定された場合、補助グループは、そのユーザについてシステムが設定しているリストと同じものになる。 ただし、‘--groups’ オプションによって置き換えられる場合は別だ。

--skip-chdir

ルートディレクトリを newroot に変更した後で (すなわち chroot 環境中で)、作業ディレクトリを ‘/’ に変更したくなかったら、このオプションを使えばよい。 このオプションが使用できるのは、newroot が元の ‘/’ ディレクトリと同じときだけであり、従って、役に立つのは、 ‘--groups’ や "‘--userspec’ と一緒に使い、 元の作業ディレクトリに留まっていたい場合がほとんどである。

--userspec’ や ‘--groups’ オプションによって行われるユーザ名やグループ名の照合は、 chroot 環境の外側と内側の両方で行われるが、chroot 環境の内側で成功した照合が優先される。 ユーザやグループの指定で ID 番号を使うつもりならば、数字の前に ‘+’ を付ければ、名前を ID 番号に還元するステップが行われないで済む。 See section chown, chgrp, chroot, id: ユーザ名かユーザ ID かを明確にする.

chroot を使う上でよくある問題を避けることができるように、 ちょっとした情報をいくつか挙げておく。まず簡単なことから言うと、command は、静的にリンクしたバイナリを指すようにした方がよい。 もし、動的にリンクした実行ファイルを使用するのならば、 共有ライブラリが新しいルートディレクトリ以下の適切な場所に存在するように、 前もって準備しておく必要があるだろう。

たとえば、静的にリンクした ls の実行ファイルを作成して、 ‘/tmp/empty’ に置けば、root ユーザとして次のようなコマンドを実行することができる。

 
$ chroot /tmp/empty /ls -Rl /

出力はこんなふうになるだろう。

 
/:
total 1023
-rwxr-xr-x 1 0 0 1041745 Aug 16 11:17 ls

もし、動的にリンクした実行ファイル、たとえば bash を使いたいならば、 まず ‘ldd bash’ を実行して、どんな共有オブジェクトファイルが必要かを調べることだ。 それから、bash 自体のバイナリをコピーするだけでなく、‘ldd bash’ でリストされたファイルも、新しいルートディレクトリになるディレクトリ以下のしかるべき場所にコピーしておく。 さらに、実行ファイルが何か他のファイルも必要としているなら (たとえば、データファイル、ステータスファイル、デバイスファイルなど)、 それも適切な場所にコピーする。

chroot がインストールされるのは、chroot 関数を持つシステムだけである。 従って、移植を考慮したスクリプトでは、chroot が存在することを当てにしない方がよい。

終了ステータス:

 
125: chroot そのものの実行に失敗した。
126: command は見つかったが、起動できなかった。
127: command が見つからなかった。
それ以外は、command の終了ステータス。

[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

This document was generated on June 7, 2022 using texi2html 1.82.