Bashスクリプトを実行するときにすべての基本コマンドをブロックしますか?

Bashスクリプトを実行するときにすべての基本コマンドをブロックしますか?

シェルスクリプトの実行中にのみ動作し、ユーザーがスクリプトを停止した場合は、bashのエイリアスなどのデフォルトコマンドを変更せずに、すべてのコマンドがデフォルト値に戻るカスタムコマンドディレクトリを作成したいと思います。

たとえば、端末を開くと、bashは自動的にまたは/sbinすべて/usr/binのコマンドにアクセスできます/bin。私のカスタムコマンドは同じ名前なので、すべてブロックする必要があります(たとえばcd、、cpmv

以下は、コードで実行する必要がある操作の偽の例です。

#!/bin/bash
disable_path_commands "/sbin"
disable_path_commands "/usr/local/bin"
disable_path_commands "/usr/bin"

global_commands_dir="/my_custom_commands_dir"
bash --block_default_commands "*" --allow_only_commands_from_default "sh,cd,sudo,su" --only-access-commands-from-dir "$global_commands_dir"
cd ~/

スクリプトを実行した後、ユーザーはに保存されているカスタムコマンドにのみアクセスできますが、ユーザーの現在のディレクトリは現在の/my_custom_commands_dir作業~/ディレクトリになります。ユーザーが を入力すると、exitアクセス可能な bash が自動的に閉じ、/my_custom_commands_dirすべてが正常に戻ります。ユーザーはchrootオペレーティング・システム全体の環境に似ていますが、オペレーティング・システム全体の環境がなくても、次のようなコマンドに対してのみすべてのコマンドにアクセスできます。

export DEFAULT_COMMANDS_DIR="/my_custom_commands_dir" 
unset /SBIN
unset /USR/BIN

ベストアンサー1

スクリプトが現在実行中のシェルの環境を変更できるようにするには、「ソース」の使用を検討してください。これにより、他のプロセスとスクリプトがシェルからエクスポートされた変数にアクセスできます。

source myscript

これはmyscriptをソースにします。ファイルは実行可能である必要はありませんが、有効なシェルスクリプトでなければなりません。ファイルは現在のディレクトリまたは$ PATHのディレクトリにあります。

. myscript

これはmyscriptのソースでもあります。この「スペル」はPOSIXで定義された公式スペルです。 Bashはソースをドットのエイリアスとして定義します。

その後、既存の.bashrc / profileファイルなどをコピーして変更して、選択したオプションでPATHをオーバーライドできます。これにより、現在実行中のシェルに新しい設定がエクスポートされます。完了したら、元の.bashrc / profileなどを取得して正常に戻します。

「exec」コマンドを使用してスクリプトを実行することもできます。 「exec」コマンドは、「myscript」を実行する前に現在のシェルを終了または終了します。したがって、最初から環境(パスなど)を作成する必要があります。

#!/bin/bash
#myscript to check exec
exec /path/myRestrictedShellscript.sh
echo "This text will not be printed"

おすすめ記事