跟踪 Windows 伺服器上的文件權限更改
Some-thing or Some-one 偶爾會更改我的 Windows Server 2003 域控制器上文件的文件權限。
我想跟踪這些變化。最初我認為可以通過預設域控制器策略通過審核來做到這一點,但是雖然有文件訪問審核,但我似乎找不到任何類型的權限更改跟踪。
我想知道權限更改是否發生在一組特定的文件和目錄上,無論是人還是應用程序/服務甚至磁碟錯誤都會進行更改。我想看看發生了什麼變化,什麼時候發生了變化,以及可能發生了什麼變化。
這可能嗎?
權限更改的內置審核通過“審核對象訪問”處理。如果您查看可以在文件系統對像上配置的審計類型,您會發現“更改權限”是可審計項目之一。
但是,您會發現“審計對象訪問”生成的日誌數據非常冗長且難以解析。實際的權限更改(“WRITE_DAC”事件——DAC 表示“自主訪問控制”)只會引用句柄 ID,因此您必須從 WRITE_DAC 向後解析以找到句柄打開事件。該事件將告訴您正在被 WRITE_DAC 修改的對象的名稱。比較累…
我有一位客戶曾探索過使用CPTRAX File System Audit Trails for Windows實用程序來處理類似情況。我不相信他們曾經真正實現過它,但作為他們探索的一部分,我查看了文件並發現它至少看起來是“理智的”。我不能給它任何個人推薦,但它看起來就像製造商聲稱的那樣。
編輯:
今晚我有幾分鐘的時間,所以我寫了一個瘋狂而痛苦的 CMD 腳本來跟踪權限更改。解析事件日誌很痛苦(並且確實需要狀態機才能正確處理),因此這是次優嘗試。
該腳本需要傳遞文件的文件名來跟踪權限,以及文件的路徑和“基本”文件名來儲存觀察到的權限。讓我們假設一組假參數:
perm-track.cmd "C:\Program Files\Some Application\File To Track.exe" "C:\Permission Tracker\File to Track.exe"
腳本第一次執行時(例如,2010 年 7 月 18 日 12:51:30),在“C:\Program Files\Some Application\File To Track.exe”上設置的權限將儲存在文件“C :\Permission Tracker\File to Track.exe.20100718_125130.permissions.txt”。
下次執行腳本時,使用相同的參數,儲存在最近創建的“C:\Permission Tracker\File to Track.exe.*.permissions.txt”文件中的權限將與目前權限進行比較“C:\Program Files\Some Application\File To Track.exe”。如果有更改,新權限將儲存在“C:\Permission Tracker”中適當命名的“File to Track.exe.ISODATE.permissions.txt”文件中。
將其連接起來發送電子郵件將非常容易。作為計劃任務或循環執行它也很容易。
這絕對是快速和骯髒的,它可能有錯誤,但這個腳本可能會做你需要的。
@echo off if "%~1"=="" goto syntax if not exist "%1" goto syntax if "%~2"=="" goto syntax rem Get an ISO date (working around shell silliness re: hours earlier than 10:00) SET YEAR=%DATE:~10,4% SET MONTH=%DATE:~4,2% SET DAY=%DATE:~7,2% SET /A HOUR=%TIME:~0,2% SET HOUR=0%HOUR% SET HOUR=%HOUR:~-2% SET MINUTE=%TIME:~3,2% SET SECOND=%TIME:~6,2% SET ISODATE=%YEAR%%MONTH%%DAY%_%HOUR%%MINUTE%%SECOND% SET TEMPFILE="%TEMP%\%RANDOM%.TXT" rem Save current permissions into a temporary file cacls %1 >%TEMPFILE% rem Get filename of last set of permissions reported set LASTFILE= for /f "usebackq delims=" %%f in (`dir /od /b /s "%~2*.permissions.txt"`) do SET LASTFILE=%%f rem Was there no last file? If so, put current temp file in place if "%LASTFILE%"=="" ( move %TEMPFILE% "%~2.%ISODATE%.permissions.txt" ) else ( rem Compare current permission to last permission-- if it's different, annotate current permission fc %TEMPFILE% "%LASTFILE%" if errorlevel 1 move %TEMPFILE% "%~2.%ISODATE%.permissions.txt" ) goto end :syntax echo Really, really poor man's permission change tracker. echo. echo Call with path of file to monitor on command-line as first argument, echo path and base filename to store "report" files of permission changes echo as the second argument. echo. echo example: echo. echo perm-track.cmd "C:\Program Files\Some Application\File To Track.exe" "C:\Permission Tracker\File to Track" echo. :end