面试题答案
一键面试以下是一个满足需求的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"
-
脚本说明:
- 首先检查脚本是否以root权限运行,如果不是则退出。
log_permission_change
函数用于记录权限变更操作到日志文件。block_illegal_change
函数用于阻止并记录非法权限变更尝试。set_group_permissions
函数实现了具体的权限设置功能,在设置权限前会检查SELinux状态,如果处于强制模式则暂时关闭SELinux,设置完权限后再恢复。同时会检查文件或目录是否存在,以及当前权限是否与目标权限一致,不一致则尝试设置权限并记录操作,设置失败则阻止并记录。
-
示例调用:
- 脚本末尾展示了如何调用
set_group_permissions
函数为不同用户组设置文件或目录的权限。你可以根据实际需求修改用户组、文件或目录路径以及权限值。
- 脚本末尾展示了如何调用
-
日志记录:
- 所有权限变更操作和非法权限变更尝试都会记录到
/var/log/permission_changes.log
文件中,方便进行安全审计。
- 所有权限变更操作和非法权限变更尝试都会记录到
-
SELinux集成:
- 通过检查和临时修改SELinux状态,确保在设置权限时系统整体安全策略不受影响。
请根据实际的Linux系统环境和需求对脚本进行适当调整。