最新消息:

Linux bash受限的shell(RESTRICTED SHELL)

Linux ipcpu 9501浏览

Linux bash受限的shell(RESTRICTED SHELL)

什么是受限的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

  1. cp /bin/bash /bin/rbash
  2. useradd -s /bin/rbash user001
  3. #user001@用户user001登陆之后即进入受限shell

为了使用户user001能执行一些命令,我们可以做一些软链接

  1. mkdir -p /home/user001/.bin
  2. cd /home/user001/.bin
  3. ln -s /bin/su su

打开 /home/user001/.bash_profile
删掉所有BASH内容,添加1行

  1. export PATH=$HOME/.bin

测试一个受限的shell

测试运行示例如下:

  1. [user001@zjm-17 test]$ cd /bin/
  2. bash: cd: restricted
  3. [user001@zjm-17 test]$ ps
  4. -rbash: ps: command not found
  5. [user001@zjm-17 test]$ PATH=$PATH:/bin:/sbin
  6. bash: PATH: readonly variable
  7. [user001@zjm-17 test]$ /bin/vi -h
  8. bash: /bin/vi: restricted: cannot specify / in command names
  9. [user001@zjm-17 test]$ su - test
  10. Password:
  11. [test@zjm-17 ~]$
  12. #@该用户只能执行su命令

受限shell的安全

维基百科上(参考链接1)提到了受限shell逃逸方式,因此对于受限shell的可执行命令要有严格的过滤。
bash vi vim 都不能放到可执行列表中。

参考链接

http://en.wikipedia.org/wiki/Restricted_shell#Weaknesses_of_a_restricted_shell

来自为知笔记(Wiz)

转载请注明:IPCPU-网络之路 » Linux bash受限的shell(RESTRICTED SHELL)