Estou procurando ajuda com um guia ou script de servidor Linux (CentOS) que possa ser usado para enviar um email para uma conta de servidor quando uma nova conexão SFTP for detectada. Por exemplo, fornecer o nome da conexão e o endereço IP solicitante, bem como o tipo de autenticação da conexão (se possível) (como chave SSH ou senha, etc.) .
Não tenho quase nenhuma experiência com scripts Bash, no entanto, fiz exatamente isso com sucesso, que detecta conexões SSH; no entanto, não consigo descobrir onde estender isso para notificar também o endereço de e-mail das conexões SFTP ao servidor,
Muito obrigado por qualquer ajuda sobre isso.
Eu percebo que esta é uma pergunta muito ruim e peço desculpas, mas os resultados do mecanismo de pesquisa estão me dando muitos resultados falsos, como "como faço SFTP para o meu servidor?!" etc., que são claramente inadequados.
Felicidades
Atualização 1
Portanto, /var/logs/secure
ele coleta as informações de conexão SFTP. Eu gostaria de ser capaz de pegar essa informação de alguma forma e jogá-la fora em um e-mail básico.
Meu detector SSH de trabalho atual faz isso em .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 protected]
Isso é chamado, acionado pelo CSF (ConfigServerFirewall)
Eu gostaria de combinar de alguma forma os dois acima para que, quando uma linha de informação for adicionada ao /var/log/secure
, como com:
Subsystem sftp /usr/libexec/openssh/sftp-server -l INFO
Em seguida, ele também poderá detectar os inícios da linha:
Chave pública aceita para ....
Que esta linha pode ser lançada em um e-mail para o endereço de e-mail ....
Atualização 2:
Talvez eu precise escrever meu próprio calço Bash ....
Atualização 3:
Graças a Piotr, meu código para o meu calço é agora:
#!/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 protected]
To: [email protected]
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 protected]
# Delete the log
rm -f "$LOGFILE"
Eu executei a instrução sendmail na linha de comando e isso funciona corretamente, no entanto, novas conexões SFTP estão resultando em EOF durante a leitura do pacote .
Atualização 4
Reduzindo o script para:
#!/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
Ainda retorna o EOF ao ler o problema do pacote ao conectar.
Atualização 5:
Definir as permissões do arquivo para serem idênticas às permissões do arquivo do subsistema original ( /usr/libexec/openssh/sftp-server
) resolve o problema e o script é executado corretamente.
O bom dos subsistemas ssh é que você pode substituir a implementação padrão ( internal-sftp como Martin observou) por outra implementação, por exemplo, um script wrapper em torno
/usr/lib/openssh/sftp-server
de .Um pequeno exemplo: crie um arquivo
/usr/local/bin/sftp-logger
com conteúdo:Então você só precisa substituir o servidor SFTP padrão pelo seu script em
/etc/ssh/sshd_config
: