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)