监视你的脚本:自动 Linux 活动审计
大家好!我是大聪明-PLUS!

在本文中,我想讨论一下 auditd,这是一个记录每个操作的实用 Linux 审计工具,以及一个可以将日志转换为可读报告和警报的脚本。
缺乏用户活动监控的 Linux 服务器就像一扇扇敞开的窗户。auditd 可以帮助解决以下问题:
未经授权的访问(例如,谁使用了它以及何时使用
sudo)可疑命令(
rm -rf、更改权限、访问任何文件)事件调查(服务器崩溃前谁发布了什么内容)
遵守公司标准(也许信息安全需要记录操作或者您更喜欢控制)
解决方案:auditd+ 用于分析和警报的 Python 脚本。
设置 auditd
安装并启用 auditd
让我们检查它是否已安装
auditd:
sudo apt install auditd -y  
sudo yum install audit      运行并添加到启动:
sudo systemctl enable --now auditd
sudo systemctl status auditd  基本 auditctl 命令:
查看当前设置的规则:
sudo auditctl -l添加临时规则(重启后会消失):
sudo auditctl -w /etc/passwd -p rwa -k sensitive_files在哪里:
-w- 文件/目录的路径。-p- 权限(r — 读取、w — 写入、x — 执行、a — 更改属性)。-k- 键(用于过滤日志的标签)。
清除所有规则:
sudo auditctl -D
常设审计规则
规则存储在 中/etc/audit/rules.d/audit.rules。示例配置:
-w /etc/passwd -p wa -k passwd_changes
-w /etc/shadow -p wa -k shadow_changes-w /usr/bin/sudo -p x -k sudo_usage-a always,exit -F arch=b64 -S unlink -S unlinkat -S rename -S renameat -k file_deletion-w /bin/bash -p x -k shell_commands
-w /bin/zsh -p x -k shell_commands
-w /bin/sh -p x -k shell_commands-w /etc/ -p wa -k etc_changes我们应用以下规则:
sudo auditctl -R /etc/audit/rules.d/audit.rules查看和分析日志
处理日志的基本实用程序
ausearch— 通过日志搜索。sudo ausearch -k sudo_usage sudo ausearch -m EXECVEaureport— 报告生成。
sudo aureport --summary     
sudo aureport -f            
sudo aureport -u            审计日志示例
标准条目/var/log/audit/audit.log:
type=SYSCALL msg=audit(1620000000.123:456): arch=c000003e syscall=59 success=yes exit=0 a0=123 a1=456 a2=789 a3=0 items=2 ppid=1234 pid=5678 auid=1000 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts0 comm="sudo" exe="/usr/bin/sudo" key="sudo_usage"分析:
uid=0— 该命令以 root 身份执行。comm="sudo"— 命令已启动sudo。key="sudo_usage"— 规则标签。
用于分析和警报的 Python 脚本
日志解析脚本
我们创造
audit_monitor.py:
#!/usr/bin/env python3
import subprocess
import re
from datetime import datetimedef parse_audit_log():alerts = []for key, message in ALERT_RULES.items():cmd = f"ausearch -k {key} --raw | aureport -i -f"logs = subprocess.getoutput(cmd).split('\n')for line in logs:if not line:continuetime_match = re.search(r"msg=audit\((\d+\.\d+)", line)user_match = re.search(r"auid=(\d+)", line)cmd_match = re.search(r'exe="([^"]+)"', line)if time_match and user_match:timestamp = datetime.fromtimestamp(float(time_match.group(1)))user = f"UID {user_match.group(1)}"details = f"{timestamp} | {user} | {line}"alerts.append(message.format(details=details))return alertsif __name__ == "__main__":alerts = parse_audit_log()if alerts:print("\n".join(alerts))
使用示例:
让我们测试一下触发器:
sudo cat /etc/shadow运行脚本:
chmod +x audit_monitor.py ./audit_monitor.py示例输出:
Доступ к /etc/shadow: 2023-05-01 12:00:00 | UID 1000 | type=SYSCALL ... exe="/usr/bin/cat"添加到 cron 每 5 分钟检查一次:
(crontab -l ; echo "*/5 * * * * /path/to/audit_monitor.py >> /var/log/audit_monitor.log") | crontab -
与 Telegram 集成以接收警报
让我们创建一个 Telegram 机器人:
我们来修改一下脚本:
让我们取消注释块并替换我们自己的和。requests.post()
TOKENchat_id
结论
本文介绍了一种auditd用于监控关键操作的设置,描述了一个用于分析日志的脚本,并探讨了向 Telegram 添加警报的可能性。您可以自行决定此工具的用途(如果有)。我很乐意听取您对此方法的实用价值的评论并进行讨论。
