MST

星途 面试题库

面试题:Bash脚本的权限控制与安全审计

假设你有一个Bash脚本,它需要调用系统命令并操作敏感文件。请阐述如何通过合理设置脚本权限,以及在脚本内部进行安全审计来防止未授权访问和恶意篡改。同时给出相应的代码示例。
11.5万 热度难度
编程语言Bash

知识考点

AI 面试

面试题答案

一键面试

设置脚本权限

  1. 文件权限设置
    • 确保脚本文件本身只有文件所有者有读写执行权限。例如,对于脚本文件script.sh,可以使用以下命令设置权限:
    chmod 700 script.sh
    
    • 这样设置后,只有脚本所有者可以读取、写入和执行该脚本,其他用户无法访问或修改。
  2. 目录权限设置
    • 如果脚本位于特定目录,该目录的权限也应进行适当设置。例如,如果脚本在/usr/local/bin目录下,该目录权限一般设置为755,这样所有者可以完全控制,其他用户只有读和执行权限。
    chmod 755 /usr/local/bin
    

脚本内部安全审计

  1. 检查用户权限
    • 在脚本开头,可以检查执行脚本的用户是否具有足够权限。例如,对于需要root权限的操作,可以使用以下代码:
    if [ "$EUID" -ne 0 ]
    then 
        echo "This script must be run as root"
        exit 1
    fi
    
  2. 验证文件路径
    • 当操作敏感文件时,要验证文件路径的合法性,防止路径遍历攻击。例如,假设要读取一个敏感配置文件/etc/sensitive.conf
    config_file="/etc/sensitive.conf"
    if [[! $config_file =~ ^/etc/sensitive.conf$ ]]; then
        echo "Invalid file path"
        exit 1
    fi
    if [ -f "$config_file" ]; then
        # 这里进行读取文件等操作
        cat "$config_file"
    else
        echo "File not found"
        exit 1
    fi
    
  3. 使用安全的系统命令
    • 尽量使用绝对路径调用系统命令,防止恶意用户通过修改PATH环境变量来执行恶意命令。例如,使用/bin/ls而不是直接使用ls
    /bin/ls -l /path/to/sensitive/directory
    

以下是一个完整的示例脚本:

#!/bin/bash

# 检查用户是否为root
if [ "$EUID" -ne 0 ]
then 
    echo "This script must be run as root"
    exit 1
fi

# 验证敏感文件路径
sensitive_file="/etc/sensitive.conf"
if [[! $sensitive_file =~ ^/etc/sensitive.conf$ ]]; then
    echo "Invalid file path"
    exit 1
fi
if [ -f "$sensitive_file" ]; then
    # 备份敏感文件
    /bin/cp "$sensitive_file" "$sensitive_file.bak"
    echo "Sensitive file backed up"
else
    echo "File not found"
    exit 1
fi