受限的shell限制了用户帐户在Linux上可以做什么。受限用户不能更改其目录,您可以控制他们可以访问哪些命令。下面介绍如何在Linux上设置受限shell。
受限shell不是另一个shell。这是标准外壳的另一种模式。Bash、Korn、Fish和其他shell都可以在受限shell模式下启动。在本文中,我们将使用Bash,但相同的原则也适用于其他shell。
因为受限shell只是使用标准shell的另一种方式,所以它们很容易设置。没有什么可安装的,而且它们在Linux所在的任何地方都可用。
受限shell也可以应用于脚本。这就确保了如果它们被错误地写入,可能造成的任何损坏都被限制在它们的受限世界中,并且它们无法访问您的整个计算机。
不过,请注意,受限炮弹并不是完全可以逃脱的。有足够知识的人可以逃脱限制。它们非常适合为临时用户设置安全边界,但不要依赖受限shell来实现生产系统的任何真实安全。
相关:Bash、Zsh和其他Linux shell之间有什么区别?
当您将Bash作为受限shell运行时,用户将从中删除一些功能。具体来说,用户不能:
您可以使用-r(restricted)选项来调用受限制的Bash shell。禁止尝试执行更改工作目录之类的简单任务。一条简短的消息告诉您cd受到限制。
bash -r cd DocumentsBash shell还可以检测何时使用“rbash”而不是“Bash”调用它,这使得它也以受限shell的形式启动。这提供了一种为特定用户设置默认shell的方便方法,我们将很快使用它。
如果我们在Ubuntu上使用whereis命令来查找rbash文件,我们将看到可执行文件位于“usr/bin”目录中。手册页位于“/usr/share/man/man1”目录中。
将ls命令与-l(long)选项一起使用,可以发现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。我们还将使用asswd命令设置帐户密码,然后为它们创建主文件夹。
mkdir命令中的-p(parents)标志告诉mkdir创建目标目录以及它需要创建的任何父目录。因此,通过创建“/home/minnie/bin”目录,我们可以同时创建“/home/minnie”目录。
sudo useradd minnie -s /bin/rbash sudo passwd minnie sudo mkdir -p /home/minnie/bin当敏妮登录时,她将在一个受限的外壳中运行。
cd她不能调用需要包含正斜杠“/”的命令:
/usr/bin/ping但是,她仍然可以执行在路径中找到的命令。
ping这不是你所期望的行为,当然也不是我们想要的。为了进一步加强限制,我们需要更改minnie的shell用于查找命令的路径。
当我们创建minnie的home目录“/home/minnie”时,我们还创建了一个“/home/minnie/bin”目录。这就是目录发挥作用的地方。
我们将编辑minnie的“.bash\u profile”文件,并将她的路径设置为仅指向该目录。我们还将限制minnie的“.bash\u profile”文件,以便只有root用户可以编辑它。这意味着没有其他用户可以编辑该文件并更改其路径。
sudo gedit /home/minnie/.bash_profile编辑现有“PATH=”或添加以下行:
PATH=$HOME/bin保存文件。我们将使用chown命令将文件的所有者更改为root,并使用chmod命令更改文件权限。只有根用户才能编辑文件。
sudo chown root:root /home/minnie/.bash_profile sudo chmod 755 /home/minnie/.bash_profile ls -l /home/minnie/.bash_profile下一次用户minnie登录时,她的路径指向一个文件夹。
我们的受限用户minnie只能使用Bash内置的命令,比如echo、alias和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中执行的脚本。复制以下行并将其粘贴到编辑器中。将文件另存为“受限.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我们需要使用chmod命令和+x(execute)标志来使脚本可执行。
chmod +x restricted.sh脚本的第一部分在普通shell中运行。
./restricted.sh脚本的第二部分是在受限shell中运行的“set-r”行之后的位。
在脚本的受限制部分中,没有任何尝试的操作成功。
通过在第一行添加-r,可以使整个脚本在受限shell中运行:
!#/bin/bash -r受限炮弹是有用的,但并非完全无误。一个足够熟练的用户可以逃脱他们。但如果使用得当,它们是为特定帐户建立一组限制的有用方法。
... 如何在windows10上安装linux bash shell ...
...一个分支,它的创建完全是为了避免使用systemd。 相关:如何在Linux系统上管理Systemd服务 $home目录 在Linux目录结构中,您所做的一切都驻留在“/home”目录中。您的数据文件、图像、音乐和整个个人目录树都存储在这个以您的用...
Bash不是唯一的Linux shell。很容易尝试其他的shell,比如非常流行的Zsh。找到一个您喜欢的shell后,使用chsh命令将其设置为默认shell。我们会教你怎么做。 为什么贝壳很重要 shell位于您和操作系统之间。它在终端窗口内提供环境...
Linux上有多种类型的环境变量。了解如何查看它们,为本地和远程登录创建它们,并使它们在重新启动后仍然有效。 环境变量的工作原理 启动终端窗口及其内部的shell时,会引用一组变量,以确保shell配置正确。这些变量还确...
...但这并没有什么不好的地方。我们将解释它的作用,以及如何调整它。 什么是$path,它是如何工作的($path on linux, and how does it work)? 当您在终端窗口中键入一个命令并按Enter键时,您甚至在执行命令之前就开始了大量的活动。 B...
...只想在系统有空闲资源时运行进程,可以使用批处理。 如何安排linux作业 cron守护进程维护它在特定时间运行的作业列表。这些任务和程序按预定时间在后台运行。这为您安排需要重复的任务提供了极大的灵活性。无论您需要...
...念在Linux中意义深远。很容易看出,Linux中的文件权限是如何成为用户特权和权限的支柱之一的。如果您拥有一个文件或目录(一种特殊类型的文件),您可以对其执行您喜欢的操作,包括编辑、重命名、移动和删除它。您还可...
...法是安装足够的操作系统,以完成所需的任务。通过查看如何使用chroot环境来回答“what is required”问题。 一些常见用途是: 软件开发和产品验证。开发人员编写软件,产品验证团队(PV)对其进行测试。有时PV发现的问题无法...