Bash学习 - 第6章:Bash Features,第10节:The Restricted Shell

本文为 Bash Reference Manual第6章:Bash Features 第10节:The Restricted Shell 的读书笔记。

完整的笔记目录参见Bash学习笔记总目录。

6.10 The Restricted Shell

如果使用名称 rbash 启动 Bash,或者在启动时提供 --restricted 或 -r 选项,shell 将变为受限模式。受限 shell 用于设置比标准 shell 更受控制的环境。受限 shell 的行为与 bash 完全相同,唯一的例外是以下操作被禁止或不会执行:

  • 使用 cd 内置命令更改目录。(只能呆在主目录)
  • 设置或取消设置 SHELL、PATH、HISTFILE、ENV 或 BASH_ENV 变量的值。(这些变量只读)
  • 使用包含斜杠的命令名称。
  • 将包含斜杠的文件名作为 . 内置命令的参数。
  • 使用 . 内建命令的 -p 选项来指定搜索路径。
  • 将包含斜杠的文件名作为参数传递给 history 内建命令。
  • 将包含斜杠的文件名作为参数传递给 hash 内建命令的 -p 选项。
  • 在启动时从 shell 环境导入函数定义。
  • 在启动时解析 SHELLOPTS 的值。
  • 使用 '>'、'>|'、'<>'、'>&'、'&>' 和 '>>' 重定向操作符进行输出重定向。
  • 使用 exec 内建命令用另一个命令替换 shell。
  • 使用 enable 内建命令的 -f 和 -d 选项添加或删除内建命令。
  • 使用 enable 内建命令启用被禁用的 shell 内建命令。
  • 为 command 内建命令指定 -p 选项。
  • 使用 'set +r' 或 'shopt -u restricted_shell' 关闭受限模式。

这些限制在读取任何启动文件后生效。

当发现执行的命令是一个 shell 脚本时(参见 Shell 脚本),rbash 会在执行该脚本的 shell 中关闭任何限制。

受限 shell 模式只是构建有用受限环境的一个组成部分。它应配合将 PATH 设置为仅允许执行少量经过验证的命令(允许 shell 转义的命令特别容易受攻击)、在登录后将当前目录更改为非可写目录而非 $HOME、不允许受限 shell 执行 shell 脚本,以及清理会导致某些命令修改其行为的环境变量(例如 VISUAL 或 PAGER)。

现代系统提供了更安全的方法来实现受限环境,例如监狱(jails)、区域(zones)或容器(containers)。

示例:

bash 复制代码
$ bash -r
$ cd /usr
bash: cd: restricted
$ echo $PATH
/home/vagrant/.local/bin:/home/vagrant/bin:/usr/share/Modules/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin
$ PATH=$PATH:.
bash: PATH: readonly variable
$ which find
bash: /usr/bin/which: restricted: cannot specify `/' in command names
$ . /usr/bin/a.sh
bash: .: /usr/bin/a.sh: restricted
$ . -p /usr/local/bin:/usr/bin a.sh
bash: .: a.sh: restricted
$ echo $BASH_VERSION
5.3.0(1)-release
$ ls > 1
bash: 1: restricted: cannot redirect output
$ ( a=1 )

$ exec 4>&1
$ exec 4>&-
$ exec bash
bash: exec: restricted

$ enable -a|grep test
enable test
$ enable -d test
bash: enable: restricted
$ enable -n test
$ enable test
bash: enable: restricted

$ command -p ls
bash: command: -p: restricted

$ shopt restricted_shell
restricted_shell        on
$ shopt -u restricted_shell
$ shopt restricted_shell
restricted_shell        on

💡 Restricted Shell(受限Shell) 是bash的一种特殊模式,它严格限制用户能执行的操作,主要用于创建安全受限的环境。

以下是一个概念示例。

bash 复制代码
# 1. 创建专门目录
sudo mkdir -p /home/<restricted_user>/bin
sudo mkdir -p /home/<restricted_user>/data

# 2. 创建受限用户
sudo useradd -s /bin/rbash <restricted_user>
sudo passwd <restricted_user>

# 3. 设置用户目录权限
sudo chown -R <restricted_user>:<restricted_user> /home/<restricted_user>
sudo chmod 755 /home/<restricted_user>

# 4. 创建自定义PATH
sudo mkdir -p /home/<restricted_user>/.bash_profile
echo 'PATH=$HOME/bin' | sudo tee /home/<restricted_user>/.bash_profile
sudo chown <restricted_user>:<restricted_user> /home/<restricted_user>/.bash_profile
sudo chmod 644 /home/<restricted_user>/.bash_profile

# 5. 创建符号链接到允许的命令
sudo ln -s /bin/ls /home/<restricted_user>/bin/
sudo ln -s /usr/bin/whoami /home/<restricted_user>/bin/
sudo ln -s /usr/bin/date /home/<restricted_user>/bin/
相关推荐
Lsetea2 天前
OpenSSL s_client退出码为0却证书验证失败:严格校验与Shell管道排查
https·shell·ssl证书·openssl·tls
fox_charon3 天前
Windows 下 CLI 参数的引号陷阱:为什么 --resume 'uuid' 会失败
windows·shell·cmd·cli·引号
树下水月4 天前
linux 系统一键巡检sh
bash
吴声子夜歌12 天前
Shell编程实例——编写安全的shell脚本(二)
linux·运维·shell
吴声子夜歌13 天前
Shell编程实例——内务及管理任务(一)
linux·运维·shell
吴声子夜歌13 天前
Shell编程实例——高级脚本编程(一)
linux·运维·网络·shell
吴声子夜歌14 天前
Shell编程实例——bash的配置与自定义(二)
linux·运维·shell
吴声子夜歌14 天前
Shell编程实例——与解析相关的任务(二)
linux·运维·shell
吴声子夜歌14 天前
Shell编程实例——脚本编程的附加特性
linux·运维·shell
云计算练习生15 天前
什么是内核?操作系统内核到底管哪些事
linux·windows·操作系统·内核·shell