如何使用受限 Shell 来限制 Linux 用户可以执行的操作

已发表: 2022-01-29
Linux 系统上的终端窗口。
Fatmawati Achmad Zaenuri/Shutterstock

受限 shell 限制了用户帐户在 Linux 上可以执行的操作。 受限用户无法更改其目录,您可以控制他们有权访问的命令。 这是在 Linux 上设置受限 shell 的方法。

受限壳

受限制的外壳不是不同的外壳。 这是标准外壳的另一种模式。 Bash、Korn、Fish 和其他 shell 都可以在受限 shell 模式下启动。 我们将在本文中使用 Bash,但同样的原则也适用于其他 shell。

因为受限 shell 只是使用标准 shell 的另一种方式,所以它们很容易设置。 无需安装任何东西,无论 Linux 位于何处,它们都可用。

受限 shell 也可以应用于脚本。 这样可以确保如果它们被错误地写入,它们可能造成的任何损害仅限于它们受限世界的范围内,并且它们无权访问您的整个计算机。

但请注意,受限 shell 并非完全防逃逸。 有足够知识的人可以逃脱受限的外壳。 它们非常适合为临时用户设置安全边界,但不要依赖受限 shell 来实现生产系统上的任何实际安全性。

相关: Bash、Zsh 和其他 Linux Shell 之间有什么区别?

受限重击

当您将 Bash 作为受限 shell 运行时,用户会删除一些功能。 具体来说,用户不能

  • 使用cd更改工作目录。
  • 更改$PATH$SHELL$BASH_ENV$ENV环境变量的值(但它们可以读取当前值)。
  • 读取或更改$SHELLOPTS shell 环境选项。
  • 重定向命令的输出。
  • 调用需要路径来定位它们的命令。 也就是说,您不能发出包含一个或多个正斜杠“ / ”的命令。
  • 调用exec以替换 shell 的不同进程。
  • 使用脚本中的任何受限功能。
广告

您可以使用-r (受限)选项调用受限 Bash shell。 禁止尝试执行更改工作目录之类的简单任务。 一条简短的消息告诉您cd受到限制。

 重击 -r
 光盘文件

Bash shell 还可以检测何时使用“rbash”而不是“bash”调用它。 这也导致它作为受限 shell 启动。 这提供了一种方便的方法来为特定用户设置默认 shell,我们很快就会使用它。

如果我们在 Ubuntu 上使用whereis命令来查找rbash文件,我们会看到可执行文件位于“usr/bin”目录中。 手册页位于“/usr/share/man/man1”目录中。

使用带有-l (long) 选项的ls命令表明rbash实际上是bash的符号链接。

 在哪里 rbash
 ls -l /usr/bin/rbash 

在 Manjaro 和 Fedora 上,必须创建rbash符号链接。 这适用于两种发行版:

 在哪里 rbash
 sudo ln -s /bin/bash /bin/rbash
 在哪里 rbash 

广告

我们第二次使用whereis命令时,它会在“/usr/bin”目录中找到rbash

限制用户

让我们创建一个名为“Minnie”的新用户帐户。 我们将使用useradd命令的-s (shell) 选项将他们的 shell 设置为受限 shell。 我们还将使用passwd命令设置帐户的密码,并为他们创建一个主文件夹。

mkdir命令中的-p (parents) 标志告诉mkdir创建目标目录以及它需要创建的任何父目录。 所以通过创建“/home/minnie/bin”目录,我们同时创建了“/home/minnie”目录。

 sudo useradd minnie -s /bin/rbash
 sudo passwd 米妮
sudo mkdir -p /home/minnie/bin 

当 minnie 登录时,她将在受限 shell 中运行。

 光盘

她不能调用需要包含正斜杠“ / ”的命令:

 /usr/bin/ping 

但是,她仍然可以执行在路径中找到的命令。

广告

这不是您可能期望的行为,当然也不是我们想要的。 为了进一步加强限制,我们需要更改 minnie 的 shell 用于查找命令的路径。

