受限的shell(RESTRICTED SHELL)
如果 bash 以 rbash 名称启动,或者启动时使用了 -r 选项,那么它成为受限的 shell。 受限的 shell 一般用来建立一个比标准的 shell 受到更多控制的环境。 它的行为与 bash 一致,除了下列行为是不允许的 (disallowed) 或不会运行的 (not performed)。
•
使用 cd 来改变路径;
•
设置或取消 SHELL, PATH, ENV, 或 BASH_ENV 变量的值;
•
指定的命令名中包含 / ;
•
指定包含 / 的文件名作为传递给内建命令 . 的参数;
•
指定包含斜杠 (slash) 的文件名作为 -p 选项的参数,传递给 hash 内建命令;
•
启动时从 shell 环境中导入 (import) 函数定义;
•
启动时解释 shell 环境中 SHELLOPTS 的值;
•
使用 >, >|, <>, >&, &>, 和 >> 等重定向操作符重定向输出;
•
使用 exec 内建命令来以另一个命令替换 shell;
•
使用 enable 内建命令的 -f 和 -d 选项来增加和删除内建命令;
•
使用 enable 内建命令来允许和禁止 shell 内建命令;
•
指定 command 内建命令的 -p 选项;
•
使用 set +r 或 set +o restricted 来关闭受限模式。
这些限制在所有启动文件读取之后才会生效。
当一个 shell 脚本作为一个命令执行时 (参见上面的 命令执行(COMMAND EXECUTION) 章节), rbash 关闭为执行脚本而孵化 (spawn) 的 shell 的所有限制。