シェルスクリプトの実行中にのみ動作し、ユーザーがスクリプトを停止した場合は、bashのエイリアスなどのデフォルトコマンドを変更せずに、すべてのコマンドがデフォルト値に戻るカスタムコマンドディレクトリを作成したいと思います。
たとえば、端末を開くと、bashは自動的にまたは/sbin
すべて/usr/bin
のコマンドにアクセスできます/bin
。私のカスタムコマンドは同じ名前なので、すべてブロックする必要があります(たとえばcd
、、cp
)mv
。
以下は、コードで実行する必要がある操作の偽の例です。
#!/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"
答え2
このオプションを見ると、変数の--restricted
オーバーライドを含む多くの機能が無効になりますPATH
。また、シンボリックリンクを介してasを呼び出してbash
制限モードを取得することもできます。rbash