Форум программистов, компьютерный форум, киберфорум
Администрирование Windows
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.68/120: Рейтинг темы: голосов - 120, средняя оценка - 4.68
87 / 66 / 8
Регистрация: 29.09.2009
Сообщений: 425
1

История входа пользователей в ОС

07.10.2018, 20:56. Показов 23211. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте, необходимо вывести журнал авторизации пользователей в системе Windows server ( Аудит включен)

Журнал нужен примерно следующий виде.

Дата, тип события( вход/выход) ,Имя пользователя.

Журнал необходим, чтоб отследить пользователей входивших (выходивших) в систему за определенный период.

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

Варианты решения:
  • Готовое ПО для анализа авторизации пользователей
  • Какой нибудь хитрый скприт
  • Тонкая настройка фильтров журнала событий
Кто что успешно практиковал и может поделиться решением?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.10.2018, 20:56
Ответы с готовыми решениями:

Время входа пользователей
Здравствуйте! Есть WS 2008 x32, помогите создать запрос. Требуется сделать выгрузку в excel...

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

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

Запрет повторного входа пользователей
Всем , здравствуйте. Исходные данные: Проект на MVS 2015. Авторизация пользователей работает...

6
1886 / 1108 / 428
Регистрация: 22.01.2016
Сообщений: 3,050
11.10.2018, 19:18 2
Цитата Сообщение от Джуниор Посмотреть сообщение
необходимо вывести журнал авторизации пользователей в системе Windows server ( Аудит включен)
Цитата Сообщение от Джуниор Посмотреть сообщение
Какой нибудь хитрый скприт
PowerShell вам в помощь:

PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Get-WinEvent -ComputerName 'localhost' -FilterHashtable @{
    logname = "Security";
    StartTime = (Date).AddDays(-1);
    ID = 4624,4634;
} | %{
    
    $event = $_
    
    $xmlEvent = [xml]$event.ToXml()
    $EventData = New-Object PSObject
    $xmlEvent.event.EventData.Data | % {$EventData | Add-Member NoteProperty $_.Name $_."#text"}
    
    if ($EventData.LogonType -eq 2)
    {
 
    New-Object PSObject -Property @{
        EventId =     $event.Id
        TimeCreated = $event.TimeCreated
        Task        = "$($event.TaskDisplayName)"
        Keywords    = "$($event.KeywordsDisplayNames)"
        User        = $EventData.TargetUserName
        }
 
    }
 
} | ft -a
0
87 / 66 / 8
Регистрация: 29.09.2009
Сообщений: 425
11.10.2018, 20:57  [ТС] 3
Цитата Сообщение от KDE777 Посмотреть сообщение
PowerShell вам в помощь:
Спасибо за ответ. Указанный Вами скрипт выводит в качестве результата сам свой текст. Возможно я что то делаю не так или в процессе копирования кода что то не так копируется.
Миниатюры
История входа пользователей в ОС  
0
87 / 66 / 8
Регистрация: 29.09.2009
Сообщений: 425
11.10.2018, 21:02  [ТС] 4
Я нашел решение, обратился к коллеге программисту. Мне помог следующий код:
PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$time = [int64](New-TimeSpan (get-date "01/01/2017") (get-date "08/10/2018")).TotalMilliseconds
$filter = "*[System[TimeCreated[timediff(@SystemTime) < $time] and EventID=4624] and EventData[Data[@Name='LogonType']=10]]"
$results = @(
Get-WinEvent -FilterXPath $filter -LogName Security | Foreach {
$evt = $_
$addr = $evt.Properties[18].Value
$textcolor = $host.ui.rawui.foregroundcolor
$host.ui.rawui.foregroundcolor = "red"
 
if ($addr -like "192.168.0*") {$host.ui.rawui.foregroundcolor = "DarkGreen"}
if ($addr -like "10.*") {$host.ui.rawui.foregroundcolor = "yellow"}
"" | Select-Object @{n="Time";e={$evt.TimeCreated}},@{n="UserName";e={$evt.Properties[5].Value}},@{n="Address";e={$addr}}
$host.ui.rawui.foregroundcolor = $textcolor
}
)
$results | export-csv -Encoding UTF8 -Path d:\so1.csv -NoTypeInformation -Delimiter ";"
Выводит результат в файл d:\so1.csv очень удобно анализировать.

предварительно нужно разрешить исполнение пользовательских сценариев в повершел. Иначе скрипт не выполняется.
Подробно есть статья на хабре "PowerShell и аудит безопасности"
Миниатюры
История входа пользователей в ОС  
0
1886 / 1108 / 428
Регистрация: 22.01.2016
Сообщений: 3,050
12.10.2018, 00:13 5
Лучший ответ Сообщение было отмечено Джуниор как решение

Решение

Цитата Сообщение от Джуниор Посмотреть сообщение
Указанный Вами скрипт выводит в качестве результата сам свой текст.
Это значит, что за прошедшие сутки таких событий не найдено.

Скрипт который вы запустили:

1. Ищет события за последние сутки от момента запуска - (Date).AddDays(-1). Можете поменять -1 на больший интервал.
2. Ищет события, у которых LogonType = 2, т.е. интерактивный вход/выход в систему. Подробности здесь.

Цитата Сообщение от Джуниор Посмотреть сообщение
Я нашел решение, обратился к коллеге программисту. Мне помог следующий код:
Этот код использует тот же Get-WinEvent из PowerShell, вот только выбирает он события о терминальном входе в систему (RemoteInteractive), о чём вы забыли уточнить в изначальном запросе + диапазон в вашем примере почти два года.

