MST

星途 面试题库

面试题:Bash脚本的安全强化与高级权限控制

在一个多用户的Linux系统中,编写一个Bash脚本,实现基于用户组的细粒度权限控制。对于不同用户组,分别设置不同的文件访问权限,包括文件的读、写、执行权限以及目录的访问和操作权限。同时,脚本要具备安全审计功能,能够记录所有权限变更操作,并对非法权限变更尝试进行阻止和记录,还要通过SELinux等安全模块确保系统整体安全策略不受影响。
14.2万 热度难度
编程语言Bash

知识考点

AI 面试

面试题答案

一键面试

以下是一个满足需求的Bash脚本示例:

#!/bin/bash

# 日志文件路径
LOG_FILE="/var/log/permission_changes.log"

# 确保脚本以root权限运行
if [ "$(id -u)" != "0" ]; then
    echo "此脚本必须以root权限运行"
    exit 1
fi

# 记录权限变更操作到日志
log_permission_change() {
    local action=$1
    local user_group=$2
    local file_dir=$3
    local permissions=$4
    echo "$(date +'%Y-%m-%d %H:%M:%S') - $action - 用户组: $user_group - 文件/目录: $file_dir - 权限: $permissions" >> $LOG_FILE
}

# 阻止并记录非法权限变更尝试
block_illegal_change() {
    local user_group=$1
    local file_dir=$2
    local permissions=$3
    echo "$(date +'%Y-%m-%d %H:%M:%S') - 非法权限变更尝试 - 用户组: $user_group - 文件/目录: $file_dir - 权限: $permissions" >> $LOG_FILE
    echo "非法权限变更尝试已被阻止"
}

# 设置用户组权限
set_group_permissions() {
    local user_group=$1
    local file_dir=$2
    local permissions=$3

    # 检查SELinux状态
    selinux_status=$(getenforce)
    if [ "$selinux_status" == "Enforcing" ]; then
        # 暂时关闭SELinux
        setenforce 0
    fi

    # 检查文件或目录是否存在
    if [ -e "$file_dir" ]; then
        current_permissions=$(stat -c %a "$file_dir")
        if [ "$current_permissions" != "$permissions" ]; then
            if chown :$user_group "$file_dir" && chmod $permissions "$file_dir"; then
                log_permission_change "权限设置" "$user_group" "$file_dir" "$permissions"
            else
                block_illegal_change "$user_group" "$file_dir" "$permissions"
            fi
        else
            echo "文件/目录 $file_dir 已经具有所需权限 $permissions"
        fi
    else
        echo "文件/目录 $file_dir 不存在"
    fi

    # 恢复SELinux状态
    if [ "$selinux_status" == "Enforcing" ]; then
        setenforce 1
    fi
}

# 示例调用
# 为group1设置文件/目录权限
set_group_permissions "group1" "/path/to/file_or_directory" "640"
# 为group2设置文件/目录权限
set_group_permissions "group2" "/another/path/to/file_or_directory" "750"
  1. 脚本说明

    • 首先检查脚本是否以root权限运行,如果不是则退出。
    • log_permission_change函数用于记录权限变更操作到日志文件。
    • block_illegal_change函数用于阻止并记录非法权限变更尝试。
    • set_group_permissions函数实现了具体的权限设置功能,在设置权限前会检查SELinux状态,如果处于强制模式则暂时关闭SELinux,设置完权限后再恢复。同时会检查文件或目录是否存在,以及当前权限是否与目标权限一致,不一致则尝试设置权限并记录操作,设置失败则阻止并记录。
  2. 示例调用

    • 脚本末尾展示了如何调用set_group_permissions函数为不同用户组设置文件或目录的权限。你可以根据实际需求修改用户组、文件或目录路径以及权限值。
  3. 日志记录

    • 所有权限变更操作和非法权限变更尝试都会记录到/var/log/permission_changes.log文件中,方便进行安全审计。
  4. SELinux集成

    • 通过检查和临时修改SELinux状态,确保在设置权限时系统整体安全策略不受影响。

请根据实际的Linux系统环境和需求对脚本进行适当调整。