Created
January 31, 2025 15:25
-
-
Save YogSottot/0d59f202b1078329c75dd54f6d398552 to your computer and use it in GitHub Desktop.
zabbix SSH-Local Auth Linux
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env bash | |
# 21.06.2022 Рабочий Авторизованные пользователи Linux | |
# Автор Мамзиков Артём Андреевич | |
# https://diyit.ru/viewtopic.php?t=1994 | |
IP=$1 | |
PORT=${2:-10050} | |
HOSTHOST=$3 | |
# Get the ignore lists from macros | |
SSH_IP_IGNORE=${4:-""} | |
SSH_USER_IGNORE=${5:-""} | |
# На основе команды who будем формировать лог/журнал для передачи в заббикс | |
authlist=$(zabbix_get -s $IP -p $PORT -k system.run["who -dsTu"] | grep -v tmux | sed 's/\s\+/ /g') | |
# Обработаем построчно | |
IFS=$'\n' | |
for strokami in $authlist; do | |
# Выбираем строки авторизации, кроме строк выхода | |
strauth=$(echo "$strokami" | grep -Eiv 'exit|выход') | |
if [[ "$strauth" != "" ]]; then | |
# Получим ID сессии для ключа | |
idsession=$(echo "$strokami" | sed -E 's|.*[0-9]+:[0-9]+ ||' | sed 's|^[A-Za-zA-Яа-я]\+ ||' | sed 's/(.*\|id.*//' | tr -d ' ' | grep -oe '[0-9]\+') | |
# Пользователь | |
authuser=$(echo "$strauth" | awk '{print $1}') | |
# IP адрес (извлекаем из скобок) | |
authip=$(echo "$strauth" | grep -oP '\(\K[^\)]+' || echo "N/A") | |
# Check if the user or IP is in the ignore list | |
if [[ ! "$authip" =~ (^|[[:space:]])$SSH_IP_IGNORE($|[[:space:]]) ]] && [[ ! "$authuser" =~ (^|[[:space:]])$SSH_USER_IGNORE($|[[:space:]]) ]]; then | |
# Формируем список | |
JSON=$JSON"$SEP\n{\"{#AUTHID}\":\"$idsession\",\"{#AUTHUSER}\":\"$authuser\", \"{#AUTHIP}\":\"$authip\", \"{#STAUTH}\":\"$strauth\"}" | |
SEP=", " | |
fi | |
fi | |
done | |
# Выводим результат в json | |
JSON="["$JSON"\n]" | |
echo -e "${JSON}" | |
# Для того чтоб ввести триггер сразу в ошибку нужно передать данные в элемент сразу после обнаружения, еще раз цикл( | |
# IFS=$'\n' | |
# for strokami in $authlist;do | |
# strauth=$(echo "$strokami" | grep -Eiv 'exit|выход') | |
# idsession=$(echo "$strokami" | sed -E 's|.*[0-9]+:[0-9]+ ||' | sed 's|^[A-Za-zA-Яа-я]\+ ||' | sed 's/(.*\|id.*//' | tr -d ' ' | grep -oe '[0-9]\+') | |
# if [[ "$strauth" != "" ]]; then | |
# zabbix_sender -z 127.0.0.1 -p 10051 -s "${HOSTHOST}" -k authuser[\""${idsession}"\"] -o "1" > /dev/null | |
# fi | |
# done |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
zabbix_export: | |
version: '7.0' | |
template_groups: | |
- uuid: 6bdf2c96bf374172a0e108c0e1ddb355 | |
name: 'Линукс Сервера/Linux servers' | |
templates: | |
- uuid: a809457c33424690851a69f7777f5882 | |
template: 'SSH-Local Auth Linux' | |
name: 'SSH-Local Auth Linux' | |
description: | | |
На основе команд | |
who | |
lsof -n -a -itcp -stcp:established -c sshd | |
netstat -tnpa | grep 'ESTABLISHED.*sshd' устаревшая команда | |
ss -o state established '( dport = :ssh or sport = :ssh )' | |
*Если вход выполнен под user а после сделан переход в терминале под su (root) Этого будет не видно! останется user! | |
groups: | |
- name: 'Линукс Сервера/Linux servers' | |
items: | |
- uuid: 6916f72e03c54663a3d5977e9e525d0c | |
name: 'who Кто в системе' | |
key: 'system.run["who -dsTu"]' | |
history: 1h | |
value_type: TEXT | |
trends: '0' | |
status: DISABLED | |
description: | | |
system.run["who -a|tail -n +3"] | |
system.run["who -aH"] | |
информации о пользователях, которые подключены к системе | |
-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 | |
tags: | |
- tag: Application | |
value: 'Авторизация SSH' | |
discovery_rules: | |
- uuid: ed895f4708344efb9c97b7e54450a80d | |
name: 'Обнаружение пользователей выполнивших вход в ОС' | |
type: EXTERNAL | |
key: 'authlinuxlld.sh[{HOST.CONN},{$HOST.PORTS},{HOST.HOST},{$SSH_IP_IGNORE},{$SSH_USER_IGNORE}]' | |
lifetime_type: DELETE_IMMEDIATELY | |
lifetime: '0' | |
description: | | |
На основе вывода команды who -dsTu | |
Найденные пользователи сразу будут выводить триггер в ошибку, после пропадания в списке обнаружения пользователя, пропадание триггера. | |
item_prototypes: | |
- uuid: fc221c64ef0d4ca1886b98bed05b9f87 | |
name: 'Auth-User: {#STAUTH}' | |
type: TRAP | |
key: 'authuser["{#AUTHID}"]' | |
delay: '0' | |
history: 1h | |
trends: 0d | |
description: 'Временный элемент, создается пока пользователь {#AUTHUSER} находится в ОС Linux .' | |
tags: | |
- tag: Application | |
value: 'Авторизация SSH' | |
trigger_prototypes: | |
- uuid: 5f14dd35f8dc44bda99ec38716a7e399 | |
expression: | | |
last(/SSH-Local Auth Linux/authuser["{#AUTHID}"])=1 or | |
nodata(/SSH-Local Auth Linux/authuser["{#AUTHID}"],35s)=1 | |
name: 'Auth-User: {#STAUTH}' | |
priority: INFO | |
description: | | |
Триггер создается пока пользователь: {#AUTHUSER} находится на {HOSTNAME} | |
(:0) - Локальный Вход | |
{#STAUTH} | |
manual_close: 'YES' | |
macros: | |
- macro: '{$HOST.PORTS}' | |
value: '10050' | |
- macro: '{$SSH_IP_IGNORE}' | |
value: (1.1.1.1|2.2.2.2) | |
description: 'List in parentheses separated by a vertical line' | |
- macro: '{$SSH_USER_IGNORE}' | |
description: 'List in parentheses separated by a vertical line' |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment