zoukankan      html  css  js  c++  java
  • Shell脚本的安全性

    Shell脚本给管理和使用系统都带来了巨大的便利,然后在多用户系统中,也带来了许多安全性问题。在脚本中可能存在的安全性问题如下:

    (1)在脚本中使用cd命令,切换到不安全的目录执行脚本。

    (2)在脚本中修改了环境变量的值,从而导致系统产生了变化。

    (3)在某个目录中创建了非法的文件。例如使用重定向在目录/etc中创建了文件nologin,这将导致其他用户无法登陆。

    在Shell脚本中,提供了一种受限模式。脚本在受限模式中运行时,可以极大地保护系统的安全性。当脚本中出现cd命令、重定向、修改环境变量等不安全的行为时,Bash将会拒绝执行。

    1、调用Shell时启动受限模式

    要启动Bash的受限模式,可以在调用Shell语句后加上选项r,这时如果脚本中出现不安全的命令,会被系统拒绝。

    [root@localhost shell]# cat strict_mode.sh 
    #!/bin/bash -r
    #上面的选项r表示开启受限模式
    
    # this is an example script.
    # 2013.12.20
    
    cd /
    echo "`pwd`"
    
    echo "test" >~/test.tmp
    cat ~/test.tmp
    
    SHELL=/bin/ksh
    echo "SHELL="$SHELL

    [root@localhost shell]# ./strict_mode.sh 
    ./strict_mode.sh: line 6: cd: restricted
    /home/zhu/shell
    ./strict_mode.sh: line 9: /root/test.tmp: restricted: cannot redirect output
    cat: /root/test.tmp: No such file or directory
    ./strict_mode.sh: line 12: SHELL: readonly variable
    SHELL=/bin/bash

    从上面的执行结果可以看出,在Shell的受限模式下切换工作目录、重定向及修改环境变量等操作都被拒绝。

    2、使用set命令启动受限模式

    [root@localhost shell]# cat strict_mode.sh 
    #!/bin/bash 
    
    # this is an example script.
    # 2013.12.20
    
    set -r
    
    cd /
    echo "`pwd`"
    
    echo "test" >~/test.tmp
    cat ~/test.tmp
    
    SHELL=/bin/ksh
    echo "SHELL="$SHELL
    [root@localhost shell]# ./strict_mode.sh 
    ./strict_mode.sh: line 8: cd: restricted
    /home/zhu/shell
    ./strict_mode.sh: line 11: /root/test.tmp: restricted: cannot redirect output
    cat: /root/test.tmp: No such file or directory
    ./strict_mode.sh: line 14: SHELL: readonly variable
    SHELL=/bin/bash

    3、临时文件的安全性

    除了受限模式之外,如果在脚本中使用了临时文件,这些临时文件也可能会造成安全性问题。为此建议不要将临时文件放入系统临时目录/tmp中,因为任何登录系统的用户都可以看见系统临时目录中的文件。除此之外,脚本运行完成或由系统产生的中断退出时,建议删除脚本使用的临时文件。

  • 相关阅读:
    ES6 Promise的resolved深入理解
    npm 重点小结
    nodemon 基本配置与使用
    CSS 标准发布流程
    HTML表格基础详解
    <linux/init.h>,<linux/module.h>头文件不存在等问题的解决方法
    libcstl中的list没法插入自定义数据
    Linux下C编写基本的多线程socket服务器
    Linux下C连接MySql数据库
    C++实现最基本的LRUCache服务器缓存
  • 原文地址:https://www.cnblogs.com/nufangrensheng/p/3484493.html
Copyright © 2011-2022 走看看