怎么用脚本监控文档修改

wen 实用脚本 1

本文目录导读:

怎么用脚本监控文档修改

  1. 目录导读
  2. 结语:从“事后追踪”到“事前防御”


《文档被篡改毫无察觉?用脚本构建“零信任”文件监控防线(附Python与Bash实战)》**


目录导读

  1. 为什么你需要监控文档修改? —— 从数据泄露到合规审计
  2. 监控原理拆解 —— 哈希比对、时间戳轮询与inotify事件驱动
  3. 实战脚本一:Python版 —— 跨平台的文件指纹监控器
  4. 实战脚本二:Bash+inotifywait —— 轻量级实时监听方案
  5. 高频问答(FAQ) —— 解决误报、性能与权限问题
  6. —— 从“事后追踪”到“事前防御”的进化

在数字化办公中,文档(如合同、源码、财务报表)是企业的核心资产,但一次无意的覆盖、一次恶意的篡改,或内部人员的越权删除,都可能让数月心血付之东流。传统杀毒软件无法感知“合法用户”的非法操作,而人工备份又存在时间盲区,用脚本构建轻量级监控系统,成为最灵活、成本最低的防线。

为什么你需要监控文档修改?

  • 合规需求:等保2.0和GDPR均要求对敏感文件的操作留痕。
  • 防篡改:攻击者获取权限后常修改配置或脚本实现持久化,监控可秒级告警。
  • 误操作追溯:团队协作时,定位谁在何时改了哪一行,避免“甩锅”扯皮。

监控原理拆解:三种主流实现路径

方法 原理 优点 缺点
哈希轮询 定期计算文件MD5/SHA256并比对 逻辑简单、跨平台 有延迟,无法实时
时间戳+大小 对比修改时间与文件大小 极省资源 易被touch命令欺骗
事件驱动 调用系统API(inotify)监听 实时、精准 依赖Linux内核特性

SEO要点:本文聚焦“脚本监控”,故综合前三者,给出可落地的双方案。

实战脚本一:Python版(Windows/Linux/macOS通用)

import hashlib
import os
import time
import json
WATCH_DIR = "./docs"  # 监控目录
DB_FILE = "file_hashes.json"
def get_hash(path):
    """计算文件SHA-256指纹"""
    h = hasher = hashlib.sha256()
    with open(path, "rb") as f:
        for chunk in iter(lambda: f.read(4096), b""):
            h.update(chunk)
    return h.hexdigest()
def load_db():
    try:
        with open(DB_FILE, "r") as f:
            return json.load(f)
    except FileNotFoundError:
        return {}
def save_db(db):
    with open(DB_FILE, "w") as f:
        json.dump(db, f)
db = load_db()
print("监控启动,按Ctrl+C终止...")
try:
    while True:
        for root, _, files in os.walk(WATCH_DIR):
            for fname in files:
                path = os.path.join(root, fname)
                stat = os.stat(path)
                # 指纹+修改时间双重校验,防止快速改写
                new_val = {"hash": get_hash(path), "mtime": stat.st_mtime}
                if path not in db:
                    print(f"[新增] {path}")
                elif db[path]["hash"] != new_val["hash"]:
                    print(f"[修改] {path} (旧哈希: {db[path]['hash'][:8]}... 新哈希: {new_val['hash'][:8]}...)")
                elif db[path]["mtime"] != new_val["mtime"]:
                    print(f"[触及] {path} (内容未变但时间戳被改动,警惕绕过)")
                # 实时更新数据库
                db[path] = new_val
        # 清理不存在的文件记录
        missing = set(db.keys()) - set(os.path.join(r, f) for r, _, fs in os.walk(WATCH_DIR) for f in fs)
        for m in missing:
            print(f"[删除] {m}")
            db.pop(m)
        save_db(db)
        time.sleep(2)
except KeyboardInterrupt:
    print("\n监控结束,已保存指纹库。")

运行说明

  • 首次运行生成file_hashes.json作为基准。
  • 之后每次循环比对,发现变化立即打印并记录。
  • 可搭配logging模块或邮件API扩展告警功能。

实战脚本二:Bash+inotifywait(Linux实时监听)

前置条件:安装inotify-toolsapt install inotify-tools)。

#!/bin/bash
WATCH_DIR="/data/secure"
LOG="modify_log"
inotifywait -m -r -e modify,create,delete,move --format '%e %w%f' "$WATCH_DIR" | \
while read event file; do
    timestamp=$(date "+%Y-%m-%d %H:%M:%S")
    echo "[$timestamp] 事件: $event 文件: $file" >> "$LOG"
    # 可在此插入告警命令,如curl向钉钉Webhook发消息
done

优势:CPU占用几乎为0,事件触发有原子性,比轮询快100倍,适合对生产服务器上的配置、网页目录进行守护。

高频问答(FAQ)

Q1:脚本监控会被黑客绕过吗?
A:能,若攻击者拿到root权限,可先停进程、改文件、再改哈希库。对策:将脚本放到独立只读介质(如挂载的USB),或用chattr +i锁定脚本文件。

Q2:监控大量文件会占用高CPU吗?
A:轮询法耗资源,建议改用inotify(Linux)或ReadDirectoryChangesW(Windows),若必须用Python轮询,可控制在5秒以上间隔,并只扫描关键目录。

Q3:误报太多怎么处理?
A:在哈希比对后增加“白名单”机制,例如在Python脚本中建立一个ALLOWLIST列表,内含编辑器的临时文件(如.swp、),定期清理历史记录。

Q4:如何实时发送告警?
A:Python脚本中调用requests库向企业微信/钉钉/邮件API推送JSON消息;Bash脚本则用curlnc发UDP包至日志服务器。

Q5:能否监控单个文件而非整个目录?
A:可以,Python版本只需将os.walk替换为指定文件列表;inotifywait去掉-r参数并直接写文件路径。


从“事后追踪”到“事前防御”

脚本监控的真正价值不在于发现“谁改了”,而在于建立了一种可验证的信任机制,配合定期备份、权限隔离,这套方案能让你的文档资产具备“自证清白”的能力,未来的进阶方向是引入区块链哈希存证FIM(文件完整性监控)工具如Tripwire,但小成本、快落地的脚本,永远是每一位工程师的应急钥匙。

思考题:如果你是一位运维,你会如何将上面的Python脚本改造成一个常驻服务(daemon)并加入自动自杀式防护(如检测到自身被替换就关闭系统服务)?欢迎在评论区留言探讨。

抱歉,评论功能暂时关闭!