使用受限 Shell 来限制 Linux 用户

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

受限炮弹

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

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

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

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

限制性打击

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

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

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

bash -r
cd Documents

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

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

使用带有 -l(长)选项的 ls 命令显示 rbash 实际上是 bash 的符号链接.

whereis rbash
ls -l /usr/bin/rbash

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

whereis rbash
sudo ln -s /bin/bash /bin/rbash
whereis rbash

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

限制用户

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

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

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

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

cd

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

/usr/bin/ping

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

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 内置命令,例如 echoalias 和 logout。她甚至不会使用 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
pinky dave
uptime

限制现有用户

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

sudo usermod -s /bin/rbash mary

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

less /etc/passwd

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

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

限制脚本

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

#!/bin/bash

# script starts in normal Bash shell
echo "## In UNrestricted mode! ##"

echo
echo "Current directory: `pwd`"
echo "Changing directory"
cd /usr/share
echo "Now in directory: `pwd`"
echo "Changing to home directory"
cd ~
echo "Now in directory: `pwd`"

# Setting restricted mode
set -r

echo
echo "## In restricted mode! ##"

echo
echo "Current directory: `pwd`"
echo "Changing directory to /home/"
cd /home
echo "Still in directory: `pwd`"

echo
echo "Trying to start another shell"
/bin/bash

echo
echo "Trying to redirect command output"
ls -l $HOME > my_files.txt
cat my_files.txt
echo

exit 0

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

chmod +x restricted.sh

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

./restricted.sh

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

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

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

!#/bin/bash -r

记住胡迪尼

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值