当前位置: 首页 > 文档资料 > Shell 中文文档 >

第21章. 受限 shell(Restricted Shells)

优质
小牛编辑
130浏览
2023-12-01

在受限 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