什么是/bin/rbash?

d a*_*s y 14 command-line bash

我正在学习Common shell 程序

当我运行时cat /etc/shells,它显示:

# /etc/shells: valid login shells
/bin/sh
/bin/dash
/bin/bash
/bin/rbash
Run Code Online (Sandbox Code Playgroud)

什么是/bin/rbash在这里吗?是否在脚本中使用?

Sor*_*n A 17

rbash 是 bash 的受限(减少功能)版本。请参阅这篇文章:https : //en.wikipedia.org/wiki/Restricted_shell

从文章:

在受限 shell 中不允许进行以下操作:

changing directory
specifying absolute pathnames or names containing a slash
setting the PATH or SHELL variable
redirection of output
Run Code Online (Sandbox Code Playgroud)

bash 增加了进一步的限制,包括:

limitations on function definitions
limitations on the use of slash-ed filenames in bash builtins
Run Code Online (Sandbox Code Playgroud)

受限 Korn shell 中的限制与受限 Bourne shell 中的限制非常相似。


Zan*_*nna 16

来自维基百科

受限 shell 是一个 Unix shell,它限制了交互式用户会话或在其中运行的 shell 脚本可用的一些功能。它旨在提供额外的安全层,但不足以允许执行完全不受信任的软件。在原始的 Bourne shell[1] 及其后来的对应版本 bash[2] 和 Korn shell [3] 中可以找到受限模式操作。在某些情况下,受限 shell 与 chroot jail 一起使用,以进一步尝试限制对整个系统的访问。

有关适用于受限外壳的限制,请参阅Soren A 的回答

您可以bash在受限模式下运行

bash -r
bash --restricted
Run Code Online (Sandbox Code Playgroud)

在我的系统上:

$ file /bin/rbash
/bin/rbash: symbolic link to bash
Run Code Online (Sandbox Code Playgroud)

所以如果我跑/bin/rbash,我就跑bash

创建一个名为 rbash 的链接直接指向 bash 就足够了。尽管这会直接调用 bash 而没有-r--restricted 选项,但 bash 确实识别出它是通过 rbash 调用的,并且它确实作为受限制的 shell 出现。

正如您可以轻松测试的那样:

zanna@monster:~$ rbash
zanna@monster:~$ cd playground
rbash: cd: restricted
Run Code Online (Sandbox Code Playgroud)

  • 可以将它设置为您想要在特定目录中捕获的用户的默认 shell,例如 @passa (3认同)
  • @passa 不是脚本,而受限的 shell 对脚本来说毫无用处。由于您知道或可以确定在脚本中执行了哪些操作,因此没有必要使用受限制的 shell 来编写脚本。 (2认同)