Протоколирование событий входа
При необходимости протоколирования событий входа таких как вход или выход пользователя из системы или перезагрузка компьютера можно воспользоваться приведенный ниже скриптом.
Логика работы скрипта проста.
Данные формируемые скриптом записываются в локальную папку logFolder затем копируются в общую папку на удаленном сервере.
Внимание: К сожалению механизма способного защитить данные от исправления, разве что только NTFS разрешения (для создателя только запись но не чтение), пока не предусмотрено, но я над этим работаю.
Далее, данные из папки ArchiveFolder другим скриптом пишутся в MSSQL, но об этом в следующий раз. Собственно сделать с этими данными можно все что угодно, вам решать…
Настройка работы скрипта через средства GPO.
Скрипт помещается в логон или логофф секцию, для пользователя и при необходимости для компьютера.
Примечание: Естественно нужно не забыть исправить значение переменной eventStr.
Далее, при возникновении события вам будет отсылаться письмо и само событие будет помещаться в текстовый файл.
Рассмотрим скрипт.
‘ Процедура отправки сообщения
Sub sendReport (EventStr, UserName, ServerName, ClientName)
Set objMessage = CreateObject("CDO.Message")
Set WshShell = WScript.CreateObject("WScript.Shell")
‘ извлекаем имя компьютера
serverName = WshShell.ExpandEnvironmentStrings("%COMPUTERNAME%")
‘ формируем стороку сообщения
strMessage = "Event – " & EventStr & CHR(13) & "User – " & UserName & CHR(13) & "Time – " & Now() & CHR(13) & "Client computer – " & ClientName
objMessage.Subject = "Audit Report – " & ServerName
objMessage.From = "audit.admin@example.com"
objMessage.To = "auditors@example.com;"
objMessage.TextBody = "Server Name is " & ServerName & CHR(13) & CHR(13) & strMessage
objMessage.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
objMessage.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "192.168.100.110"
objMessage.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
objMessage.Configuration.Fields.Update
‘ Отправляем сообщение
objMessage.Send
End Sub
‘ Процедура копирования файлов
Sub copyFiles (SourceFolder, DestinationFolder)
If objFSO.FolderExists(DestinationFolder) Then
For Each sFile In objFSO.GetFolder(SourceFolder).Files
If Not objFSO.FileExists(DestinationFolder & "\" & objFSO.GetFileName(sFile)) Then
objFSO.GetFile(sFile).Copy DestinationFolder & "\" & objFSO.GetFileName(sFile),True
objFSO.DeleteFile sFile
End If
Next
Else
‘WScript.Echo "Sorry, this folder does not exist"
End if
End Sub
‘ main sub
Set nw=WScript.CreateObject("Wscript.Network")
Set oShell = CreateObject("WScript.Shell" )
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set WshNetwork = WScript.CreateObject("WScript.Network")
‘ формирование временной строки
mStr = Month(date)
dStr = day(date)
yStr = year(date)
hStr = hour(now)
minStr = minute(now)
‘ можете вписать событие по необходимости
eventStr = "Logon"
‘ извлекаем имя клиента
clientName = oShell.ExpandEnvironmentStrings("%ClientName%")
logFolder = "C:\Windows\TEMP\AuditLog"
logFile = LogFolder & "\" & yStr &"-" & mStr & "-" & dStr & "_" & hStr & "_" & minStr & ".log"
‘ путь к папке где храняться отчеты
ArchiveFolder = "\\192.168.100.105\Log$\"
If objFSO.FolderExists(LogFolder) Then
‘WScript.Echo "The folder exists"
Else
Set objFolder = objFSO.CreateFolder(LogFolder)
‘WScript.Echo "LogFolder is created " & LogFolder
End If
If objFSO.FolderExists(ArchiveFolder) Then
‘Wscript.Echo "Archive folder exists"
Else
Set objFolder = objFSO.CreateFolder(ArchiveFolder)
‘WScript.Echo "ArchiveFolder is created " & ArchiveFolder
End If
Set objTextFile = objFSO.OpenTextFile(LogFile,8,TRUE)
objTextFile.WriteLine ( EventStr & ";" & WshNetwork.UserName & ";" & Now() & ";" & WshNetwork.ComputerName & ";" & ClientName)
objTextFile.Close
copyFiles logFolder, archiveFolder
sendReport EventStr, WshNetwork.UserName, WshNetwork.ComputerName, ClientName
Похожие статьи
Приглашаю присоединиться ко мне в следующих сервисах:
Вы можете оставить комментарий.
А IP адрес клиентского компьютера узнать можно?
К сожалению, это имя компа
не всегда может быть разрешено в IP адрес…
VdegЦитировать
В таком виде нет т.к. данные берутся из переменных окружения.
Нужно дописывать кусок который бы проверял события аудита безопасности.
У вас задача понимать кто и откуда зашел?
Тогда предлагаю вот это
http://blog.wadmin.ru/2010/04/security-logs-audit/
и это
http://blog.wadmin.ru/2010/05/win2008-security-log-audit/
Сергей МариничевЦитировать
Спасибо! Кажется, эти Ваши ссылки – это то, что нужно!
VdegЦитировать
Я бы сказал что протоколирование + аудит журналов по необходимости…
Сергей МариничевЦитировать