Задать вопрос
@kavabangaungava

Как правильно настроить оповещение о подключении пользователя root?

Нашел старую статью на хабре, где с помощью notify-send можно настроить оповещение об подключение пользователей по ssh.

Пробую на Ubuntu 22.04 Desktop.

В частности, там приводится скрипт:

#!/bin/sh

export DISPLAY=:0
notify-send "Security Warning" "Occured Login as user \"$USER\" $(echo $SSH_CONNECTION $SSH_TTY | sed 's/\(.*\) \(.*\) \(.*\) \(.*\) \(.*\)/using SSH connection at \5 from \1:\2 to \3:\4/')" -u critical -i /usr/local/alert/icon.png
aplay -q /usr/local/alert/sound.wav

Который должен оповещать о подключении не только пользователей, но и root. Но в случае с подключением пользователя root, получаю вот такую ошибку:

ALSA lib pulse.c:242:(pulse_connect) PulseAudio: Unable to connect: Connection refused

aplay: main:831: audio open error: Connection refused
  • Вопрос задан
  • 395 просмотров
Подписаться 3 Средний 2 комментария
Решения вопроса 1
xotkot
@xotkot
хорошо есть и хорошо весьма
статья по которой вы делаете 10-тилетней давности и за это время возможно уже что-то изменилось в механике взаимодействия.
у меня, например, не работает от рута не то что воспроизведение музыки, а и сам notify-send что пришлось изголятся по типу такого:
sudo -u \#$(id -u ЮЗЕР) DISPLAY=:0 DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$(id -u ЮЗЕР)/bus notify-send 'Hello world!' 'This is an example notification.'

где за основу взята информация с арчвики

чтобы получить аналогичную возможность описанную в статье пришлось немного переработать взаимодействие для большей универсальности.
/etc/ssh/sshrc
pathfifo=/tmp/sshd_alarm/fifo; [[ -p $pathfifo ]] && echo $USER $SSH_TTY $SSH_CONNECTION > $pathfifo &

при коннекте по ssh проверяется существует ли именованный канал (FIFO) и если да то стучит в него полезную для нас информацию о том кто, как и куда.

pathfifo=/tmp/sshd_alarm/fifo; [[ ! -p $pathfifo ]] && mkdir -p -m o=x $(dirname $pathfifo) && mkfifo -m o=rw $pathfifo; tail -f $pathfifo | while read OUTPUT; do notify-send -u critical "Предупреждение безопасности" "$(echo "$OUTPUT"|awk '{print $1" [ "$2" ] инициировал SSH-соединение\n"$3":"$4"  "$5":"$6}')";ffplay -loglevel 24 -nodisp -autoexit /путь/к/аудиофайлу.mp3 &! ;done

данный код можно запустить в консоли для теста, поэтому для удобства сделал его в виде однострочника, при желании его можно запихнуть в systemd сервис либо общий либо для конкретного пользователя который сработает при старте системы.
Так вот, данный код создаст если нету FIFO файл куда будет прилетать для нас уведомления от нашего стукача, с помощью awk разбираем строку и шлем notify-send уведомление, а после в фоне запускаем указанный аудиофайл.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@pvsam
Можно контролировать любые логины с помощью модуля pam_exec.so. Он выставляет переменные окружения с информацией о пользователе и может вызывать скрипт для их разбора. Статью не напишу, но это универсальный путь для кустом контроля механики pam.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы