Мне нужна помощь с руководством или сценарием для Linux-сервера (CentOS), которые можно использовать для отправки электронной почты на учетную запись сервера при обнаружении нового SFTP-соединения. Например, указание имени соединения и запрашиваемого IP-адреса, а также типа аутентификации соединения (если возможно) (например, SSH-ключ или пароль и т. Д.).
У меня почти нет опыта работы со сценариями Bash, однако я успешно сделал именно это, которое обнаруживает соединения SSH; однако я не могу найти, куда пойти, чтобы продлить это, чтобы также уведомить адрес электронной почты SFTP-подключения на сервер,
Большое спасибо за любую помощь в этом.
Я понимаю, что это довольно дерьмовый вопрос, и прошу прощения, но результаты поисковой системы дают мне много ложных результатов, таких как «как мне отправить SFTP на мой сервер ?!» и т. д., которые явно неуместны.
Ура
Так что /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
Тогда он также сможет обнаружить начало строки:
Принят публичный ключ для ....
Эта строка может быть отправлена в электронном письме на адрес электронной почты ....
Возможно, мне придется написать свою собственную прокладку Bash ....
Благодаря Петру мой код для моей прокладки теперь:
#!/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 при чтении пакета.
Сокращение сценария до:
#!/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 при чтении пакета проблема при подключении.
Установка прав доступа к файлам идентична разрешениям исходного файла подсистемы (/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