Некоторые картинки не загружаются из РФ и РК, используйте VPN.

вторник, 28 ноября 2023 г.

GPO+Powershell Включение аудита файлов пользователя

Пользователь мне втирал, что он файл не удалял, пока я его не ткнул мордой в лог. 
На самом деле, спорная штука - аудит средствами ОС Windows, так как жутко неудобная, так и еще дополнительная нагрузка на компьютер.

Поехали
  1. Создать политику
    1. Распространение файла скрипта
    2. Сценарий запуска скрипта
    3. Аудит включать не надо!
  2. Закинуть файл скрипта на шару

Скрипт простенький, но сделан для русской локализации и требует сохранения в CP1251:
# %windir%\System32\WindowsPowerShell\v1.0\powershell.exe  -Noninteractive -NoProfile -ExecutionPolicy Bypass -File C:\usr\SetAudit.ps1
# auditpol /get /category:*
$AuditUser = "DOMAIN\Domain Users"
$Path="C:\Users"
$LogFile="C:\usr\SetAudit.log"
auditpol /set /subcategory:"Файловая система" /failure:enable /success:enable >$LogFile
foreach ($Directory in  $(Get-ChildItem -Path $Path -Exclude "Public")){
	#if Audit is enabled, the count will be greater than 0
	$ACL = Get-Acl $Directory.FullName -Audit
	if ($ACL.audit.count -eq 0) {
		Write-output ("$Directory.FullName is processed.")  | out-file "$LogFile" -append
		#Allow ACL/Audit inheritance from parent Object
		$ACL = (Get-Item $Directory.FullName).GetAccessControl('Access')
		
		# Disable audit inheritance for AppData (child directory)
		$AppDataDirectory=$($Directory.FullName+"\AppData")
		if (Test-Path $AppDataDirectory){
			Write-output ("$AppDataDirectory is excluded") | out-file "$LogFile" -append
			$ACL.SetAuditRuleProtection($True, $False)
			Set-Acl -path $AppDataDirectory $ACL
		}
		
		# Enable inheritance for directory
		$ACL.SetAuditRuleProtection($False, $False)
		# Create audit rule
		$AuditRules = "CreateFiles, AppendData, DeleteSubdirectoriesAndFiles, Delete"
		$InheritType = "ContainerInherit,ObjectInherit"
		$AuditType = "Success"
		$AccessRule = New-Object System.Security.AccessControl.FileSystemAuditRule($AuditUser,$AuditRules,$InheritType,"None",$AuditType)
		# Applying and installng audit rules
		$ACL.SetAuditRule($AccessRule)
		Set-Acl -path $Directory.FullName $ACL	
	} else {
		Write-output ("$Directory.FullName is already enabled")  | out-file "$LogFile" -append
	}
}
В сценарии запуска программа:
%windir%\System32\WindowsPowerShell\v1.0\powershell.exe
а параметры:
-Noninteractive -NoProfile -ExecutionPolicy Bypass -File C:\usr\SetAudit.ps1
Почему не надо включать аудит в Локальных или Групповых политиках?, да потому, что он тогда включит всю групп "Доступ к объектам", а в журнал писать будет очень много. Лучше командой включить только "Файловая система"

Скрипт перебирает НЕСКРЫТЫЕ каталоги и файлы по пути C:\users\, отключает наследование у AppData и применяет политику аудита:

Дабы не усложнять скрипт, я в качестве аудируемого указываю группу "Domain users"
Далее можно настроить сценарий завершения работы с выгрузкой лога на сервер логов, но это уже совсем другая история.

Комментариев нет:

Отправить комментарий