Olá a todos,
recentemente configurei o
proFTPD em um servidor para compartilharmos arquivos com amigos, mas necessitava ter um certo controle sobre isso (com toda certeza vão se perguntar porque não usar nuvem e blá blá), bem, porquê são arquivos de cunho profissional e alguns de cunho pessoal o qual gostamos de manter privado (nada ilegal).
Bem, procurando uma solução não encontrei algo do tipo, ou não soube procurar de forma correta, dessa forma resolvi criar uma script com alguns elementos do próprio
Linux que existem ou que tem no seu repositório dos quais achei pesquisando diretamente nele.
Toda configuração fora realizada em um Debian 9 (Stretch):
- proFTPD - instalado (não irei abordar instalação já que tem muitos por aqui no VOL)
- fileschanged - existe no repositório direto do Debian (aptitude install fileschanged) para instalação
- sendemail - existe no repositório direto do Debian (aptitude install sendemail) para instalação
- diff - para comparar os arquivos (não abordarei seu uso detalhado) - vem nativo no sistema
- cat - Serve para concatenar arquivos e imprimir a saída padrão - Google tradutor =) - vem nativo no sistema
Mas vamos ao que interessa né!! =)
Para melhor entendimento usarei como diretório padrão /opt/FTP/, dessa forma não foge a didática para que dê certo as configurações, mas pode ser colocado em qualquer diretório de sua escolha.
Com tudo acima instalado e rodando já vamos à primeira parte, que é a configuração de envio por email usando o sendemail.
Este é para envio de email dos usuários ftp logados.
Editor a sua escolha:
/opt/FTP/logando.sh
# !/bin/bash
smtpemailfrom=emailenvio@email.com #email para envio
mailto=emailrecebe@email.com #email que receberá
subject='Logado FTP Server' # Assunto do Email
smtpserver=mail.server.com # Host Servidor de Email
smtplogin= emailenvio@email.com #email para envio
smtppass=senha #senha do email
smtpauth=tls=yes #tipo de criptografia do servidor
arq=/opt/FTP/logando.txt #Aqui coloquei o arquivo que ira ser comparado e enviado
/usr/bin/sendemail -f $smtpemailfrom -t $mailto -u $subject -o message-file=$arq -s $smtpserver:587 -xu $smtplogin -xp $smtppass
Salve o arquivo.
Vamos agora copiar o arquivo log do proFTPD para comparação:
# cp /var/log/proftpd/proftpd.log /opt/FTP/
Aqui iremos fazer o script para verificação do usuários logados no FTP, lembre-se de estar dentro do diretório /opt/FTP/.
Editor a sua escolha:
/opt/FTP/ftplogin.sh
#!/bin/bash
EMAIL1=/opt/FTP/logando.sh #Script pra envio de email
loginftp=/opt/FTP/proftpd.log #Cópia do Arquivo LOG do proFTPD var/log/proftpd.log
arquivo1=/opt/FTP/logando.txt #Será criado com a diferença entre os arquivos proftpd
logando=/var/log/proftpd/proftpd.log #Esse é o arquivo de log do proFTPD
deslogado=/opt/FTP/deslogado.txt #Arquivo para saber quando o usuário deslogar
#LOGANDO
diff $logando $loginftp |grep -E "usuario|usuario2" > $arquivo1 #O grep faz um filtro mas se não quiser filtro apenas tirar o grep
if [[ -z $arquivo1 ]]; then
cat $deslogado > $arquivo1
$EMAIL1
elif [[ -s $arquivo1 ]]; then
diff $logando $loginftp |grep -E "usuario|usuario2"> $arquivo1 #O grep faz um filtro mas se não quiser filtro apenas tirar o grep
cat $logando > $loginftp
echo "Sessão Aberta no FTP"
$EMAIL1
else
echo "Sessão Fechado no FTP"
cat $deslogado > $arquivo1
$EMAIL1
fi
Salve o arquivo.
Aqui vamos apenas criar o arquivo deslogado.txt para quando o usuário deslogar, você receberá um email e no corpo dele irá a mensagem que colocará neste arquivo.
Editor a sua escolha:
/opt/FTP/ftplogin.sh
echo "Usuário deslogado da sessão FTP!!"
Salve o arquivo.
Nessa parte é que vamos fazer o pulo do gato para que tudo isso funcione:
fileschanged -f /var/log/proftpd/proftpd.log -x /opt/FTP/ftplogin.sh &
O comando fileschanged verifica o log do proFTPD e executa o nosso script em modo background, dessa forma não precisamos nos preocupar com a finalização do script ao sair do sistema e posteriormente pode ser colocado na inicialização do sistema.
Quanto os parâmetros -f e -x:
- -f = Arquivo o qual ele irá ficar verificando se há alteração
- -x = Executa script ou aplicação
Até aqui nossa estrutura de arquivo dentro do /opt/FTP/ deverá estar assim:
- logando.sh - envio do email logado
- ftplogin.sh - script de verificação de usuário logado
- logando.txt - diferença dos logs que é o que será enviado por email
- deslogado.txt - envia um email quando o usuário deslogar da sessão algo como echo "Usuário deslogado da sessão"
- proftpd.log - arquivo de comparação
Não se esqueça de dar permissão de execução nos .sh para poder executar os scripts:
# chmod +x logando.sh ftplogin.sh
Se tudo deu certo, ao logar no ftp você irá receber a notificação por email, lembre-se que isso é por comparação de arquivos de log, então no primeiro acesso deve vir muito lixo do que já foi usado do ftp, então aconselho limpar o arquivo de logo antes do seu uso.
Deve receber no email algo parecido com isso
Nessa outra parte vamos configurar outro script para as atividades do que é colocado, alterado ou tirado do FTP, primeiro vamos copiar o arquivo de log:
# cp /var/log/proftpd/xferlog /opt/FTP/
Este é para envio de email dos arquivos upados ou deletados.
Editor a sua escolha:
/opt/FTP/files.sh
# !/bin/bash
smtpemailfrom=emailenvio@email.com #email para envio
mailto=emailrecebe@email.com #email que receberá
subject='Atividade Files FTP Server' # Assunto do Email
smtpserver=mail.server.com # Host Servidor de Email
smtplogin= emailenvio@email.com #email para envio
smtppass=senha #senha do email
smtpauth=tls=yes #tipo de criptografia do servidor
arq=/opt/FTP/files.txt #Aqui coloquei o arquivo que ira ser comparado e enviado
/usr/bin/sendemail -f $smtpemailfrom -t $mailto -u $subject -o message-file=$arq -s $smtpserver:587 -xu $smtplogin -xp $smtppass
Salve o arquivo.
Aqui é o script para verificação das atividades do que é feito dos arquivos no FTP.
Editor a sua escolha:
/opt/FTP/filesftp.sh
#!/bin/bash
EMAIL2=/opt/FTP/files.sh
files=/opt/FTP/xferlog
arquivo2=/opt/FTP/files.txt
log=/var/log/proftpd/xferlog
#FILES ATIVIDADE
diff $log $files > $arquivo2
cat $log > $files
echo "Arquivo FTP.."
$EMAIL2
Salve o arquivo.
Mesmas coisas, não esquecendo de dar permissão de execução aos scripts:
# chmod +x files.sh filesftp.sh
E vamos rodar o outro fileschanged para as atividades do arquivo FTP:
# fileschanged -f /var/log/proftpd/xferlog -x /opt/FTP/filesftp.sh &
Agora nossa estrutura de arquivo dentro do /opt/FTP/ deverá estar assim:
- logando.sh - envio do email usuário logado
- ftplogin.sh - script de verificação de usuário logado
- logando.txt - diferença dos logs que é o que será enviado por email
- deslogado.txt - envia um email quando o usuário deslogar da sessão algo como echo "Usuário deslogado da sessão"
- proftpd.log - arquivo de comparação
- files.sh - envio do email das atividades de arquivos do ftp
- filesftp.sh - script de verificação das atividades de arquivos do ftp
- file.txt - diferença dos logs que é o que será enviado por email das atividades de arquivos do ftp
- xferlog - arquivo de comparação das atividades de arquivos do ftp
Pode ser usado um sed ou um cut para melhorar as informações de que serão enviadas por email, fiquem a vontade para melhorar o script e postem nos comentários pois, pode servir para outras pessoas.
Fontes do fileschanged: