シェルスクリプトを「サンドボックス」する方法は?

シェルスクリプトを「サンドボックス」する方法は?

次のシェルスクリプトがあります。

#/bin/sh
#do some stuff

ただし、通訳者は別のディレクトリにshありません。/bin/繰り返しますが、スクリプトは書き込み権限のないディレクトリにフォルダを作成します。私はsedを使用してディレクトリを置き換えましたが、sh多くのスクリプトが互いに依存しているため、それらが作成できるすべてのディレクトリを変更することはできません。

WindowsでSandboxieが実行するのと同様に、スクリプトをサンドボックス化して目的の操作を実行できるようにファイルシステム/読み取り/書き込みをシミュレートする方法はありますか?

答え1

あなたが探しているのは少なくとも、chrootつまり、システムディレクトリツリーのサブツリーにのみアクセスできるプログラムを実行する環境です。 chroot はファイルシステムアクセスにのみ適用され、他の方法でプロセスを制限しません。 chrootのプロセスは引き続きネットワークにアクセスし、chroot外部プログラムをデバッグできます。

chroot はシンボリックリンクを介したファイルシステムへのアクセスも制限します。 chroot の外側を指すシンボリックリンクがある場合、chroot プロセスがアクセスすると、絶対シンボリックリンクは chroot のルートから始まりますが、相対シンボリックリンクは chroot のルートからは開始されません..。より高いです。したがって、別の場所にあるファイルを含むchrootを組み合わせるにはシンボリックリンクを使用できません。あなたはそれを使用することができますバインドマウント、ファイルのコピー(ただしスペースを消費し、自動的には更新されません)、またはハードリンクを使用します(ただし設定が面倒で、ファイルシステム全体では実行できません)。

このchrootシステムコールはルートからのみ呼び出すことができます。 root以外のユーザーとして、次のものを使用できます。近さ代わりに。これは動的にリンクされたプログラム(ほとんど)でのみ機能します。 Fakechrootは複数の場所でディレクトリツリーを組み合わせることができるため、通常はバインドマウントを使用する必要はありません(ただし、バインドマウントが必要な場合はbindfsroot権限なしで使用できます)。

答え2

対処方法binディレクトリを作成し、ここにスクリプトをコピーして、ディレクトリ名を互いにゲートに変更します。

あなたの.profileに

ORIGINAL_PATH=${ORIGINAL_PATH:=$PATH}
PATH=$HOME/bin:${ORIGINAL_PATH}
export ORIGINAL_PATH

常に一貫したPATHがあることを確認してください。

次に、コマンドラインで次の操作を行います。

$ mkdir $HOME/bin
$ cp {the script you need} $HOME/bin
$ pushd $HOME/bin
$ vi {the script} 

書き込み不可能なディレクトリの名前をアクセスできる名前に変更します。したがって、次のことができます。

$ pushd      # might take you HOME, if not cd $HOME
$ mkdir sbox # your "sandbox"
$ pushd sbox 
$ mkdir -p a/path/to/a/previously/unwriteable/ ...

後者はディレクトリを作成します。

 $HOME/sbox/a/path/to/a/previously/unwriteable/

長いファイルパスを切り取って貼り付けるよりも、場所パラメータを使用する方が便利です。名前を再利用するには:

$ set /DIR/Whichheld $HOME/sbox a/path/to/a/previously/unwriteable filename
$ echo $# $*

それから

$ cp $1/$3/$4 $2/$3/$4 

ファイル処理を担当します。多数のコピーが必要な場合:

$ from=$1/$3
$ to=$2/$3
$ pushd $from
$ cp * $to
$ popd 
$ pushd $to

FROMのすべてのファイルがTOにコピーされます...

頑張ってください。

答え3

使用ns。それだけですsed

たとえば、ディレクトリを隠す方法を示します。

mkdir /tmp/dir && {
    rm "$_" && cd /dev/fd/3
} 3</tmp/dir

残して - 申し訳ありません。私は長年続けてきた非常に巧妙な詐欺に陥ったり、神聖になったりしてコンピュータにログインして維持するのに問題があります。

とにかく気をつけて!

関連情報