chrootで「ls」コマンドを実行するには?


8

私はブラウザーシェルリーシュを使用していて、phpでシェルコマンドを実行してブラウザーに再起動しています。chrootコマンドを見つけただけで、たとえばls変更されたルートのルートディレクトリで実行したいのですが、実際に実行する必要がありますbash -c "ls /"。私はこれを試しました(sudoなしで試しましたが、うまくいきませんでした):

sudo chroot ~/projects/jcubic/leash ls

エラーが発生しました:

chroot: failed to run command ‘ls’: No such file or directory

このコマンドを適切に使用できますか?異なるルートディレクトリでlsを実行することは可能ですか?

sudoなしでchrootを実行しようとすると、次のエラーが発生します。

chroot: cannot change root directory to '/home/kuba/projects/jcubic/leash': Operation not permitted

3
chrootをすべきか理解していますか?
桂佐藤

1
@SatoKatsura正しく理解できたら/、別のディレクトリに移動します。binコマンドを実行するためにそのディレクトリにいる必要がありますか?
jcubic 2017年

8
はい:実行するchrootすべてのバイナリ、必要なすべてのライブラリ、およびダイナミックローダー(OSが使用している場合)をあらかじめjailに設定する必要があります。また、ご存じのとおりchroot、rootのみが実行できます。
桂佐藤

回答:


12
chroot: failed to run command ‘ls’: No such file or directory

chroot内でコマンドを実行するには、このプログラムをchrootで使用できるようにする必要があります(/ファイルシステムにインストールされているプログラムを使用できないため)。

最も簡単な方法は/usr/bin/lsfromをtoにコピーする/home/kuba/projects/jcubic/leash/usr/bin/ことです(依存する共有ライブラリも必要になります:)ldd /usr/bin/ls


help.ubuntu.comでこの記事を見つけました。その情報が見つからないため、chrootを実行するにはどうすればよいですか。実行する必要がありますchroot lucid /bin/bash -c "ls /"chroot /var/chroot /bin/bash -c "ls /"
jcubic '10

@jcubicそれはあなたが何を達成したいかによります。のマニュアルページchrootは、構文に疑問がある場合の開始点として最適です。他のコマンド(bash)についても同様です。
Jakuje

5

ls別のルートで実行することも可能ですが、lsコマンドとそれに依存するすべてのファイルは、そのルート内に存在する必要があります。lsコマンドを開始する方法はありlsません。そのプロセス内でルートを変更します。この機能はありません。

chrootの要点は、ファイルの可視性を特定のディレクトリの下にあるファイルに制限することです。を実行するchroot ~/projects/jcubic/leash lsと、chrootコマンドは自身のプロセスのルートを変更し(ルートディレクトリの変更は、それを実行するプロセスと、その後に実行されるすべてのプロセスにのみ影響します)、ls検索パス上のディレクトリで呼び出される実行可能ファイルを実行しようとします。現在のルートはなので~/projects/jcubic/leash、実行可能ファイルはなどのディレクトリに存在する必要があります~/projects/jcubic/leash/bin

chrootに通常のコマンドを備えた通常のシステムが必要な場合は、インストールする必要があります。以下のようなツールはdebootstrap(Debianシステムをインストールする)、または(chrootされますと、他の方法で限定されている環境を設定します)ドッカーなどのツールをプロビジョニングは助けることができます。

lsコマンドだけが必要な場合でも、以外のものをコピーする必要がありますls。を実行lsするには、lsコマンドとそれに依存するすべてのファイルをコピーする必要があります。以来ls動的にリンクされたプログラムであり、あなたはそのダイナミックローダーだけでなく、それが依存するすべての動的ライブラリを必要としています。実行ldd /bin/lsして、必要な動的ライブラリをリストします。例えば:

mkdir -p bin lib/x86_64-linux-gnu
rsync -a /bin/ls bin/
rsync -a /lib/x86_64-linux-gnu/ lib/x86_64-linux-gnu/
chroot . ls

代替的に、探索する簡単な方法は、例えば、静的にリンクされたバイナリを取得することであるBusyBoxの(Debianとの誘導体で利用可能なbusybox-staticパッケージ)。

cp /bin/busybox .
chroot . ./busybox ls
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.