Ubuntu 22.04.1环境下监控可信USB设备文件拷贝并记录指定信息的工具选型咨询
Ubuntu 22.04.1环境下监控可信USB设备文件拷贝并记录指定信息的工具选型咨询
嗨,针对你在Ubuntu 22.04.1上的需求——用USBguard管控可信USB后,监控拷贝到USB的文件并记录用户名、时间戳、文件名、文件哈希,我有几个实用的方案推荐,都是能精准满足需求的工具组合:
方案一:auditd + 自定义脚本(补全之前的配置)
你之前试了auditd没成功,大概率是规则配置没针对性。auditd其实完全能实现你的需求,重点是要针对USB挂载目录配置监控规则,再配合脚本提取信息并计算哈希:
- 配置audit监控规则
首先找到USB设备的挂载点(通常在/media/你的用户名/USB卷标下),然后添加监控规则:
# 临时添加规则(重启后失效) sudo auditctl -w /media/your-username/USB-Label -p w -k usb-file-copy # 永久添加规则,编辑/etc/audit/rules.d/usb-monitor.rules echo "-w /media/your-username/USB-Label -p w -k usb-file-copy" | sudo tee /etc/audit/rules.d/usb-monitor.rules # 重启auditd生效 sudo systemctl restart auditd
- 写脚本提取并记录信息
创建一个脚本/usr/local/bin/usb-audit-logger.sh,用来解析audit日志、计算文件哈希:
#!/bin/bash AUDIT_LOG="/var/log/audit/audit.log" MONITOR_DIR="/media/your-username/USB-Label" OUTPUT_LOG="/var/log/usb-file-transfer.log" # 实时监听audit日志中标记为usb-file-copy的事件 ausearch -k usb-file-copy -i -f "$MONITOR_DIR/*" --raw | while read -r line; do # 提取用户名 USER=$(echo "$line" | grep -oP 'uid=\K\d+' | xargs id -un 2>/dev/null || echo "unknown") # 提取时间戳 TIMESTAMP=$(echo "$line" | grep -oP 'time=\K[^ ]+' | xargs date -d @{} "+%Y-%m-%d %H:%M:%S" 2>/dev/null) # 提取操作的文件路径 FILE=$(echo "$line" | grep -oP 'name=\K[^ ]+' | sed 's/"//g') # 仅处理存在的文件,且属于监控目录 if [[ -f "$FILE" && "$FILE" == "$MONITOR_DIR"* ]]; then # 计算SHA256哈希 HASH=$(sha256sum "$FILE" | awk '{print $1}') # 写入日志 echo "[$TIMESTAMP] USER: $USER | FILE: $FILE | SHA256_HASH: $HASH" >> "$OUTPUT_LOG" fi done
- 设置脚本自动运行
把脚本设为systemd服务,开机自动启动:
# 创建服务文件/etc/systemd/system/usb-audit-logger.service [Unit] Description=USB File Transfer Audit Logger After=auditd.target [Service] ExecStart=/usr/local/bin/usb-audit-logger.sh Restart=always User=root [Install] WantedBy=multi-user.target
然后启动并启用服务:
sudo systemctl daemon-reload sudo systemctl start usb-audit-logger.service sudo systemctl enable usb-audit-logger.service
方案二:inotify-tools + 自定义脚本(更直观的实时监控)
如果你觉得auditd的日志解析有点麻烦,inotify-tools是更直接的选择——它能实时监控文件系统的创建、写入、移动等事件,配合脚本就能轻松记录所需信息:
- 安装inotify-tools
sudo apt update && sudo apt install inotify-tools
- 编写监控脚本
创建/usr/local/bin/usb-inotify-monitor.sh:
#!/bin/bash # 这里可以通过udev动态获取USB挂载点,先暂时固定,后面可以优化 MONITOR_DIR="/media/your-username/USB-Label" OUTPUT_LOG="/var/log/usb-file-transfer.log" # 递归监控目录下的文件创建、移动到目录、写入完成事件 inotifywait -m -r -e create,moved_to,close_write "$MONITOR_DIR" | while read -r dir action file; do FULL_PATH="$dir/$file" # 跳过目录,只处理文件 if [[ -f "$FULL_PATH" ]]; then TIMESTAMP=$(date "+%Y-%m-%d %H:%M:%S") # 获取操作文件的用户(通过进程PID查询) PID=$(fuser "$FULL_PATH" 2>/dev/null | awk '{print $1}') USER=$(ps -o user= -p "$PID" 2>/dev/null || echo "unknown") # 计算SHA256哈希 HASH=$(sha256sum "$FULL_PATH" | awk '{print $1}') # 写入日志 echo "[$TIMESTAMP] USER: $USER | ACTION: $action | FILE: $FULL_PATH | SHA256_HASH: $HASH" >> "$OUTPUT_LOG" fi done
- 同样设置为systemd服务
参考方案一的systemd服务配置,把脚本路径换成/usr/local/bin/usb-inotify-monitor.sh即可。
进阶优化:配合USBguard自动触发监控
因为你已经在用USBguard管理可信设备,可以通过udev规则,在可信USB挂载时自动启动监控脚本,不用手动指定挂载目录:
创建udev规则文件/etc/udev/rules.d/99-usb-trust-monitor.rules:
ACTION=="add", SUBSYSTEM=="block", ENV{ID_FS_USAGE}=="filesystem", RUN+="/usr/local/bin/start-usb-monitor.sh %E{ID_FS_LABEL}"
然后编写start-usb-monitor.sh,根据USB卷标找到挂载点,启动对应的监控进程(具体逻辑可以根据你的脚本调整)。
总结
这两个方案都能完美满足你的需求:
- auditd适合需要和系统审计体系整合的场景,日志更权威;
- inotify-tools更轻量直观,适合快速部署。
你可以根据自己的偏好选择,两种方案在Ubuntu 22.04.1上都能稳定运行。
备注:内容来源于stack exchange,提问作者p1r4t3
相关产品推荐
相关产品推荐