收紧限制

当我们创建 minnie 的主目录“/home/minnie”时,我们还创建了一个“/home/minnie/bin”目录。 这就是该目录发挥作用的地方。

我们将编辑 minnie 的“.bash_profile”文件并将她的路径设置为仅指向该目录。 我们还将限制 minnie 的“.bash_profile”文件,以便只有 root 可以编辑它。 这意味着没有其他用户可以编辑该文件并更改她的路径。

 sudo gedit /home/minnie/.bash_profile 

编辑现有的“PATH=”或添加以下行:

 PATH=$HOME/bin 

保存文件。 我们将使用chown命令将文件的所有者更改为 root,并使用chmod命令更改文件权限。 只有 root 用户才能编辑该文件。

 sudo chown root:root /home/minnie/.bash_profile
 sudo chmod 755 /home/minnie/.bash_profile
 ls -l /home/minnie/.bash_profile 

下次用户 minnie 登录时,她的路径指向一个文件夹。

广告

我们的受限用户 minnie 只能使用 Bash 内置命令,例如echoaliaslogout 。 她甚至不能使用ls

 ls 

如果我们希望他们能够做任何有用的事情,我们就需要稍微放松一下我们的束缚。 我们将创建一些从 minnie 的“bin”目录到我们希望 minnie 能够使用的命令的符号链接。

 sudo ln -s /bin/ls /home/minnie/bin
 sudo ln -s /bin/top /home/minnie/bin
 sudo ln -s /bin/uptime /home/minnie/bin
 sudo ln -s /bin/pinky /home/minnie/bin 

当 minnie 下次登录时,她会发现她可以使用 Bash 内置命令,以及已链接到的那些命令。

 ls
 小指戴夫
正常运行时间

限制现有用户

我们创建了 minnie 作为新用户。 要更改现有用户的 shell,我们可以使用usermod命令的-s (shell)选项。

 sudo usermod -s /bin/rbash 玛丽

您可以使用“/etc/passwd”文件中的less命令快速查看设置为用户默认shell 的shell。

 少 /etc/passwd 

我们可以看到用户 mary 下次登录时将使用受限 shell。

广告

请记住应用其他更改来限制他们的$PATH环境变量并设置您希望用户 mary 能够执行的命令。

限制脚本

普通的、不受限制的用户可以启动在受限制的 shell 中执行的脚本。 复制以下行并将它们粘贴到编辑器中。 将文件另存为“restricted.sh”并关闭编辑器。

 #!/bin/bash

# 脚本在普通的 Bash shell 中启动
echo "## 在不受限制的模式下!##"

回声
echo "当前目录:`pwd`"
echo "改变目录"
cd /usr/share
echo "现在在目录中:`pwd`"
echo "切换到主目录"
光盘~
echo "现在在目录中:`pwd`"

# 设置受限模式
设置-r

回声
echo "## 在受限模式下!##"

回声
echo "当前目录:`pwd`"
echo "将目录更改为 /home/"
光盘 /home
echo "仍在目录中:`pwd`"

回声
echo "试图启动另一个 shell"
/bin/bash

回声
echo "试图重定向命令输出"
ls -l $HOME > my_files.txt
猫 my_files.txt
回声

出口 0

我们需要使用带有+x (执行)标志的chmod命令来使脚本可执行。

 chmod +x 受限.sh 

脚本的第一部分在普通 shell 中运行。

 ./restricted.sh 

脚本的第二部分——“set -r”行之后的位——在受限 shell 中运行。

在脚本的受限部分中,尝试的操作均未成功。

广告

通过在第一行添加-r可以使整个脚本在受限 shell 中运行:

 !#/bin/bash -r

记住胡迪尼

受限制的 shell 很有用,但并非完全可靠。 足够熟练的用户可能能够逃脱它们。 但是,如果使用得当,它们是为特定帐户建立一组限制的有用方法。