rbash 是一种受限的 bash shell,它通过禁用 cd 命令、禁止修改 path 环境变量、不允许使用绝对路径或当前目录执行命令以及限制输出重定向等手段来限制用户行为。要配置用户只能运行特定命令,首先需创建专用用户并设置其默认 shell 为 rbash;其次,在用户目录下建立包含允许命令软链接的 bin 目录,并固定该用户的 path 环境变量指向此目录;最后,还需禁止用户修改关键配置文件,并考虑额外措施如 chroot 或容器技术以增强隔离性。此外,应注意权限管理、测试限制效果及防范潜在绕过方法,确保构建出的环境安全可靠。
linux系统中,有时我们需要限制某些用户的操作权限,让他们只能执行特定的命令。一个常见的做法是使用受限 shell(restricted bash,简称 rbash)。通过合理配置,可以有效防止用户随意切换目录、执行任意命令或修改环境变量等行为。
什么是 rbash?
rbash 是 bash 的一种受限模式,它对用户的 shell 行为做了很多限制,比如:
- 不允许更改当前工作目录(cd 命令被禁用)
- 不允许设置或修改 $PATH 环境变量
- 不允许调用命令时使用 / 或 . 来指定路径
- 不允许重定向输出到文件以外的操作
这些限制使得用户只能在预设的路径下执行白名单中的命令,非常适合用于构建“只允许运行特定程序”的环境。
要启用 rbash,通常的做法是将用户的默认 shell 设置为 /bin/rbash,或者在启动 bash 时加上 -r 参数。
如何配置用户只能运行特定命令?
要让某个用户只能运行你允许的命令,需要从以下几个方面入手:
1. 创建专用用户并设置 rbash 为默认 shell
首先创建一个新用户,并将其默认 shell 设置为 rbash:
useradd -m -s /bin/rbash limiteduser passwd limiteduser
这一步完成后,该用户登录后就会进入受限 shell 环境。
2. 配置用户可执行命令的路径
由于 rbash 不允许用户修改 $PATH,你需要手动为该用户设置一个固定的路径,只包含你想允许执行的命令。
以 /home/limiteduser/bin 为例,你可以这样做:
mkdir /home/limiteduser/bin chmod 755 /home/limiteduser/bin
然后在这个目录中创建指向允许命令的软链接:
ln -s /bin/ls /home/limiteduser/bin/ ln -s /usr/bin/cat /home/limiteduser/bin/
再编辑用户的 .bash_profile 文件,强制其 PATH 指向这个目录:
export PATH=/home/limiteduser/bin
这样用户就只能运行你在 bin 目录中提供的命令了。
3. 禁止用户访问其他功能
为了进一步限制用户,建议做以下几点:
- 禁止用户修改 .bashrc 和 .bash_profile 文件:
chown root:root /home/limiteduser/.bash_profile chmod 644 /home/limiteduser/.bash_profile
-
确保用户无法通过其他方式运行命令,比如 python、vi 的 shell 调用等。
-
可以考虑使用 chroot 或者容器技术来进一步隔离环境,但这属于更高级的配置。
一些注意事项和常见问题
- 不要让用户有写权限:尤其是家目录下的关键文件,否则他们可能修改 PATH 或者执行脚本绕过限制。
- 测试限制是否生效:可以自己切换到该用户,尝试执行 cd、绝对路径命令等,看看是否被阻止。
- 命令路径需精确:如果你在 bin 目录里放的是软链接,请确保源命令路径不会暴露给用户。
- 避免交互式 shell 中的 escape 技巧:有些编辑器(如 vi)可以在内部调用 shell,应尽量避免提供这类工具。
基本上就这些步骤。只要路径控制得当,配合 rbash 的限制机制,就能实现一个相对安全的“命令白名单”环境。虽然不复杂,但确实容易忽略细节,比如权限设置和命令覆盖范围,稍有不慎就可能留下漏洞。