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 HISTFILE,kill -9 $$
是否有其他替代方法可以实现相同的目标?
不要这样做。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)