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/
相关推荐
苏灿烤鱼18 小时前
把 Agent 做成一家公司,真比通用提示词好用吗?
python·agent·shell
寺中人1 天前
Linux 基础命令入门实战教程:从零掌握常用操作,新手快速上手
linux·运维·服务器·shell·linux 命令·linux 基础教程·linux 入门
k4m7v2pz5 天前
34 天 33 个版本:rvs(rust-verb-shell)如何用版本号对抗 AI 误判
rust·shell·命令行工具·ai agent·系统信息·跨平台开发
笨笨狗吞噬者5 天前
IRIS: shell 中的智能实时输入提示工具
github·shell
大魔王爱学习7 天前
终端bash&zsh中实现基于前缀的历史命令搜索
linux·bash
酷可达拉斯7 天前
Linux操作系统-磁盘空间使用率100%如何处理?
linux·运维·服务器·云计算·bash
Lyra_Infra7 天前
Java 应用启动脚本 JDK 路径适配优化文档
java·shell
寒水馨9 天前
macOS下载、安装PowerShell-v7.6.4(附安装包powershell-7.6.4-osx-arm64.pkg)
macos·自动化·跨平台·shell·脚本·命令行·powershell
Nuanyt10 天前
Linux系统的 Shell 常见指令和常见知识点(以bash为主)
linux·运维·chrome·bash
爱码少年10 天前
一条Shell命令实现文件目录服务器间快速转移
服务器·shell