第21章. 受限shell(Restricted Shells)

在受限shell中禁用的命令

在受限shell中运行的脚本或脚本的个代码断会禁用一些正常shell中可以执行的命令.这是限制脚本用户的权限和最小化运行脚本导致的破坏的安全措施.

使用cd 命令更改工作目录.

更改环境变量$PATH, $SHELL, $BASH_ENV,或$ENV 的值.

读或更改shell环境选项变量$SHELLOPTS的值.

输出重定向.

调用的命令路径中包括有一个或更多个/字符.

调用exec来把当前的受限shell替换成另外一个不同的进程.

脚本中许多其他无意中能破坏或捣乱的命令.

在脚本中企图脱离受限shell模式的操作.


例子 21-1. 在受限的情况下运行脚本

   1 #!/bin/bash
   2 
   3 #  脚本开头以"#!/bin/bash -r"来调用
   4 #+ 会使整个脚本在受限模式下运行.
   5 
   6 echo
   7 
   8 echo "Changing directory."
   9 cd /usr/local
  10 echo "Now in `pwd`"
  11 echo "Coming back home."
  12 cd
  13 echo "Now in `pwd`"
  14 echo
  15 
  16 # 不受限的模式下,所有操作都能正常成功.
  17 
  18 set -r
  19 # set --restricted    也能起相同的作用.
  20 echo "==> Now in restricted mode. <=="
  21 
  22 echo
  23 echo
  24 
  25 echo "Attempting directory change in restricted mode."
  26 cd ..
  27 echo "Still in `pwd`"
  28 
  29 echo
  30 echo
  31 
  32 echo "\$SHELL = $SHELL"
  33 echo "Attempting to change shell in restricted mode."
  34 SHELL="/bin/ash"
  35 echo
  36 echo "\$SHELL= $SHELL"
  37 
  38 echo
  39 echo
  40 
  41 echo "Attempting to redirect output in restricted mode."
  42 ls -l /usr/bin > bin.files
  43 ls -l bin.files    # 尝试列出刚才创建的文件.
  44 
  45 echo
  46 
  47 exit 0