/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 HISTFILE
。kill -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_NAME
rbash
config.h
sh
shell.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));
}