Python监视文件更改并识别用户

2024-10-02 10:23:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要生成一个小脚本,用于监视用户对大型共享文件结构所做的意外更改

我发现我可以使用ReadDirectoryChanges API按照获取更改事件 http://timgolden.me.uk/python/win32_how_do_i/watch_directory_for_changes.html

但是,我不知道如何识别进行了更改的用户帐户,以便发送通知

是否可以获取移动文件/目录的用户帐户的名称


Tags: 文件用户脚本apihttp事件帐户结构
2条回答

在UNIX环境中,可以使用ospwd检索已更改文件的用户帐户

import os
import pwd

file_stat = os.stat("<changed_file>")
user_name = pwd.getpwuid(file_stat.st_uid).pw_name

棘手的问题,我将从两个方面给你答案:

首先,作为可选部分,您可以监视文件修改本身,并添加自定义操作

在Windows/Linux/Mac/BSD上工作的文件修改跟踪示例

import time
import watchdog.events
import watchdog.observers

class StateHandler(watchdog.events.PatternMatchingEventHandler):

    def on_modified(self, event):
        print(event.event_type)
        print(event.key)
        print(event.src_path)
        # Add your code here to do whatever you want on file modification

    def on_created(self, event):
        pass

    def on_moved(self, event):
        pass

    def on_deleted(self, event):
        pass
    
fs_event_handler = StateHandler()
fs_observer = watchdog.observers.Observer()
fs_observer.schedule(fs_event_handler, r'C:\Users\SomeUser\SomeFolder', recursive=True)


fs_observer.start()
try:
    while True:
        time.sleep(2)
except KeyboardInterrupt:
    fs_observer.stop()
fs_observer.join()

使用上述文件系统观察器,您可以触发安全事件日志检查。 您也可以按计划任务触发它们,但在文件系统修改时触发它们更有趣

为了使安全事件日志包含文件修改信息,您需要使用SACL列表对所需目录启用文件审核(右键单击您的文件夹“安全、审核”)。 然后,您可以查看文件事件的安全日志

可以使用windows_tools查看安全日志。 使用python -m pip install windows_tools.wmi_queries安装它(显然只适用于Windows)

然后执行以下操作:

from windows_tools.wmi_queries import *

result = query_wmi('SELECT * FROM Win32_NTLogEvent WHERE Logfile="Security" AND TimeGenerated > "{}"'.format(create_current_cim_timestamp(hour_offset=1)))
for r in result:
    print(r)

您可以添加WHERE子句,如EventCode={integer},以便只过滤您需要的事件(文件修改或其他)。 通常,您搜索的事件代码是4656466046634670(打开删除、编辑、创建)

请参阅This microsoft article,以了解事件日志类接受哪些WHERE子句

免责声明:我是windows_工具包的作者

相关问题 更多 >

    热门问题