![当在本地文件系统上创建具有特定内容(例如由校验和给出)的文件时,如何捕获事件?](https://linux22.com/image/67130/%E5%BD%93%E5%9C%A8%E6%9C%AC%E5%9C%B0%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F%E4%B8%8A%E5%88%9B%E5%BB%BA%E5%85%B7%E6%9C%89%E7%89%B9%E5%AE%9A%E5%86%85%E5%AE%B9%EF%BC%88%E4%BE%8B%E5%A6%82%E7%94%B1%E6%A0%A1%E9%AA%8C%E5%92%8C%E7%BB%99%E5%87%BA%EF%BC%89%E7%9A%84%E6%96%87%E4%BB%B6%E6%97%B6%EF%BC%8C%E5%A6%82%E4%BD%95%E6%8D%95%E8%8E%B7%E4%BA%8B%E4%BB%B6%EF%BC%9F.png)
我想实现某种绊线安全机制,当用户在其工作站的硬盘驱动器上写入具有特定内容的文件时(将由我管理),该机制实时跟踪事件。
否则辉煌记录文件系统不允许我监视文件的内容,只能监视文件名。
我还有什么其他选择?我想我需要类似于实时防病毒软件使用的东西。
PS 我可以使用 btrfs 并依赖它的叶块校验和。但我更喜欢更通用的解决方案。
答案1
在 Linux 上,您可以将该inotify
机制与incron
.incron
通过安装包并编辑配置进行设置:
/etc/incron.conf
system_table_dir=/etc/incron.d
user_table_dir=/var/spool/incron
allowed_users=/etc/incron.allow
denied_users=/etc/incron.deny
lockfile_dir=/var/run
logfile_name=incrond
editor=vi
然后在以下位置配置手表/etc/incron.d/myscriptwatch
:
/path/to/dir IN_CLOSE_WRITE,IN_MOVED_TO /path/to/check_content_script.sh $@ $#
下一步是设置您/path/to/check_content_script.sh
以检查文件的处理情况:
CURRSUM=$(md5sum $@)
PREVSUM=$(cat /path/to/old_saved_sum)
if [ "$CURRSUM" = "$PREVSUM" ]
then
echo "file $@ is not altered" >> /tmp/watch_log
else
echo "file $@ is altered" >> /tmp/watch_log
fi
您还可以监视其他事件以查看文件是否已更改,例如IN_CLOSE_WRITE,IN_ATTRIB,IN_MODIFY
请参阅man 5 incrontab
了解更多详情。