6.10 受限 shell(The Restricted Shell)
如果是使用的 rbash 启动的 Bash,或在调用 Bash 时提供了“—restricted”或“-r”选项,则 shell 变为受限制的。受限 shell 在用于设置环境时比标准 shell 更可控。除了下面列出的条目在受限 shell 中是不允许的或不会被执行的,其它行为都与 bash 是一样的:
- 使用内建命令 cd 改变目录。
- 设置或释放变量 SHELL、PATH、HISTFILE、ENV 或 BASH_ENV 的值。
- 指定包含带有斜线的命令名。
- 指定包含带有斜线的文件名作为内建命令“.”的参数。
- 指定包含带有斜线的文件名作为内建命令“history”的参数。
- 指定包含带有斜线的文件名作为内建命令“hash”的“-p”选项的参数。
- 在启动时从 shell 环境导入函数定义。
- 在启动时从 shell 环境解析变量 SHELLOPTS 的值。
- 使用重定向操作符“>”、“>|”、“<>”、“>&”、“&>”和“>>”进行重定向输出。
- 使用内建命令 exec 来代替 shell 执行其它命令。
- 使用带有“-f”和“-d”选项的内建命令 enable 来添加或删除内建命令。
- 对内建命令 command 使用“-p”选项。
- 使用“set +r”或“set +o restricted”来关闭受限模式。
在读取了所有的启动文件之后,强制进入受限模式。
当发现执行的命令是一个 shell 脚本(参见 3.8《shell 脚本》)时,rbash 会在生成的用于执行脚本的 shell 中关闭这些限制。
shell 受限模式只是组成有用受限环境的一个部分。其应该还有:为允许执行很少一部分已验证命令(能够让 shell 规避特定攻击的命令)而设置的 PATH 值;在登录后使用户处于一个不可写入的目录,而不是其家目录;不允许受限 shell 执行 shell 脚本;和清除一些变量环境,使一些命令不能改变其行为(例如,VISUAL 或 PAGER)。
现代系统提供更安全的方式来执行受限环境,例如“jails”、“zones”或“containers”。