A auditoria interna para alterações de permissão é tratada por meio de "Acesso a objeto de auditoria". Se você observar os tipos de auditoria que pode configurar em um objeto do sistema de arquivos, verá que "Alterar Permissões" é um dos itens auditáveis.
Você descobrirá que os dados de log gerados pelo "Acesso ao objeto de auditoria" são dolorosamente verbosos e difíceis de analisar. As permissões reais são alteradas (um evento "WRITE_DAC" - DAC significa "Controle de Acesso Discricionário") fará referência apenas a um identificador de identificador, portanto, será necessário analisar o WRITE_DAC para encontrar o evento open do identificador. Esse evento informará o nome do objeto que está sendo modificado pelo WRITE_DAC. Bastante cansativo ...
Eu tive um cliente que explorou o uso do utilitário Trilhas de auditoria do sistema de arquivos CPTRAX para Windows para uma situação semelhante. Eu não acredito que eles realmente o tenham implementado, mas como parte de sua exploração eu revisei a documentação e descobri que ela parecia ser "sã", pelo menos. Eu não posso dar qualquer tipo de recomendação pessoal para isso, mas parecia que faria o que o fabricante alegou.
Editar:
Eu tive alguns minutos hoje, então escrevi um roteiro CMD louco e doloroso para rastrear as mudanças de permissão. Analisando o log de eventos é doloroso (e realmente requer uma máquina de estado para acertar), então esta é uma segunda tentativa.
O script espera receber o nome do arquivo de um arquivo para rastrear as permissões, e um caminho e um nome de arquivo "base" de um arquivo para armazenar as permissões observadas. Suponhamos um conjunto falso de argumentos: perm-track.cmd "C:\Program Files\Some Application\File To Track.exe" "C:\Permission Tracker\File to Track.exe"
Na primeira vez que o script for executado (às 12:51:30 de 18 de julho de 2010), as permissões definidas em "C: \ Arquivos de Programas \ Alguns Aplicativos \ Arquivo para Rastrear.exe" serão armazenadas no arquivo "C: \ Permission Tracker \ File para Track.exe.20100718_125130.permissions.txt".
Na próxima vez que o script for executado, com os mesmos argumentos, as permissões armazenadas no arquivo "C: \ Permission Tracker \ Arquivo para Track.exe. *. permissions.txt" criado mais recentemente serão comparadas permissões atuais em "C: \ Arquivos de programas \ Some Application \ File To Track.exe". Se houver uma alteração, as novas permissões serão armazenadas em um arquivo apropriadamente chamado "File to Track.exe.ISODATE.permissions.txt" em "C: \ Permission Tracker".
Conectar isso para enviar e-mails seria bem fácil. Executá-lo como uma tarefa agendada ou em um loop seria muito fácil também.
Isso definitivamente é rápido e sujo, e provavelmente tem erros, mas esse script pode fazer o que você precisa.
@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