面试题答案
一键面试设置脚本权限
- 文件权限设置:
- 确保脚本文件本身只有文件所有者有读写执行权限。例如,对于脚本文件
script.sh
,可以使用以下命令设置权限:
chmod 700 script.sh
- 这样设置后,只有脚本所有者可以读取、写入和执行该脚本,其他用户无法访问或修改。
- 确保脚本文件本身只有文件所有者有读写执行权限。例如,对于脚本文件
- 目录权限设置:
- 如果脚本位于特定目录,该目录的权限也应进行适当设置。例如,如果脚本在
/usr/local/bin
目录下,该目录权限一般设置为755
,这样所有者可以完全控制,其他用户只有读和执行权限。
chmod 755 /usr/local/bin
- 如果脚本位于特定目录,该目录的权限也应进行适当设置。例如,如果脚本在
脚本内部安全审计
- 检查用户权限:
- 在脚本开头,可以检查执行脚本的用户是否具有足够权限。例如,对于需要root权限的操作,可以使用以下代码:
if [ "$EUID" -ne 0 ] then echo "This script must be run as root" exit 1 fi
- 验证文件路径:
- 当操作敏感文件时,要验证文件路径的合法性,防止路径遍历攻击。例如,假设要读取一个敏感配置文件
/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
- 当操作敏感文件时,要验证文件路径的合法性,防止路径遍历攻击。例如,假设要读取一个敏感配置文件
- 使用安全的系统命令:
- 尽量使用绝对路径调用系统命令,防止恶意用户通过修改
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