Практический аудит логонов пользователей

Описание проблемы


Перед системным администратором периодически встают вопросы:

  • За каким компьютером работает пользователь, например, APetrov?
  • На какие компьютеры APetrov входил последнее время?
  • Кто недавно входил на компьютер BUHGALTERIA?

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

Решение


Ниже приведен вариант решения проблемы аудита входов пользователей, который успешно применялся мной в большой корпоративной среде (более 2000 клиентов).

Решение основано на сценарии входа, который автоматически запускается при входе пользователя и обновляет файлы аудита в общей папке на файловом сервере.

Пошаговое руководство


Шаг 1. Создание скрытой общей папки

Для начала создаем папку на файловом сервере. Пусть папка будет называться \\Server1\log$. Значок $ на конце имени папки делает ее скрытой, т.е. при навигации по сетевому окружению пользователи такую папку не видят.

Устанавливаем группе Authenticated Users право Modify как на саму общую папку, так и на NTFS. Для проверки правильности конфигурации прав доступа желательно попробовать от имени пользователя создать в папке \\Server1\log$ какой-нибудь файл.

Шаг 2. Создание сценария для записи событий аудита

Создаем файл сценария с именем CurrentUser.vbs. Содержание файла вы найдете здесь или ниже в Приложении. Не забудьте изменить в файле путь к общей папке вместо \\Server1\log$.

Сценарий проверяет в указанной общей папке наличие двух файлов <UserName>.log и <ComputerName>.log. Если файлов нет, то они создаются. Затем в файл <UserName>.log добавляется имя компьютера и дата/время, а в файл <ComputerName>.log. добавляется имя пользователя и дата/время.

При желании в файлах можно сохранять дополнительные атрибуты пользователя, например, подразделение (если этот атрибут заполняется в Active Directory).

Шаг 3. Назначение сценария через групповую политику

Создаем групповую политику и добавляем в нее сценарий входа пользователя. Политику желательно привязать на уровень домена, чтобы она автоматически применялась ко всем пользователям.

Шаг 4. Проверка файла аудита

Тестируем. Для проверки достаточно залогиниться на любой компьютер и проверить факт создания новых файлов с именем пользователя и компьютера в скрытой папке. В дальнейшем все входы в систему будут фиксироваться в этих файлах.

Применение


Для ответа на вопросы “За каким компьютером работает пользователь,APetrov?” и “На какие компьютеры APetrov входил последнее время?” нужно всего лишь открыть файл \\Server1\log$\APetrov.log.

Для ответа на вопрос “Кто недавно входил на компьютер BUHGALTERIA?” нужно открыть файл \\Server1\log$\BUHGALTERIA.log.

Заключение


Описанное выше решение не гарантирует абсолютную достоверность данных, поскольку все пользователи потенциально могут отредактировать файлы аудита. При необходимости ведения “серьезного” аудита данное решение будет лишь дополнением к правильно настроенному аудиту Windows.

В реальной жизни решение оказалось очень удобным как для сотрудников службы Helpdesk, так и для администраторов сети.

При желании вы можете вносить свои модификации в файл сценария для сбора более детальной информации о пользователях или компьютерах.

 

Приложение


Листинг файла сценария CurrentUser.vbs

Не забудьте изменить в переменной strShareName путь к общей папке вместо моей папки \\Server1\log$.

Строку 'WScript.Sleep 60000 можно раскомментировать, если сценарий требуется запустить с задержкой выполнения.

Option Explicit
On error resume next

Dim objFSO, objNetwork, objShell, objTS, objADSystemInfo, objUser
Dim strUsername, strComputerName, strFileName, strShareName, strFile, strDepartment

strShareName = "\\Server1\log$"

'WScript.Sleep 60000 'delay listed milliseconds before script execution

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objNetwork = CreateObject("Wscript.Network")
Set objShell = CreateObject("Wscript.Shell")
Set objADSystemInfo = CreateObject("ADSystemInfo")
Set objUser = GetObject("LDAP://" & objADSystemInfo.UserName)

strUserName = objNetwork.UserName
strComputerName = objNetwork.ComputerName

strFileName = strUserName & ".log"
strFile = strShareName & "\" & strFileName

If objFSO.FileExists(strFile) Then
    'Do nothing
   else
    objFSO.CreateTextFile(strFile)
end if

Const FOR_WRITING = 2 'Replace all data within the file
Const FOR_APPENDING = 8 'Append data to the end of the file

Set objTS = objFSO.OpenTextFile(strFile,FOR_APPENDING)
objTS.Write "Date/time : " & Now & vbCRLF
objTS.Write "Computer  : " & strComputername & vbCRLF
objTS.Write vbCRLF
objTS.Close

strFileName = strComputerName & ".log"
strFile = strShareName & "\" & strFileName

If objFSO.FileExists(strFile) Then
    'Do nothing
   else
    objFSO.CreateTextFile(strFile)
end if

Set objTS = objFSO.OpenTextFile(strFile,FOR_APPENDING)
objTS.Write "Date/time : " & Now & vbCRLF
objTS.Write "User      : " & strUserName & vbCRLF
objTS.Write "Department: " & objUser.Department & vbCRLF
objTS.Write vbCRLF
objTS.Close

Wscript.Quit(1)

.

Пример файла аудита \\Server1\log$\APetrov.log

Date/time : 15.10.2010 09:39:54
Computer  : XP01

Date/time : 16.10.2010 09:40:13
Computer  : BUHGALTERIA

.

Пример файла аудита \\Server1\log$\BUHGALTERIA.log

Date/time : 16.10.2010 09:40:13
User      : APetrov
Department: IT

Date/time : 16.10.2010 09:50:52
User      : Maria Sidorova
Department: Accounting

.

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

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