クラスタでツールを開発します。各ユーザーには独自のログインノードがあります。.bash_profile
特定のツールを実行しないログインノードがあります。ユーザーが特定のノードでこれらのツールを使用できないようにするにはどうすればよいですか?
これまでは、元のツールをオーバーライドして関数内のツールコマンドをオーバーライドすることを検討していました。
$ tool # Launches the tool normally.
$ vim common-env.sh # Is sourced in each user's .bash_profile
function tool() {
if [ $(is_in_forbiden_node) -eq 0 ]; then
echo "You have to leave node X before launching this command!"
return 1 # Forbids the use of the original tool.
else
command tool # Launches the original tool normally.
fi
}
export -f tool
これはうまくいきますが、完璧ではありません。ユーザーは次のように入力してこの制限を回避できます。
$ command tool
または:
$ /usr/bin/env tool
代替は何ですか?私はシステム管理者ではないので、管理者権限を必要とするすべての作業は私には役立ちません。
答え1
新しいグループを作成し、実行可能ファイルに新しいグループを付与し、実行可能ファイルから実行ビット(および読み取り権限)を削除します。
これは「ゲーム」プログラムへの一般的なアプローチですが、あなたが探しているものと非常に似ていると思います。
答え2
執行権がなければ残った唯一の席はtool
自分自身だけだ。特に、tool
許可されたノードで実行されていることを確認する必要があります。
このチェックの実行方法には注意が必要です。たとえば、環境変数は信頼できません。また、許可されている場合、ツールを確認して実行するシェルスクリプトなどのラッパーは、ユーザーが実際のツールを最初に呼び出すことができるため、機能しません。