我已经为loginshell /bin/rbash分配了一个帐户,并且发现了一个似乎使得rbash在很大程度上无用的漏洞。
帐户的.bash_login只运行.bashrc :
. $HOME/.bashrc
.bashrc将PATH设置为包含唯一允许的命令的目录:
PATH=/restrict/bin
这在名义上起作用。 但是,我发现如果我在input密码后几乎瞬间打入了帐户并rbash了Control-C,那么在运行.bashrc之前rbash被中断并下降到shell提示符的机会很小(可能是五分之一),于是PATH没有被改变,用户最终不受限制地访问/bin 。
请告诉我我错过了一些东西,因为解决scheme似乎很难实际修复和重新编译bash 。 我也对rbash为了获得“安全”而修改的特定行为列表保持警惕。 为了这个目的,我会放弃bash ,除了bash脚本与我的用户牢固在一起。
一种解决scheme可能是在.bash_login文件中设置path,完全跳过从.bashrc加载它
编辑 :
回过头看这个之后,我意识到仅仅设置$PATHvariables实际上并没有完成任何事情,因为用户可以改变它来包含其他目录,包括受限制的二进制文件,它阻止直接调用可执行文件。 在符合POSIX的shell中,可以将variables设置为只读( readonly PATH=/restricted/bin )。 为了解决以后,你将不得不限制用户/组不能访问其他bin文件/文件夹。