You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu 22.04.1环境下监控可信USB设备文件拷贝并记录指定信息的工具选型咨询

Ubuntu 22.04.1环境下监控可信USB设备文件拷贝并记录指定信息的工具选型咨询

嗨,针对你在Ubuntu 22.04.1上的需求——用USBguard管控可信USB后,监控拷贝到USB的文件并记录用户名、时间戳、文件名、文件哈希,我有几个实用的方案推荐,都是能精准满足需求的工具组合:

方案一:auditd + 自定义脚本(补全之前的配置)

你之前试了auditd没成功,大概率是规则配置没针对性。auditd其实完全能实现你的需求,重点是要针对USB挂载目录配置监控规则,再配合脚本提取信息并计算哈希:

  1. 配置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
  1. 写脚本提取并记录信息
    创建一个脚本/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
  1. 设置脚本自动运行
    把脚本设为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是更直接的选择——它能实时监控文件系统的创建、写入、移动等事件,配合脚本就能轻松记录所需信息:

  1. 安装inotify-tools
sudo apt update && sudo apt install inotify-tools
  1. 编写监控脚本
    创建/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
  1. 同样设置为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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.21 10:08:02