Назад | Перейти на главную страницу

Linux Bash Script для обнаружения (и уведомления по электронной почте) новых SFTP-подключений к серверу

Мне нужна помощь с руководством или сценарием для Linux-сервера (CentOS), которые можно использовать для отправки электронной почты на учетную запись сервера при обнаружении нового SFTP-соединения. Например, указание имени соединения и запрашиваемого IP-адреса, а также типа аутентификации соединения (если возможно) (например, SSH-ключ или пароль и т. Д.).

У меня почти нет опыта работы со сценариями Bash, однако я успешно сделал именно это, которое обнаруживает соединения SSH; однако я не могу найти, куда пойти, чтобы продлить это, чтобы также уведомить адрес электронной почты SFTP-подключения на сервер,

Большое спасибо за любую помощь в этом.

Я понимаю, что это довольно дерьмовый вопрос, и прошу прощения, но результаты поисковой системы дают мне много ложных результатов, таких как «как мне отправить SFTP на мой сервер ?!» и т. д., которые явно неуместны.

Ура


Обновление 1

Так что /var/logs/secure собирает информацию о соединении SFTP. Я хотел бы иметь возможность как-нибудь получить эту информацию и выбросить ее в простом письме.

Мой текущий рабочий детектор SSH делает это в .bashrc:

echo -e 'ALERT - SSH access detected:' `date` `ls -l \`tty\` | awk '{print $3}'` '\n\nConnection Details: ' `w -h` '\n\nList of WHO: ' `who --login` | mail -s "Alert: Server Access Email Subject" email@address.com

Это вызывается CSF (ConfigServerFirewall).

Я хотел бы как-то объединить два вышеупомянутых, чтобы при добавлении информационной строки в /var/log/secure например, с:

Subsystem       sftp    /usr/libexec/openssh/sftp-server -l INFO

Тогда он также сможет обнаружить начало строки:

Принят публичный ключ для ....

Эта строка может быть отправлена ​​в электронном письме на адрес электронной почты ....


Обновление 2:

Возможно, мне придется написать свою собственную прокладку Bash ....


Обновление 3:

Благодаря Петру мой код для моей прокладки теперь:

#!/bin/bash
# Create a temporary log file
LOGFILE=$(/bin/mktemp /tmp/sftplog.XXXXXX)
# Redirect stderr to LOGFILE
exec 2>"$LOGFILE"

# Run the SFTP with logging to stderr
/usr/libexec/openssh/sftp-server -e -u 022 -l VERBOSE

# Use some sendmail substitute to send an e-mail
/usr/sbin/sendmail -i root@localhost <<EOF
From: email@localaddress.co.uk
To: email@localaddress.co.uk
Subject: SFTP connection for user $(LOGNAME)

Hello,
User $(LOGNAME) just connected to the SFTP server from $(SSH_CONNECTION).

Connection log:
$(<"$LOGFILE")
EOF

# echo -e "Hello,\nUser $(LOGNAME) just connected to the SFTP server from $(SSH_CONNECTION).\n\nConnection log:\n$(<"$LOGFILE")" | mail -s "SFTP connection for user $(LOGNAME)" email@localaddress.co.uk

# Delete the log
rm -f "$LOGFILE"

Я запустил инструкцию sendmail из командной строки, и она работает правильно, однако новые соединения SFTP приводят к EOF при чтении пакета.


Обновление 4

Сокращение сценария до:

#!/bin/bash
# Create a temporary log file

# Run the SFTP with logging to stderr
/usr/libexec/openssh/sftp-server -e -u 022 -l INFO
exec >/dev/null

По-прежнему возвращает EOF при чтении пакета проблема при подключении.


Обновление 5:

Установка прав доступа к файлам идентична разрешениям исходного файла подсистемы (/usr/libexec/openssh/sftp-server) устраняет проблему, и сценарий работает правильно.

Хорошая вещь в ssh подсистемы заключается в том, что вы можете заменить реализацию по умолчанию (внутренний sftp как заметил Мартин) с другой реализацией, например сценарий обертки вокруг /usr/lib/openssh/sftp-server.

Небольшой пример: создайте файл /usr/local/bin/sftp-logger с содержанием:

#!/bin/bash
# Create a temporary log file
LOGFILE=$(/bin/mktemp /tmp/sftplog.XXXXXX)
# Redirect stderr to LOGFILE
exec 2>$LOGFILE

# Run the SFTP with logging to stderr
/usr/lib/openssh/sftp-server -e -l INFO

# In case of chatty sendmail
exec >/dev/null

# Use some sendmail substitute to send an e-mail
/usr/sbin/sendmail -i root@localhost <<EOF
From: sshd@localhost
To: root@localhost
Subject: SFTP connection for user $LOGNAME

Hello,
User $LOGNAME just connected to the SFTP server from $SSH_CONNECTION.

Connection log:
$(<$LOGFILE)
EOF

# Delete the log
rm -f $LOGFILE

Тогда вам просто нужно заменить SFTP-сервер по умолчанию своим скриптом в /etc/ssh/sshd_config:

Subsystem sftp /usr/local/bin/sftp-logger