А вот учитывая, что вам необходимо выбирать события за очень длительный срок, выбор xml-фильтра, действительно более оправдан, т.к. Get-WinEvent с хеш-фильтром обрабатывает Security-журнал намного дольше (где-то даже есть об этом статья).

Однако, ваш код не выбирает события выхода и не показывает неудачные попытки. Если это добавить, получится примерно так:

PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
<#
Logon Type Description
 
2   Interactive (logon at keyboard and screen of system)
3   Network (i.e. connection to shared folder on this computer from elsewhere on network)
4   Batch (i.e. scheduled task)
5   Service (Service startup)
7   Unlock (i.e. unnattended workstation with password protected screen saver)
8   NetworkCleartext (Logon with credentials sent in the clear text. Most often indicates a logon to IIS with "basic authentication") See this article for more information.
9   NewCredentials such as with RunAs or mapping a network drive with alternate credentials.  This logon type does not seem to show up in any events.  If you want to track users attempting to logon with alternate credentials see 4648.  MS says "A caller cloned its current token and specified new credentials for outbound connections. The new logon session has the same local identity, but uses different credentials for other network connections."
10  RemoteInteractive (Terminal Services, Remote Desktop or Remote Assistance)
11  CachedInteractive (logon with cached domain credentials such as when logging on to a laptop when away from the network)
 
#>
 
$EndDate = date
$StartDate = $EndDate.AddDays(-365)
 
$LogonType = 10
$csvFile = 'c:\temp\report.csv'
$ComputerName = 'localhost'
 
 
$time = [int64](New-TimeSpan $StartDate $EndDate).TotalMilliseconds
$xmlFilter = "*[System[TimeCreated[timediff(@SystemTime) < $time] and (EventID=4624 or EventID=4634)] and EventData[Data[@Name='LogonType']=$LogonType]]"
 
Get-WinEvent -ComputerName $ComputerName -FilterXPath $xmlFilter -LogName Security | %{
    
    $event = $_
    
    $xmlEvent = [xml]$event.ToXml()
    $EventData = New-Object PSObject
    $xmlEvent.event.EventData.Data | % {$EventData | Add-Member NoteProperty $_.Name $_."#text"}
    
    [pscustomobject][ordered]@{
        EventId =     $event.Id
        DateCreated = $event.TimeCreated.ToShortDateString()
        TimeCreated = $event.TimeCreated.ToLongTimeString()
        Task        = "$($event.TaskDisplayName)"
        Keywords    = "$($event.KeywordsDisplayNames)"
        User        = $EventData.TargetUserName
        IP          = $EventData.IpAddress
        LogonType   = switch ($EventData.LogonType)
                      {
                        2  {'Interactive'}
                        3  {'Network'}
                        4  {'Batch'}
                        5  {'Service'}
                        7  {'Unlock'}
                        8  {'NetworkCleartext'}
                        9  {'NewCredentials'}
                        10 {'RemoteInteractive'}
                        11 {'CachedInteractive'}
                        Default {$EventData.LogonType}
                      }
 
    }
 
} | Export-Csv -Encoding UTF8 -Path $csvFile -NoTypeInformation -Delimiter ";"
 
cls
Import-Csv $csvFile -Delimiter ';' | ft -a
2
87 / 66 / 8
Регистрация: 29.09.2009
Сообщений: 425
12.10.2018, 09:58  [ТС] 6
Цитата Сообщение от KDE777 Посмотреть сообщение
вот только выбирает он события о терминальном входе в систему (RemoteInteractive), о чём вы забыли уточнить в изначальном запросе + диапазон в вашем примере почти два года.
Да забыл уточнить.

Интервал 2 года вбит от балды.
Сервер активно используется. Объем записей ограничен предельным размером файла журнала аудита. В итоге событий больше чем за 2 месяца не сохраняются( оно и не нужно пока).

Отдельно благодарю за улучшенный скрипт!!!
0
0 / 0 / 0
Регистрация: 11.06.2017
Сообщений: 10
04.05.2020, 06:49 7
Добрый день! Спустя полтора года, апну тему...
Ребятушки, помогите разобраться. Эта тема мне очень помогла (5), но теперь вопрос в том, как в PowerShell настроить сценарий по EventID 4647 (4647: Пользователь инициировал выход из системы.). Если говорить про 4634 - то время с точностью до секунды совпадает с 4624, то есть как я понимаю, как только сценарий авторизации пройден, начинается другой сценарий.
Цитата с https://docs.microsoft.com/
Основное различие между событием "4647: Пользователь инициировал выход из системы." и событием 4634 состоит в том, что событие 4647 создается при инициировании процедуры выхода определенной учетной записью с помощью функции выхода из системы, а событие 4634 показывает, что сеанс был завершен и больше не существует.
Пробуя выводить по 4647 - сценарий не выполняется, либо выводит пустые строки.

Спасибо.
0
04.05.2020, 06:49
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.05.2020, 06:49
Помогаю со студенческими работами здесь

Скрипт входа пользователей на сайт
Всем привет! Народ надо какую-то инструкцию по созданию входа на страницу. Php не могу нормально...

Скрипт входа для пользователей домена
Доброго времени суток. Столкнулся с задачей на VBS: нужно написать скрипт который запускает...

Еще раз про форму входа пользователей
Здравствуйте, Уважаемые форумчане! Вопрос формы входа пользователей - стар как мир. Но гугление...

Аудит входа пользователей в Windows XP Home Edition
Добрый день, Помогите решить проблему: необходимо чтобы Windows XP home вел журнал учета...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru