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/
相关推荐
数形长夏4 小时前
命令行界面的神秘符号,是上一代程序复用的尝试
架构·bash·batch
dingdingfish1 天前
Bash学习 - 第6章:Bash Features,第7节:Arrays
bash·shell·array·index·associate
wsad05321 天前
Linux Shell脚本执行方式全解析:source、点号、路径、bash与exec的区别
linux·运维·bash·shell
叠叠乐1 天前
EasyTier 免费自建自用5$每个月的服务器
linux·运维·bash
白太岁2 天前
操作系统开发:(8) 任务/线程的创建、调度与管理(实现 tasks.h 与 tasks.c)
c语言·开发语言·bash
之歆3 天前
Bash 循环与函数、Linux 进程管理
linux·chrome·bash
dingdingfish3 天前
Bash学习 - 第6章:Bash Features,第3节:Interactive Shells
bash·shell·interactive
追夢秋陽3 天前
MacOS app打包Dmg线下分发测试及公证shell脚本
macos·shell·dmg·cocoa打包·打包脚本
袁袁袁袁满3 天前
Linux怎么创建Shell脚本.sh文件
linux·运维·服务器·shell·shell脚本.sh文件·创建shell脚本·创建.sh文件