ある種のサンドボックスでbashスクリプトを実行することは可能ですか?


13

当社の製品は、特定の目標を達成するために、繊細なサーバーで未知のbashスクリプトを実行する必要があります。このbashスクリプトはユーザー指定です。特定のコマンドのみが許可され、他のすべてのコマンドが許可されないようにすることに関心があります。さらに、一部のコマンドを他のコマンドに置き換える必要があります。

したがって、たとえば、スクリプトを実行し、次のコマンドを許可します。echo cat awk

ただし、他のコマンドは許可しません(ここでは特定のリストを提供しません)。

さらに、スクリプトにコマンドcpが含まれている場合、それをキャプチャして別のコマンドにリダイレクトします(エイリアスを使用して実行できます)。

これがどのように行われるか考えていますか?

回答:


9

最も簡単な方法は、スクリプトで実行できるコマンドのみを含むchroot jailを使用することです。次にchroot、ディレクトリを呼び出してスクリプトを実行するラッパーを介してスクリプトを実行します。


17

仮想マシン内でスクリプトを実行するのに100%安全な方法はありません。おそらく、スクリプトが目標を達成するのを妨げるでしょう。しかし、あなたを助けるかもしれない2つの機能があります。スクリプトが悪意のある人によって作成されたことを心配している場合、これらの機能は十分ではありません。しかし、不注意なプログラマーや異なる目的を念頭に置いて作成されたために、スクリプトがシステムに悪い影響を与えるのではないかと心配している場合は、これら2つの機能のいずれかが適切なサンドボックス環境を提供します。

  • bashをとして呼び出すことにより、制限付きシェルを実行できますbash -r。詳細については、bashのマニュアルを参照してください。基本的な考え方は、スクリプトはにないコマンドを呼び出すことが$PATHできない、変更$PATHできない、ファイルとの間でリダイレクトできない、さらにいくつかの制限があるということです。これは非常に簡単に設定できますが、不明なスクリプトが複雑すぎて確認できない場合は、制限されたシェルで禁止されている多くのものを使用する可能性があります。

  • chroot刑務所をセットアップできます。アイデアは、ディレクトリツリーを設定し、/some/rootそれ/some/rootがファイルシステム全体であると信じる環境でスクリプトを実行することです(chrootchange rootの略です)。ディレクトリツリーを設定したら、スクリプトを(にコピーして/some/root/myscript)として実行しますchroot /some/root /bin/bash /myscript。たとえば、/some/root/bin許可するコマンドを使用してディレクトリを設定すると、chrootedプログラムではこのディレクトリがとして表示され/binます。ライブラリ、データファイル、bashスクリプト自体など、chroot内のプログラムの実行に必要なすべてをコピーする必要があります。スクリプト/procはchroot内にマウントする必要があります。これを行うには、などのコマンドを使用しmount -t proc proc /procます。

    たとえば、スクリプトでディレクトリツリー全体を使用できるようにする/var/example必要がある場合は、いくつかの選択肢があります。の下にコピーを作成できます/some/root。ハードリンクを作成できます(アプリケーションで機能し、chrootが同じファイルシステムにある場合)。Linuxでは、chroot内でmount --bind /var/example /some/root/var/example「グラフティング」することができます/var/example。リンクのターゲットはchroot内で決定されるため、シンボリックリンクは機能しないことに注意してください。

    特にrootとして実行されているプロセスに対して、chrootは絶対的なセキュリティを提供しないことに注意してください。たとえば、ルートプロセスはchroot内にデバイスファイルを作成し、それを介してディスク全体にアクセスできます。chrootされたプロセスはまだ(あなたがchroot環境内の任意のネットワーキングプログラムを含まないことで、これを禁止することができますネットワーク接続を行うことができますし、信頼できないプログラムがファイルを作成し、それを実行するか、または既存の実行可能ファイルを上書きしないことを確実にします)。


必要なものをすべてコピーする必要があります。コピーするのではなく、シンボリックリンクまたはハードリンクを作成できますか?
kyb

1
@kybハードリンク:はい。シンボリックリンク:いいえ、シンボリックリンクは表示可能なファイルのみを指すことができます。chrootをエスケープすることはできません。ハードリンクはこれに使用するのが難しく、面倒です。ファイルを置き換えると壊れ、chroot内で書き込み可能な場合に元のコピーを公開します。ツリー全体を使用可能にする場合は、ツリーをコピーするか、読み取り専用のバインドマウントを実行します。
ジル 'SO-悪であるのをやめる'

私のような利用できる一般的なコマンドにする必要がありgrepawkunits手作業などドゥIのすべてのbinファイルをコピーする必要があり、すべての依存関係をかutilsのは、chroot環境で作業すべきか明確に伝えるためにいくつかの便利なハックはありますか?
kyb
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.