Входы Выходы Пользователей SSH Auth journalctl Alt Linux

Вход Выход пользователей из системы Windows Linux
Аватара пользователя
Артём Мамзиков
Admin
Сообщения: 804
Стаж: 5 лет 1 месяц
Откуда: Вологодская область
Поблагодарили: 33 раза
Контактная информация:

Входы Выходы Пользователей SSH Auth journalctl Alt Linux

Сообщение Артём Мамзиков »

Входы Выходы Пользователей Авторизация SSH Auth journalctl Alt Linux

Отличие от 2х других шаблонов в том что они смотрят в лог log[/var/log/auth.log или log[/var/log/secure , а в системах слогом systemd все немного иначе.
О Демон инициализации systemd
Показать
Демон инициализации systemd де-факто уже стал стандартом в современных Linux-системах. На него перешли многие популярные дистрибутивы: Debian, RHEL/CentOS, Ubuntu (начиная с версии 15.04). В systemd используется принципиально иной (по сравнению с традиционным инструментом syslog) подход к логгированию.
В его основе лежит централизация: специализированный компонент journal cобирает все системные сообщения (сообщения ядра, различных служб и приложений). При этом специально настраивать отправку логов не нужно: приложения могут просто писать в stdout и stderr, a journal сохранит эти сообщения автоматически. Работа в таком режиме возможна и с Upstart, но он сохраняет все логи в отдельный файл, тогда как systemd сохраняет их в бинарной базе, что существенно упрощает систематизацию и поиск.

Хранение логов в бинарных файлах также позволяет избежать сложностей с использованием парсеров для разных видов логов. При необходимости логи можно без проблем переконвертировать в другие форматы (более подробно об этом будет рассказано ниже).
Journal может работать как совместно с syslog, так и полностью заменить его.
Более подробно на Управление логгированием в systemd
Текущий триггер создает на каждую сессию свой триггер при выходе определяет какая сессия вышла и закрывает соответствующий триггер если была перезагрузка закрывает все сессии (минус если элемент запрашивается раз в 1 минуту полусает данные последнюю строку но за эту 1 минуту был выход или вход двух пользователей он этого не поймет либо не закроет открытый триггер или наоборот не закроет)

Скачать
SSH Auth journalctl Alt Linux.zip
SSH Auth journalctl Alt Linux.zip
(2.47 КБ) 71 скачивание
SSH Auth journalctl Alt Linux Элементы.jpg
SSH Auth journalctl Alt Linux Элементы.jpg
SSH Auth journalctl Alt Linux Триггеры.jpg
SSH Auth journalctl Alt Linux Триггеры.jpg
Команду для получения Новых и Завершенных сессий будем использовать следующую
journalctl -u 'systemd-logind' --since "today" --until "tomorrow" -o cat выводить будем с ключём -o cat так же есть другие варианты
Пример Вывода
Показать
Лог получаем за одни сутки, пример с перезагрузкой в течении суток

New session 37765 of user root.
Removed session 37765.
New session 37810 of user root.
Removed session 37810.
New session 37812 of user root.
Removed session 37812.
New session 37817 of user root.
Starting Login Service...
Watching system buttons on /dev/input/event1 (Power Button)
Watching system buttons on /dev/input/event0 (AT Translated Set 2 keyboard)
New seat seat0.
Started Login Service.
New session 1 of user root.
Failed to abandon session scope, ignoring: Transport endpoint is not connected
Stopping Login Service...
Stopped Login Service.
Removed session 1.
New session 6 of user root.
Removed session 6.
New session 8 of user root.
Так же были рассмотренный еще пару команд
journalctl -u sshd
journalctl -u sshd --since "today" --until "tomorrow" -o cat
journalctl -q _AUDIT_TYPE=1112 _TRANSPORT=audit

Пример вывода journalctl -u sshd --since "today" --until "tomorrow" -o cat
Показать
Connection closed by 192.168.90.321 port 56230 [preauth]
Connection closed by 192.168.90.321 port 56756 [preauth]
pam_tcb(sshd:auth): Authentication passed for root from (uid=0)
Accepted password for ROOT USER root from 192.168.80.9 port 49526 ssh2
pam_tcb(sshd:session): Session opened for root by (uid=0)
Received disconnect from 192.168.80.9 port 49526:11: disconnected by user
Disconnected from 192.168.80.9 port 49526
pam_tcb(sshd:session): Session closed for root
Connection closed by 192.168.90.321 port 49996 [preauth]
Connection closed by 192.168.90.321 port 50550 [preauth]
Connection closed by 192.168.90.321 port 43912 [preauth]
Connection closed by 192.168.90.321 port 48336 [preauth]
pam_tcb(sshd:auth): Authentication passed for root from (uid=0)
Accepted password for ROOT USER root from 192.168.90.321 port 48018 ssh2
pam_tcb(sshd:session): Session opened for root by (uid=0)
Connection closed by 192.168.90.321 port 41688 [preauth]
Connection closed by 192.168.90.321 port 54000 [preauth]
pam_tcb(sshd:auth): Authentication passed for root from (uid=0)
Accepted password for ROOT USER root from 192.168.90.321 port 37216 ssh2
pam_tcb(sshd:session): Session opened for root by (uid=0)
Connection closed by 192.168.90.321 port 47284 [preauth]

Первый ключ
system.run["journalctl -u sshd --since today --until tomorrow -o cat|egrep ^.*sshd.*'(Accepted|closed)'.*|tail -1"]
Более обширный 2 ключ
system.run["journalctl -u sshd --since today --until tomorrow -o cat|egrep ^.*'(Accepted|Disconnected|closed)'.*from.*|tail -1"]
3 Ключ
system.run["journalctl -u sshd --since today --until tomorrow -o cat|egrep ^.*'(Accepted|Disconnected|closed)'.*'(from|for)'.*|tail -1"]

Не всегда отображает выход(
Попытка с2х команд сделать одну строку
Показать
Для сравнения берем логин и время делаем 1 строку

journalctl -u systemd-logind --since today --until tomorrow|egrep ^.*'(New|Removed|Service)'.*|tail -1
journalctl -u sshd --since today --until tomorrow|egrep ^.*'(Accepted|Disconnected|disconnect|Session closed|Received)'.*|tail -1

ПРИМЕР:

Код: Выделить всё

journalctl -u systemd-logind --since today --until tomorrow|egrep ^.*'(New|Removed|Service)'.*
Jun 16 07:56:30 ALTLINUX8 systemd[1]: Starting Login Service...
Jun 16 07:56:31 ALTLINUX8 systemd[1]: Started Login Service.
Jun 16 07:56:31 ALTLINUX8 systemd-logind[536]: New seat seat0.
Jun 16 07:57:15 ALTLINUX8 systemd-logind[536]: New session c1 of user _ldm.
Jun 16 07:57:59 ALTLINUX8 systemd-logind[536]: New session 5 of user user1.
Jun 16 10:41:13 ALTLINUX8 systemd-logind[536]: New session 438 of user root.
Jun 16 10:48:56 ALTLINUX8 systemd-logind[536]: New session 450 of user root.
Jun 16 11:44:22 ALTLINUX8 systemd-logind[536]: New session 543 of user root.
Jun 16 11:47:29 ALTLINUX8 systemd-logind[536]: Removed session 450.
Jun 16 11:47:35 ALTLINUX8 systemd-logind[536]: Removed session 543.
Jun 16 11:48:14 ALTLINUX8 systemd-logind[536]: New session 550 of user root.
Jun 16 11:48:14 ALTLINUX8 systemd-logind[536]: New session 551 of user root.
Jun 16 12:03:33 ALTLINUX8 systemd-logind[536]: New session 579 of user user1.

Код: Выделить всё

journalctl -u sshd --since today --until tomorrow|egrep ^.*'(Accepted|Disconnected|disconnect|Session closed|Received)'.*
Jun 16 10:41:13 ALTLINUX8 sshd[2608]: Accepted password for ROOT USER root from 192.168.***.*** port 57577 ssh2
Jun 16 10:48:56 ALTLINUX8 sshd[5429]: Accepted password for ROOT USER root from 192.168.***.*** port 49835 ssh2

Jun 16 10:48:56 - уже закрыта и вновь открыта в Jun 16 11:48:14 с этого же узла под этим же логином , но в этот же момент с этого же хоста открыта еще одна сессия (терминал)
Если выполнен тот же вход с того же устройства (предыдущий выход не сделан) логин и IP новой записи нет
В таком случае совместить строки не выйдет!
Если брать значение в скобках и сравнивать командой journalctl -u sshd --since today --until tomorrow
команда journalctl -u sshd --since today --until tomorrow
Показать
Нормальный лог
май 29 05:31:19 proxyalt.RayonCSV21.local sshd[12084]: Connection closed by 192.168.90.121 port 50568 [preauth]
май 29 05:31:21 proxyalt.RayonCSV21.local sshd[12086]: Connection closed by 192.168.90.121 port 51156 [preauth]
май 29 05:31:36 proxyalt.RayonCSV21.local sshd[12092]: pam_tcb(sshd:auth): Authentication passed for root from (uid=0)
май 29 05:31:36 proxyalt.RayonCSV21.local sshd[12092]: Accepted password for ROOT USER root from 192.168.90.8 port 37213 ssh2
май 29 05:31:36 proxyalt.RayonCSV21.local sshd[12092]: pam_tcb(sshd:session): Session opened for root by (uid=0)
май 29 05:31:37 proxyalt.RayonCSV21.local sshd[12092]: Received disconnect from 192.168.90.8 port 37213:11: disconnected by user
май 29 05:31:37 proxyalt.RayonCSV21.local sshd[12092]: Disconnected from 192.168.90.8 port 37213
май 29 05:31:37 proxyalt.RayonCSV21.local sshd[12092]: pam_tcb(sshd:session): Session closed for root
май 29 05:32:19 proxyalt.RayonCSV21.local sshd[12106]: Connection closed by 192.168.90.121 port 44270 [preauth]
май 29 05:32:20 proxyalt.RayonCSV21.local sshd[12108]: Connection closed by 192.168.90.121 port 44588 [preauth]

Но чаще так где нет Session closed или Disconnected, disconnect
май 29 10:59:20 proxyalt.RayonCSV21.local sshd[17580]: Connection closed by 192.168.90.121 port 60938 [preauth]
май 29 10:59:21 proxyalt.RayonCSV21.local sshd[17582]: Connection closed by 192.168.90.121 port 32926 [preauth]
май 29 11:00:15 proxyalt.RayonCSV21.local sshd[17605]: pam_tcb(sshd:auth): Authentication passed for root from (uid=0)
май 29 11:00:15 proxyalt.RayonCSV21.local sshd[17605]: Accepted password for ROOT USER root from 192.168.90.121 port 49780 ssh2
май 29 11:00:15 proxyalt.RayonCSV21.local sshd[17605]: pam_tcb(sshd:session): Session opened for root by (uid=0)
май 29 11:00:20 proxyalt.RayonCSV21.local sshd[17659]: Connection closed by 192.168.90.121 port 53964 [preauth]
май 29 11:00:21 proxyalt.RayonCSV21.local sshd[17661]: Connection closed by 192.168.90.121 port 54226 [preauth]
май 29 11:01:20 proxyalt.RayonCSV21.local sshd[17682]: Connection closed by 192.168.90.121 port 46816 [preauth]

Берем данные
Ключем system.run["journalctl -u sshd --since today --until tomorrow|egrep ^.*'(Accepted|Disconnected|disconnect|Session closed|Received)'.*|tail -1"]

Сравниваем значение входа выхода в скобках тегом session-journalctl-{{ITEM.VALUE}.iregsub("\[(.*)\]:", "\1")}

Триггер на вход
{SSH Auth journalctl Alt Linux:system.run["journalctl -u sshd --since today --until tomorrow|egrep ^.*'(Accepted|Disconnected|disconnect|Session closed|Received)'.*|tail -1"].str(Accepted,#1)}=1 and
{SSH Auth journalctl Alt Linux:system.run["journalctl -u sshd --since today --until tomorrow|egrep ^.*'(Accepted|Disconnected|disconnect|Session closed|Received)'.*|tail -1"].diff(0)}=1

Триггер на выход
{SSH Auth journalctl Alt Linux:system.run["journalctl -u sshd --since today --until tomorrow|egrep ^.*'(Accepted|Disconnected|disconnect|Session closed|Received)'.*|tail -1"].str(closed,#1)}=1 or
{SSH Auth journalctl Alt Linux:system.run["journalctl -u sshd --since today --until tomorrow|egrep ^.*'(Accepted|Disconnected|disconnect|Session closed|Received)'.*|tail -1"].str(Disconnected,#1)}=1 or
{SSH Auth journalctl Alt Linux:system.run["journalctl -u sshd --since today --until tomorrow|egrep ^.*'(Accepted|Disconnected|disconnect|Session closed|Received)'.*|tail -1"].str(disconnect,#1)}=1 or
{SSH Auth journalctl Alt Linux:system.run["journalctl -u sshd --since today --until tomorrow|egrep ^.*'(Accepted|Disconnected|disconnect|Session closed|Received)'.*|tail -1"].str(Received,#1)}=1

Тег для закрытия при перезагрузке {{ITEM.VALUE}.iregsub("(Received .*)", "\1")}
Опции для journalctl
Показать
Фильтрация по дате
С помощью опции --since вы можете указать дату и время, начиная с которой нужно отображать логи:
"today" "сегодня"
Опция --until помогает указать по какую дату вы хотите получить информацию
Настройка формата вывода
--until tomorrow -- до завтра

По умолчанию journalctl выводит информацию с помощью утилиты less, в которой вы можете её удобно листать и просматривать. Но формат вывода можно изменить:

short - используется по умолчанию;
verbose - также, как и short, только выводится намного больше информации;
json - вывод в формате json, одна строка лога в одной строке вывода;
json-pretty - форматированный вывод json для более удобного восприятия;
cat - отображать только сообщения, без метаданных.

Примеры других опций
Варианты покаким признакам мониторить
первая команда
journalctl -u sshd --since today --until tomorrow
Вход какие можно выбрать строки
Accepted логин и IP получим
opened получим логин
Выход
disconnect -не всегда
Disconnected -не всегда
Session closed -не всегда
Received - была перезагрузка

Вторая команда
journalctl -u systemd-logind --since today --until tomorrow
Вход какие можно выбрать строки
New -получим номер сессии
Выход
Removed номер завершении сессии
Login Service или Button - была перезагрузка


Пробуем запросить с Заббикс Сервера
zabbix_get -s 192.168.ххх.ххх -p 10050 -k system.run["journalctl -u systemd-logind --since today --until tomorrow -o cat"]

Если мы получили данные все хорошо.

А если получаем ошибку No journal files were opened due to insufficient permissions.
Это означает у пользователя от которого работает zabbix agent не хватает прав.

Нужно поменять пользователя для работы заббикс агента или дать текущему права доступа.

Так же доступ можно проверить попробовав зайти в папку root
root@ZABBIXSERVER:~# zabbix_get -s 192.168.xxx.xxx -p 10050 -k system.run["cd /root/"] sh: line 0: cd: /root/: Отказано в доступе

Получаем доступ даем права zabbix или читаем ниже как сделать запуск агента от root т.е. дать агенту права работать от root
Я сделал следующим образом добавил пользователя zabbix в группу администраторов следующей командой
usermod -a -G adm zabbix

Проверить можно командой
id zabbix
uid=473(zabbix) gid=449(zabbix) группы=4(adm),19(proc),449(zabbix)

Просмотр прав пользователей и групп
nano /etc/group
Добавление пользователя zabbix в группу администраторов
Добавление пользователя zabbix в группу администраторов
Далее нужно перезагрузиться shutdown -r now

После проверяем должен появится доступ.
Запуск агент от пользователя root
Показать
Изначально в файле конфигурации заббикс агента прописываем запуск агента от пользователя root
nano /etc/zabbix/zabbix_agentd.conf
Включаем параметр запуск от имени root
AllowRoot=1
ниже #User=zabbix должно быть закомментировано
так же позже я пробовал User=root
Выходим и Сохраняем Y

Перезапускам службу заббикс агента service zabbix_agentd restart

Проверяем появились ли права и от какого пользователя работает агент

У меня все так же агент продолжал работать от пользователя zabbix

Если указать запуск с конфигом
zabbix_agentd -c /etc/zabbix/zabbix_agentd.conf
то настройки пользователя цепляются и агент работает от root и доступ есть

У меня на версии агента 3.0.24 уже был конфиг по следующему пути
nano /etc/systemd/system/multi-user.target.wants/zabbix_agentd.service
меняем строки на
[Service]
User=root
Group=root

Так же в файле конфигурации заббикс агента прописываем запуск агента от пользователя root
nano /etc/zabbix/zabbix_agentd.conf
Включаем параметр запуск от имени root
AllowRoot=1
ниже #User=zabbix должно быть закомментировано
так же позже я пробовал User=root
Выходим и Сохраняем Y

Перезапускаем
systemctl daemon-reload
systemctl restart zabbix_agentd


Оф. Запуск Агента из под root
Пробуем по официальной инструкции

nano /etc/systemd/system/zabbix-agent.service.d/override.conf

[Service]
User=root
Group=root

Перезагрузите демонов и перезапустите сервис zabbix-agent.

systemctl daemon-reload
systemctl restart zabbix-agent

Для старого агента этот подход лишь включает повторно функциональность настройки пользователя в файле zabbix_agentd.conf. Поэтому, чтобы запустить Zabbix агента из под пользователя root, вам также необходимо изменить zabbix_agentd.conf и указать опции User=root, как и AllowRoot=1

Проблема:: AllowRoot

Еще
/usr/lib/systemd/system/zabbix-agent.service
меняется здесь

[Unit]
Description=Zabbix Monitor Agent
After=syslog.target network.target

[Service]
Type=forking
ExecStart=/usr/sbin/zabbix_agentd
User=root
PIDFile=/run/zabbix/zabbix_agentd.pid

[Install]
WantedBy=multi-user.target

Решение мне не нравится ибо костыль
правильно будет сделать правки не в в файле /usr/lib/systemd/system/zabbix-agent.service, а в /etc/systemd/system/zabbix-agent.service

Еще вариант касаемо логов дать доступ на просмотр всем
пробуем разрешить
nano /etc/systemd/journald.conf
Storage=persistent
перезапускаем службу
systemctl restart systemd-journald
После того как с Zabbix Server мы можем получить данные о сессиях пользователей. Создаем шаблон и Элемент данных

На данный момент элемент ключа выглядит следующим образом
system.run["journalctl -u systemd-logind --since today --until tomorrow -o cat|egrep ^.*'(New|Removed|Service)'.*|tail -1"]

Запрос данных за сутки | поиск и вывод строк которые содержат (New|Removed|Service) |Вывод последней строки tail -1
SSH Auth journalctl Alt Linux Элемент данных
SSH Auth journalctl Alt Linux Элемент данных
Другие варианты ключа которые были
Показать
Элемент system.run[journalctl -u systemd-logind --since today --until tomorrow -o cat]

Предобработка регулярка ^.*(New|Removed).*session.* \0

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

Переделываем элемент без регулярки дописываем выбор строк в элемент и получаем весь нужный лог за весь день
zabbix_get -s 192.168.ххх.ххх -p 10050 -k system.run["journalctl -u systemd-logind --since today --until tomorrow -o cat|egrep ^.*'(New|Removed)'.*session.*|tail -1"]
system.run["journalctl -u systemd-logind --since today --until tomorrow -o cat|egrep ^.*'(New|Removed)'.*session.*|tail -1"]

Тут позже было убрано обязательное содержание строки session и добавлено Service для перезагрузки
Получаем
zabbix_get -s 192.168.ххх.ххх -p 10050 -k system.run["journalctl -u systemd-logind --since today --until tomorrow -o cat|egrep ^.*'(New|Removed|Service)'.*|tail -1"]

journalctl -u systemd-logind --since today --until tomorrow -o cat - Запрашиваем журнал за сегодняшний день входов выходов
egrep ^.*'(New|Removed)'.*session.* Оставляем строки только с сессиями входов и выходов
tail -1 Вывод последней строки самого нового значения
Триггер

Имя SSH auth {HOST.NAME1} {{ITEM.VALUE}.iregsub("(session .*)", "\1")}
Важность Информационная

Выражение проблемы
{SSH Auth journalctl Alt Linux:system.run["journalctl -u systemd-logind --since today --until tomorrow -o cat|egrep ^.*'(New|Removed|Service)'.*|tail -1"].iregexp(^New session)}=1 and
{SSH Auth journalctl Alt Linux:system.run["journalctl -u systemd-logind --since today --until tomorrow -o cat|egrep ^.*'(New|Removed|Service)'.*|tail -1"].diff(0)}=1

Генерация ОК событий Выражение восстановления

Выражение восстановления
{SSH Auth journalctl Alt Linux:system.run["journalctl -u systemd-logind --since today --until tomorrow -o cat|egrep ^.*'(New|Removed|Service)'.*|tail -1"].iregexp(^New session)}=0 and
{SSH Auth journalctl Alt Linux:system.run["journalctl -u systemd-logind --since today --until tomorrow -o cat|egrep ^.*'(New|Removed|Service)'.*|tail -1"].iregexp(^Removed session)}=1 or
{SSH Auth journalctl Alt Linux:system.run["journalctl -u systemd-logind --since today --until tomorrow -o cat|egrep ^.*'(New|Removed|Service)'.*|tail -1"].iregexp(^.*Login Service)}=1

Режим генерации событий ПРОБЛЕМА Множественный
ОК событие закрывает Все проблемы если значения тегов совпадают
Теги для совпадения session-journalctl{{ITEM.VALUE}.iregsub("session ([0-9]+)( of|.)", "\1")}{{ITEM.VALUE}.iregsub("^.*(Login Service).*", "\1")}
Разрешить закрывать вручную V
URL
Описание Пользователь подключился по ssh к серверу
Активировано V
SSH Auth journalctl Alt Linux Триггер.jpg
SSH Auth journalctl Alt Linux Триггер.jpg
Теги
session-journalctl{{ITEM.VALUE}.iregsub("session ([0-9]+)( of|.)", "\1")}
{{ITEM.VALUE}.iregsub("^.*(Login Service).*", "\1")}
SSH Auth journalctl Alt Linux Триггер теги.jpg
SSH Auth journalctl Alt Linux Триггер теги.jpg
О созданни триггера
Показать
Простая версия триггера просто реагирует на последнюю строку либо вход или выход (не понимает несколько пользователей не контролирует их по номерам сессии, не знает если была перезагрузка)
Элемент данных system.run["journalctl -u systemd-logind --since today --until tomorrow -o cat|egrep ^.*'(New|Removed)'.*session.*|tail -1"]
Триггер
Имя SSH auth {HOST.NAME1} {{ITEM.VALUE}.iregsub("(session .*)", "\1")}
Выражение {SSH Auth journalctl Alt Linux:system.run["journalctl -u systemd-logind --since today --until tomorrow -o cat|egrep ^.*'(New|Removed)'.*session.*|tail -1"].str(New,#1)}=1

.str(New,#1)}=1
str (<шаблон>,<сек|#кол-во>) Поиск строки в последнем (самом новом) значении
Поддерживаемые типы значений: str, text, log
Результат:
1 - найдено
0 - в противном случае


Текущий триггер создает на каждую сессию свой триггер при выходе определяет какая сессия вышла и закрывает соответствующий триггер если была перезагрузка закрывает все сессии (минус если элемент запрашивается раз в 1 минуту полусает данные последнюю строку но за эту 1 минуту был выход или вход двух пользователей он этого не поймет либо не закроет открытый триггер или наоборот не закроет)

Имя SSH auth {HOST.NAME1} {{ITEM.VALUE}.iregsub("(session .*)", "\1")} выводит пример
SSH auth Прокси session 821 of user root.

Строка содержит регулярное выражение New session если да 1=1 триггер срабатывает
{SSH Auth journalctl Alt Linux:system.run["journalctl -u systemd-logind --since today --until tomorrow -o cat|egrep ^.*'(New|Removed|Service)'.*|tail -1"].iregexp(^New session)}=1
И

нужно чтобы повторяющаяя проблемма (запрос элемента раз в 1 минуту) присылает 1 и каждый раз срабатывает новый триггер на множественном, если ошибка одна и та еще используем и
diff - Проверка, различаются ли последнее и предыдущее значения.
Если значение неразличаются 0=1 триггер не срабатывает, если значения различаются 1=1 триггер срабатывает
{SSH Auth journalctl Alt Linux:system.run["journalctl -u systemd-logind --since today --until tomorrow -o cat|egrep ^.*'(New|Removed|Service)'.*|tail -1"].diff(0)}=1

Выражение восстановления
Строка несодержит регулярное выражение New session если да 0=0 триггер закрывается
{SSH Auth journalctl Alt Linux:system.run["journalctl -u systemd-logind --since today --until tomorrow -o cat|egrep ^.*'(New|Removed|Service)'.*|tail -1"].iregexp(^New session)}=0
И

Строка содержит регулярное выражение Removed session если да 1=1 триггер закрывается
{SSH Auth journalctl Alt Linux:system.run["journalctl -u systemd-logind --since today --until tomorrow -o cat|egrep ^.*'(New|Removed|Service)'.*|tail -1"].iregexp(^Removed session)}=1
Или
Строка содержит регулярное выражение Login Service если да 1=1 триггер закрывается
{SSH Auth journalctl Alt Linux:system.run["journalctl -u systemd-logind --since today --until tomorrow -o cat|egrep ^.*'(New|Removed|Service)'.*|tail -1"].iregexp(^.*Login Service)}=1

Далее чтоб на каждую сессию создавался новый триггер выбираем Множественный

Для закрытия проблемм не всех разом а по номерам сессии Все проблемы если значения тегов совпадают

Теги для совпадения сравниваем номера открытой и закрываемой сессии и также о перезагрузке
session-journalctl{{ITEM.VALUE}.iregsub("session ([0-9]+)( of|.)", "\1")}{{ITEM.VALUE}.iregsub("^.*(Login Service).*", "\1")}

Теги запрос номера сессии все прописываем в ячейку имя так как из значения не берется для сранения
session-journalctl{{ITEM.VALUE}.iregsub("session ([0-9]+)( of|.)", "\1")}
{{ITEM.VALUE}.iregsub("^.*(Login Service).*", "\1")}


Для тегов 3 варианта
session-journalctl {{ITEM.VALUE}.iregsub("session (.*) of", "\1")} при входе все ок при выходе ничего
session-journalctl {{ITEM.VALUE}.iregsub("session (.*).", "\1")} при входе убирает только точку, оставляет имя пользователя еще, при выходе все ок
session-journalctl {{ITEM.VALUE}.iregsub("session ([0-9]+)( of|.)", "\1")} все ок, не тестированно если в имени пользователя в конце цифры

{EVENT.TAGS} ошибка формируется тег session-journalctl:496, session-journalctl496
{EVENT.RECOVERY.TAGS} востановление

Еще вариант создать зависимый элемет от текущего регуляркой брать нужное значение и сравнивать их
Или в триггере продублировать один и тот же элемент с разными выражениями и сравнивать можно сказать так и сделанно

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

Так же возможно нужно будет сформулировать закрытие триггера через n количествой дней, если он повис возможно был выполнен одновременный выход 2х пользователей в 1 минуту.
что то виде сравнения с
date - Текущая дата в формате ГГГГММДД.
dayofmonth - День месяца в диапазоне от 1 до 31
dayofweek - День недели в диапазоне от 1 до 7 (Пн - 1, Вс - 7).
now - Количество секунд начиная с Epoch (00:00:00 UTC, 1 Января, 1970).
time - Текущее время в формате ЧЧММСС.
Логи после перзагрузки и выключения ищем стоку по которой сделать сброс триггеров входов
Показать
journalctl -u sshd --since today --until tomorrow

-- Logs begin at Wed 2020-03-04 07:57:32 MSK, end at Thu 2020-05-28 16:41:11 MSK. --
May 28 07:54:57 ALT58 systemd[1]: Starting OpenSSH server daemon...
May 28 07:54:58 ALT58 systemd[1]: Started OpenSSH server daemon.
May 28 07:54:58 ALT58 sshd[914]: Server listening on 0.0.0.0 port 22.
May 28 07:54:58 ALT58 sshd[914]: Server listening on :: port 22.
ВХОД В УЧЕТКУ
May 28 08:50:14 ALT58 sshd[8441]: pam_tcb(sshd:auth): Authentication passed for root from (uid=0)
May 28 08:50:14 ALT58 sshd[8441]: Accepted password for ROOT USER root from 192.168.131.95 port 1713 ssh2
May 28 08:50:14 ALT58 sshd[8441]: pam_tcb(sshd:session): Session opened for root by (uid=0)
May 28 16:15:05 ALT58 systemd[1]: Stopping OpenSSH server daemon...
May 28 16:15:06 ALT58 sshd[914]: Received signal 15; terminating.
May 28 16:15:11 ALT58 systemd[1]: Stopped OpenSSH server daemon.
-- Reboot --
May 28 16:18:38 ALT58 systemd[1]: Starting OpenSSH server daemon...
May 28 16:18:40 ALT58 systemd[1]: Started OpenSSH server daemon.
May 28 16:18:40 ALT58 sshd[1007]: Server listening on 0.0.0.0 port 22.
May 28 16:18:40 ALT58 sshd[1007]: Server listening on :: port 22.
ВХОД В УЧЕТКУ
May 28 16:20:02 ALT58 sshd[6428]: pam_tcb(sshd:auth): Authentication passed for root from (uid=0)
May 28 16:20:02 ALT58 sshd[6428]: Accepted password for ROOT USER root from 192.168.131.95 port 4917 ssh2
May 28 16:20:02 ALT58 sshd[6428]: pam_tcb(sshd:session): Session opened for root by (uid=0)
May 28 16:27:14 ALT58 systemd[1]: Stopping OpenSSH server daemon...
May 28 16:27:15 ALT58 sshd[1007]: Received signal 15; terminating.
May 28 16:27:17 ALT58 systemd[1]: Stopped OpenSSH server daemon.
-- Reboot --
May 28 16:28:12 ALT58 systemd[1]: Starting OpenSSH server daemon...
May 28 16:28:14 ALT58 systemd[1]: Started OpenSSH server daemon.
May 28 16:28:14 ALT58 sshd[960]: Server listening on 0.0.0.0 port 22.
May 28 16:28:14 ALT58 sshd[960]: Server listening on :: port 22.
ВХОД В УЧЕТКУ
May 28 16:35:17 ALT58 sshd[7303]: pam_tcb(sshd:auth): Authentication passed for root from (uid=0)
May 28 16:41:04 ALT58 sshd[7554]: pam_tcb(sshd:auth): Authentication passed for root from (uid=0)
May 28 16:41:04 ALT58 sshd[7554]: Accepted password for ROOT USER root from 192.168.131.95 port 3693 ssh2
May 28 16:41:04 ALT58 sshd[7554]: pam_tcb(sshd:session): Session opened for root by (uid=0)


journalctl -u systemd-logind --since today --until tomorrow
-- Reboot --
May 28 16:18:34 ALT58 systemd[1]: Starting Login Service...
May 28 16:18:34 ALT58 systemd[1]: Started Login Service.
May 28 16:18:34 ALT58 systemd-logind[536]: New seat seat0.
May 28 16:18:34 ALT58 systemd-logind[536]: Watching system buttons on /dev/input/event2 (Power Button)
May 28 16:18:34 ALT58 systemd-logind[536]: Watching system buttons on /dev/input/event1 (Power Button)
May 28 16:18:57 ALT58 systemd-logind[536]: New session c1 of user _ldm.
May 28 16:19:20 ALT58 systemd-logind[536]: New session 6 of user user1.
May 28 16:20:02 ALT58 systemd-logind[536]: New session 10 of user root.
May 28 16:27:05 ALT58 systemd-logind[536]: System is rebooting.
May 28 16:27:08 ALT58 systemd-logind[536]: Removed session c1.
May 28 16:27:09 ALT58 systemd-logind[536]: Removed session 10.
May 28 16:27:13 ALT58 systemd-logind[536]: Removed session 6.
May 28 16:27:17 ALT58 systemd[1]: Stopping Login Service...
May 28 16:27:17 ALT58 systemd[1]: Stopped Login Service.
-- Reboot --
May 28 16:28:06 ALT58 systemd[1]: Starting Login Service...
May 28 16:28:09 ALT58 systemd[1]: Started Login Service.
May 28 16:28:09 ALT58 systemd-logind[525]: New seat seat0.
May 28 16:28:09 ALT58 systemd-logind[525]: Watching system buttons on /dev/input/event2 (Power Button)
May 28 16:28:09 ALT58 systemd-logind[525]: Watching system buttons on /dev/input/event1 (Power Button)
May 28 16:28:30 ALT58 systemd-logind[525]: New session c1 of user _ldm.
ВХОД В УЧЕТКУ
May 28 16:32:24 ALT58 systemd-logind[525]: New session 12 of user user1.
May 28 16:35:17 ALT58 systemd-logind[525]: New session 20 of user root.
Вопрос по Корреляции и тегам в телеграм
Показать
Добрый день! Подскажите по тегам и корреляции
Получаю командой в ключе входы и выходы пользователей
формата
Removed session 1.
New session 6 of user root.
Removed session 6.
New session 8 of user root.

Теги в триггере
Имя session-journalctl Значение {{ITEM.VALUE}.iregsub("session ([0-9]+)( of|.)", "\1")}

Корреляция
Для: Все проблемы если значения тегов совпадают > Теги для совпадения

тут я так понял совпадение берется только из Имени, значение тут не сравнивается ?

Сделал тег в триггере полностью в ячейке Имя session-journalctl{{ITEM.VALUE}.iregsub("session ([0-9]+)( of|.)", "\1")}
И точно такой же сделал Теги для совпадения session-journalctl{{ITEM.VALUE}.iregsub("session ([0-9]+)( of|.)", "\1")}
Вроде все хорошо триггеры закрываются если номер сессии совпадает

Чтоб для разных сессий был разный триггер проблема множественный
создается новый триггер при каждом опросе элементов

Начал настраивать корреляцию
Тег старого события session-journalctl содержит {EVENT.TAGS}
Закрыть новое событие
Правила корреляции событий
Правила корреляции событий
Как правильно передать макрос, значения чтоб он только закрывал одинаковые триггеры сессии?
{EVENT.TAGS} формируется как session-journalctl:496, session-journalctl496
Для значения содержит пробовал указать {{ITEM.VALUE}.iregsub("session ([0-9]+)( of|.)", "\1")}

застрял на данном этапе

Сделал вместо Корреляции, diff в триггере решение
количество слов: 3144
Аватара пользователя
Артём Мамзиков
Admin
Сообщения: 804
Стаж: 5 лет 1 месяц
Откуда: Вологодская область
Поблагодарили: 33 раза
Контактная информация:

Входы Выходы Пользователей SSH Auth journalctl Alt Linux

Сообщение Артём Мамзиков »

Действие Завершение Сеанса Пользователей Linux дольше 12 часов сессия

Читаем тут
количество слов: 2
Аватара пользователя
Артём Мамзиков
Admin
Сообщения: 804
Стаж: 5 лет 1 месяц
Откуда: Вологодская область
Поблагодарили: 33 раза
Контактная информация:

Входы Выходы Пользователей SSH Auth journalctl Alt Linux

Сообщение Артём Мамзиков »

Еще примеры команд получения сессий пользователей
Пример вывода:
user :0 Jun 16 07:58 (:0)
root pts/0 Jun 16 10:41 (192.168.175.8)
root pts/1 Jun 16 11:48 (192.168.180.130) вход одновременно
root pts/2 Jun 16 11:48 (192.168.180.130) вход одновременно
user pts/3 Jun 16 11:51 (:0) терминал под root локально
user pts/4 Jun 16 12:03 (192.168.175.8) терминал под root

ОПЦИИ:
информации о пользователях, которые подключены к системе
-a (--all) — включает в себя все основные опции.
- b (--boot) — показывает время загрузки операционной системы.
-d (--dead) — выводит перечень зомби-процессов. (кто вышел)
- H (--heading) — никак не влияет на получаемую информацию, зато добавляет колонкам заголовки и помогает понять что где находится.
-m — показать пользователя, который сейчас работает в терминале.
-r — вывести текущий уровень запуска (runinit);
-t — показать последнее изменение системных часов;
-s — вывести только имя, терминальную сессию и время.
-q — вывести количество авторизованных пользователей.
-T — данные о терминальной сессии.
-u — показать активных пользователей.
--ips — вместо названия хостов показывает ips.
--lookup — используется в сочетании с --ips, выводит данные, которые основываются на сохраненном IP, если он доступен, а не на названии хоста
-a В состав этой опции входят опции -b, -d, --login, -p, -r, -t, -T, -u

Код: Выделить всё

lsof -n -a -itcp -stcp:established -c sshd
ОПЦИИ:
-n — не пытаться преобразовывать ip-адреса в доменные имена (может значительно ускорить работу)
-a — применить логическую операцию «и» («and»)
-itcp — показать tcp-сокеты
-stcp:established — показать tcp-сокеты, находящиеся в состоянии «established»
-c sshd — показать процессы, запущенные из бинарных файлов, имена которых начинаются строкой sshd
почему два фильтры -itcp и -c sshd вместо одного -itcp:22?
потому что в этом случае в вывод попадут и процессы ssh, запущенные локально и подключившиеся к 22-ым портам каких-нибудь машин. к тому же,
в случае, если ваш sshd слушает и/или порт(ы), отличный(е) от 22-го, то такие соединения просто не попадут в вывод.

Пример вывода:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 2608 root 3u IPv4 361287 0t0 TCP 192.168.175.36:ssh->192.168.175.8:57577 (ESTABLISHED)
sshd 5429 root 3u IPv4 386680 0t0 TCP 192.168.175.36:ssh->192.168.180.130:49835 (ESTABLISHED)

Код: Выделить всё

netstat -tnpa | grep 'ESTABLISHED.*sshd'
- устаревшая команда
Нет пользователя

Код: Выделить всё

ss -o state established '( dport = :ssh or sport = :ssh )'
Пример вывода:
Netid Recv-Q Send-Q Local Address:Port Peer Address:Port
tcp 0 272 192.168.175.36:ssh 192.168.180.130:49835 timer:(on,057ms,0)
tcp 0 0 192.168.175.36:ssh 192.168.175.8:57577 timer:(keepalive,76min,0)


Предыдущие команды:
journalctl -u sshd --since "today" --until "tomorrow" -o cat
journalctl -u sshd --since today --until tomorrow -o cat|egrep ^.*'(Accepted|Disconnected|disconnect|closed)'.*'(from|for)'.*|tail -1
journalctl -u sshd --since today --until tomorrow
journalctl -u sshd --since today --until tomorrow|egrep ^.*'(Accepted|Disconnected|disconnect|Session closed|Received)'.*|tail -1

journalctl -u 'systemd-logind' --since "today" --until "tomorrow" -o cat
journalctl -u systemd-logind --since today --until tomorrow -o cat|egrep ^.*'(New|Removed)'.*session.*|tail -1
journalctl -u systemd-logind --since today --until tomorrow -o cat|egrep ^.*'(New|Removed|Service)'.*|tail -1
количество слов: 321
Ответить Вложения 8 Пред. темаСлед. тема

Вернуться в «Мониторинг Сессий Пользователей в OS»