特定命令の使用禁止

特定命令の使用禁止

クラスタでツールを開発します。各ユーザーには独自のログインノードがあります。.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許可されたノードで実行されていることを確認する必要があります。

このチェックの実行方法には注意が必要です。たとえば、環境変数は信頼できません。また、許可されている場合、ツールを確認して実行するシェルスクリプトなどのラッパーは、ユーザーが実際のツールを最初に呼び出すことができるため、機能しません。

関連情報