Bashはrbashを使用してShellを制限します。

Bashはrbashを使用してShellを制限します。

/bin/rbash一部のユーザーに使用しています。期待どおりに動作しますが、ユーザーが実行したり、bash無制限のシェルを取得するなど、いくつかのハッキングがあるため、これらのコマンドを回避するために、dashファイルに次の機能を追加しました..bashrc

bash() {
echo "WARNING: NOT ALLOW!!"
}

sh() {
echo "WARNING: NOT ALLOW!!"
}

だから私の質問は次のようになります

1#以下のように複数の名前を持つ関数を使用できます

func1,func2 () {
 # do stuff
}

2#私も試してみました:

case $BASH_COMMAND in # check each command`
        bash|dash|sh) 
        echo "WARNING: NOT ALLOW!!" 
        ;;
esac

3#/bin/rbash -> bashこれは単にbashソフトリンクですが、どのように制限されますか?

ユーザーが同様のコマンドを実行できないようにするコマンドもありますunset HISTFILEkill -9 $$ 同じ目的を達成する他の方法はありますか?

答え1

これをしないでください。rbashしなければならないただ自分が何をしているのか分からないと、すでに安全な環境では使用できません。限られたbashシェルをクラックする方法はいくつかありますが、事前に予測するのは簡単ではありません。

command bash関数はorを実行することで簡単にオーバーライドできますcommand sh

あなたの質問について:

  • 複数の関数を同時に直接定義することはできません。次のようにする必要があります。
x()  { foo; }
alias f1=x
alias f2=x
  • rbashこれは起動時に確認される値のために機能しますbash。デフォルト名(前のダッシュを除く)が(デフォルト、参照)argv[0]と同じ場合は、制限モードで実行されます。呼び出されると、POSIX互換モードで動作するのと同じです。 bash 4.2行1132-1147の次のコードでこれを確認できます。RESTRICTED_SHELL_NAMErbashconfig.hshshell.c
/* Return 1 if the shell should be a restricted one based on NAME or the
   value of `restricted'.  Don't actually do anything, just return a
   boolean value. */
int
shell_is_restricted (name)
     char *name;
{
  char *temp;

  if (restricted)
    return 1;
  temp = base_pathname (name);
  if (*temp == '-')
    temp++;
  return (STREQ (temp, RESTRICTED_SHELL_NAME));
}

関連情報