Pull to refresh

Оповещение при подключении к SSH

Reading time 2 min
Views 20K
По результатам этого вопроса.

Как правило, при стандартных настройках во время установки соединения по SSH никаких оповещений на стороне сервера не появляется. Этим может воспользоваться злоумышленник — пока вы сейчас спокойно читаете хабр, возможно, с вашего компьютера уже передаются конфиденциальные данные. Описанную проблему можно легко исправить.

image

При установке соединения выполняется скрипт /etc/ssh/sshrc, причём помешать этому со стороны клиента невозможно. Создадим ещё один скрипт для оповещения и поместим команду для его запуска в /etc/ssh/sshrc:

/usr/local/alert/start.sh

Скрипт будет выводить сообщение с важной информацией через пакет notify-osd и включать привлекающую внимание сирену:

#!/bin/bash

export DISPLAY=:0
notify-send "Security Warning" "SSH Connection Established with \"$USER\" $(echo $SSH_CONNECTION | sed 's/\(.*\) \(.*\) \(.*\) \(.*\)/from \1:\2 to \3:\4/')" -u critical -i /usr/local/alert/icon.png
play /usr/local/alert/sound.wav > /dev/null 2>&1

Здесь сначала мы устанавливаем текущий дисплей для правильной работы notify-osd, далее выводим сообщение с иконкой и пометкой критической важности, используя системные переменные $USER (текущий пользователь) и $SSH_CONNECTION (данные о соединении, которые мы преобразуем в хорошо читаемый вид с помощью регулярных выражений утилитой sed). После этого мы проигрываем сирену.

Сюда же можно добавить и отправку сообщения на e-mail (с помощью sendmail) или Jabber (с помощью sendxmpp).

Для установки вы можете просто распаковать содержимое этого архива в корень файловой системы (эта операция сотрёт предыдущее содержимое sshrc!).

Не забудьте также установить нужные библиотеки, в Ubuntu это делается так:

sudo apt-get install libnotify-bin sox

UPD #1: По предложениям пользователей bliznezz и Inflame скрипт можно модифицировать:

#!/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/.bashrc код:

unset SSH_CONNECTION
/usr/local/alert/start.sh

Теперь скрипт будет ещё и сигнализировать при запуске оболочки от пользователя root.

UPD #2: Пользователь neperap также заметил, что если в домашней директории пользователя на сервере есть файл ~/.ssh/rc, то выполнится именно он, и система оповещения работать не будет. Также, для корректного выполнения эти скрипты не должны выводить текст в консоль.
Tags:
Hubs:
+147
Comments 85
Comments Comments 85

Articles