使用 rbash 的 Bash 限制 Shell

Rah*_*til 2 shell bash account-restrictions restricted-shell

我正在/bin/rbash为一些用户使用。它按预期工作,但有一些黑客行为,例如当用户运行bash或 时dash,他们获得了不受限制的 shell,因此为了避免这些命令,我​​在他们的.bashrc文件中添加了以下函数。

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

sh() {
echo "WARNING: NOT ALLOW!!"
}
Run Code Online (Sandbox Code Playgroud)

所以我的问题是:

1#我们可以使用具有多个名称的函数,如下所示

func1,func2 () {
 # do stuff
}
Run Code Online (Sandbox Code Playgroud)

2#我也试过:

case $BASH_COMMAND in # check each command`
        bash|dash|sh) 
        echo "WARNING: NOT ALLOW!!" 
        ;;
esac
Run Code Online (Sandbox Code Playgroud)

3#/bin/rbash -> bash它只是bash的一个软链接,那么它是如何工作的呢?

还有一些命令可以避免用户执行该命令unset HISTFILEkill -9 $$ 是否有其他替代方法可以实现相同的目标?

Chr*_*own 6

不要这样做。rbash应该只有一个已经安全的环境中,除非你知道自己在做什么使用。有很多方法可以打破一个不容易预先预测的受限 bash shell。

只需执行command bash或即可轻松覆盖函数command sh

至于你的问题:

  • 不能直接同时定义多个函数。你必须做这样的事情:
x()  { foo; }
alias f1=x
alias f2=x
Run Code Online (Sandbox Code Playgroud)
  • rbash有效,因为bash检查argv[0]启动时的值。如果去除了前导破折号的基本名称等于RESTRICTED_SHELL_NAME(默认为rbash,请参阅config.h),它会在受限模式下运行。如果作为sh. 您可以shell.c在 bash 4.2 第 1132-1147 行的以下代码中看到这一点:
x()  { foo; }
alias f1=x
alias f2=x
Run Code Online (Sandbox Code Playgroud)