Windows-Server-2003

跟踪 Windows 伺服器上的文件權限更改

  • August 1, 2015

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

引用自:https://serverfault.com/questions/161203