Pull to refresh

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

Reading time2 min
Views20K
По результатам этого вопроса.

Как правило, при стандартных настройках во время установки соединения по 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
Comments85

Articles