shell脚本受限执行

shell 中运行的脚本或脚本的个代码断会禁用一些正常 shell 中可以执行的命令.
这是限制脚本用户的权限和最小化运行脚本导致的破坏的安全措施.
受限的内容包括:
使用 cd 命令更改工作目录. 
更改环境变量$PATH, $SHELL, $BASH_ENV,或$ENV 的值. 
读或更改 shell 环境选项变量$SHELLOPTS 的值. 
 输出重定向. 
调用的命令路径中包括有一个或更多个/字符.
脚本中许多其他无意中能破坏或捣乱的命令. 在脚本中企图脱离受限 shell 模式的操作 .
如下脚本测试受限shell:

allenle@backupabc:~$ cat  retrictedshell.sh
 #!/bin/bash 
  echo
  echo "I am in `pwd`" 
  echo "Changing directory." 
  cd /usr 
  echo "New dirctory in `pwd`" 
  echo "Coming back home." 
  cd -
  echo "I am again in `pwd`" 
  echo "--------------------restricted shells------------------------------"
  set -r 
     #or  set --restricted 
  echo "==> Now in restricted mode. <==" 
  echo 
  echo 
  echo "Tring directory change in restricted mode." 
  cd .. 
  echo "I am in `pwd`" 
  echo 
  echo 
         
  echo "\$SHELL = $SHELL" 
  echo "Attempting to change shell in restricted mode." 
  SHELL="/bin/ash" 
  echo 
  echo "\$SHELL= $SHELL" 

  echo 
  echo 

  echo "Attempting to redirect output in restricted mode." 
  ls -l /usr/bin > bin.files 
  ls -l bin.files # Try to list attempted file creation effort. 
  echo 
  exit 0

从结果图看,在非受限模式下,变更目录的操作成功了。

当改变了shell模式为受限模式(set -r),cd命令变更目录的操作就不成功了。

不仅如此,当试图修改$shell变量时,也是失败的。

 注:脚本开头以"#!/bin/bash -r"来调用,则以受限模式运行脚本。

猜你喜欢

转载自blog.csdn.net/bigwood99/article/details/128170830