![为用户提供严格限制的 Shell 访问权限](https://linux22.com/image/176212/%E4%B8%BA%E7%94%A8%E6%88%B7%E6%8F%90%E4%BE%9B%E4%B8%A5%E6%A0%BC%E9%99%90%E5%88%B6%E7%9A%84%20Shell%20%E8%AE%BF%E9%97%AE%E6%9D%83%E9%99%90.png)
我正在开发一个内部文件共享系统,例如 Google Drive/Dropbox,对用户自己的文件夹的 shell 访问非常有限。用户必须能够使用mv
ssh
ls
cd
命令来访问和导航自己的文件夹,有些用户还能够运行gcc
来编译自己的程序(但不允许他们运行自己编译的程序)。唯一的问题是我不希望人们在系统文件中漫游或修改系统设置/变量。
首先,我认为使用容器/BSD Jails 可能是解决方案,但考虑到该系统可能有超过 300 个用户,它增加了不必要的复杂性和开销。
开放的野生互联网上有哪些解决方案?谢谢!
答案1
首先,我要说的是,无论你在这个领域做什么,用户都会找到创造性的方法来绕过你所做的事情。
Bash 提供了“受限 shell”的概念,它将阻止用户使用cd
并限制他们只能使用其路径中预先存在的命令。您可以创建一个目录,其中包含指向“允许”命令集的符号链接,并将用户的路径配置为指向该目录:
https://www.gnu.org/software/bash/manual/html_node/The-Restricted-Shell.html
$ PATH=/tmp/ex rbash
$ ls
src
$ cd /
rbash: cd: restricted
$ export PATH=/usr/bin:$PATH
rbash: PATH: readonly variable
$
但请注意,如果您将一个命令放在可以执行任意命令的路径中,这将无济于事:
$ rbash
$ cd /tmp
rbash: cd: restricted
$ vim
:!/bin/bash
$ cd /tmp
$
甚至 Bash 受限 shell 的文档也说:
现代系统提供了更安全的方法来实施受限环境,例如监狱、区域或容器。