面试题答案
一键面试日志结构设计
- 时间戳:记录操作发生的精确时间,格式可采用 ISO 8601,例如
YYYY - MM - DDTHH:MM:SSZ
,方便按时间顺序梳理操作流程。 - 操作类型:明确具体的操作,如 “文件修改”、“权限变更”、“用户登录” 等,便于快速筛选特定类型操作。
- 操作主体:对于文件操作,记录文件名;对于权限变更,记录变更的对象(如用户、组、文件等)。
- 详细描述:具体说明操作的细节,例如文件修改记录修改前后的关键内容片段,权限变更记录原权限和新权限。
- 执行用户:记录执行操作的用户,有助于确定操作责任人。
示例日志格式:
[2023 - 10 - 01T12:34:56Z] [文件修改] [/path/to/file.txt] [修改前内容片段:'old content',修改后内容片段:'new content'] [user1]
脚本中实现关键操作捕获与记录
- 文件修改记录:
- 利用
inotifywait
工具监测文件系统事件。首先安装inotify-tools
(在基于 Debian 或 Ubuntu 的系统上使用sudo apt install inotify-tools
,在基于 Red Hat 的系统上使用sudo yum install inotify-tools
)。 - 示例脚本:
- 利用
#!/bin/bash
LOG_FILE="/var/log/file_operations.log"
inotifywait -m /path/to/monitor -e modify | while read path action file; do
echo "[$(date -u +%Y-%m-%dT%H:%M:%SZ)] [文件修改] [${path}${file}] [$(diff -u <(cat ${path}${file}.bak) <(cat ${path}${file}))] [$(whoami)]" >> ${LOG_FILE}
cp ${path}${file} ${path}${file}.bak
done
此脚本使用 inotifywait
持续监测 /path/to/monitor
目录下文件的修改事件,记录修改前后的内容差异,并备份修改后的文件。
- 权限变更记录:
- 利用
auditd
服务(在基于 Debian 或 Ubuntu 的系统上使用sudo apt install auditd
,在基于 Red Hat 的系统上使用sudo yum install auditd
),它能更全面地捕获系统调用级别的权限变更。 - 配置
auditd
规则,例如在/etc/audit/rules.d/权限变更.rules
中添加:
- 利用
-a always,exit -F arch=b64 -S chmod -k permission_change
-a always,exit -F arch=b64 -S fchmod -k permission_change
-a always,exit -F arch=b64 -S fchmodat -k permission_change
- 重启 `auditd` 服务:`sudo systemctl restart auditd`。
- 编写脚本读取 `auditd` 日志并整理:
#!/bin/bash
LOG_FILE="/var/log/permission_operations.log"
ausearch -k permission_change | while read line; do
timestamp=$(echo ${line} | grep -oP 'time->\K.*?(?= )')
operation_type="权限变更"
object=$(echo ${line} | grep -oP 'name=\K.*?(?= )')
old_perm=$(echo ${line} | grep -oP 'a0=\K.*?(?= )')
new_perm=$(echo ${line} | grep -oP 'a1=\K.*?(?= )')
user=$(echo ${line} | grep -oP 'user=\K.*?(?= )')
echo "[${timestamp}] [${operation_type}] [${object}] [原权限:${old_perm},新权限:${new_perm}] [${user}]" >> ${LOG_FILE}
done
此脚本从 auditd
日志中提取权限变更相关信息并记录到自定义日志文件。