Описание проблемы
Перед системным администратором периодически встают вопросы:
- За каким компьютером работает пользователь, например, 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 Dim objFSO, objNetwork, objShell, objTS, objADSystemInfo, objUser strShareName = "\\Server1\log$" 'WScript.Sleep 60000 'delay listed milliseconds before script execution Set objFSO = CreateObject("Scripting.FileSystemObject") strUserName = objNetwork.UserName strFileName = strUserName & ".log" If objFSO.FileExists(strFile) Then Const FOR_WRITING = 2 'Replace all data within the file Set objTS = objFSO.OpenTextFile(strFile,FOR_APPENDING) strFileName = strComputerName & ".log" If objFSO.FileExists(strFile) Then Set objTS = objFSO.OpenTextFile(strFile,FOR_APPENDING) Wscript.Quit(1) |
.
Пример файла аудита \\Server1\log$\APetrov.log
Date/time : 15.10.2010 09:39:54 Date/time : 16.10.2010 09:40:13 |
.
Пример файла аудита \\Server1\log$\BUHGALTERIA.log
Date/time : 16.10.2010 09:40:13 Date/time : 16.10.2010 09:50:52 |
.