面试题答案
一键面试1. 系统层面安全策略
- SELinux 与 Bash 脚本配合
- 原理:SELinux(Security-Enhanced Linux)是一种强制访问控制(MAC)安全模块,通过为系统中的每个进程、文件等定义安全上下文,限制进程对资源的访问。Bash 脚本作为一种进程,也受到 SELinux 安全策略的约束。
- 实现方式:
- 配置 SELinux 策略:编写自定义 SELinux 策略模块,例如使用
sepolicy -dev
工具,为运行 Bash 脚本的特定用户、目录或脚本本身定义相应的安全上下文和访问权限。例如,若脚本需要读取特定配置文件,可以在策略中授予相应的读取权限。 - 标签文件和目录:使用
chcon
命令更改脚本、相关文件和目录的安全上下文标签,使其与定义的 SELinux 策略匹配。如chcon -t my_script_t my_script.sh
,将my_script.sh
标记为my_script_t
类型,符合策略中对该类型的权限设定。
- 配置 SELinux 策略:编写自定义 SELinux 策略模块,例如使用
- AppArmor 与 Bash 脚本配合
- 原理:AppArmor 也是一种强制访问控制安全模块,它通过为每个应用程序(包括 Bash 脚本执行环境)定义一个配置文件,限制应用程序可访问的文件、网络等资源。
- 实现方式:
- 创建 AppArmor 配置文件:在
/etc/apparmor.d/
目录下创建针对 Bash 脚本的配置文件,例如/etc/apparmor.d/my_script
。在配置文件中定义脚本可访问的文件路径、网络端口等规则。如/{path/to/script,path/to/script/*} r,
允许脚本读取指定目录及其子目录下的文件。 - 加载配置文件:使用
apparmor_parser -r /etc/apparmor.d/my_script
命令重新加载配置文件,使新规则生效。
- 创建 AppArmor 配置文件:在
2. 脚本内部机制安全策略
- 检测和应对缓冲区溢出攻击
- 原理:缓冲区溢出攻击是由于程序向缓冲区写入的数据超出了其预先分配的大小,导致覆盖相邻内存区域的数据,可能引发程序崩溃或执行恶意代码。在 Bash 脚本中,主要通过输入验证和限制来预防此类攻击。
- 实现方式:
- 输入验证:使用
read
命令读取用户输入时,设定输入长度限制。例如read -n 10 input
,仅读取最多 10 个字符的输入,防止超长输入导致缓冲区溢出。同时,对输入内容进行正则表达式验证,确保输入符合预期格式。如if [[ $input =~ ^[a-zA-Z0-9]+$ ]]; then...
,仅允许字母和数字的输入。 - 使用安全函数库:如果脚本调用外部命令,尽量使用安全版本的函数库。例如,使用
gsed
(GNU sed 的安全版本)代替普通sed
,一些安全函数库对输入有更严格的检查和限制,减少缓冲区溢出风险。 - 避免危险操作:在脚本中避免直接操作内存等底层、容易引发缓冲区溢出的操作。Bash 脚本通常在用户空间运行,不直接操作内存,但如果通过调用外部 C 程序等方式间接操作内存,要确保这些外部程序有充分的安全检查。
- 输入验证:使用