O melhor & a única abordagem apropriada é Desativar login SSH raiz . Não há necessidade de alertas por e-mail. Se algo de ruim acontecer, já será tarde demais quando você finalmente ler a notificação por e-mail. Isso já está explicado no artigo que você estava seguindo:
So it’s not a good practice to allow direct root login via SSH session and recommend to create non root accounts with
sudo
access. Whenever root access needed, first logged in as normal user and then usesu
to switch over to root user. To disable direct SSH root logins, follow our below [Disable SSH Root Login and Limit SSH Access] article that shows how to disable and limit root login in SSH.
Se você ainda estiver disposto a usar alertas por e-mail,
A solução .bashrc
parece ser muito popular, mas tem alguns problemas. Ele é executado (sempre e somente) quando bash
é iniciado. Ele pára de funcionar se for substituído por qualquer outro shell, ou o shell não foi iniciado (por exemplo, o login usado apenas para o encapsulamento no SFTP) e também é executado mesmo quando o SSH não está envolvido. Um invasor pode modificar o .bashrc
antes de invocar bash
para contornar seu alerta.
Como você provavelmente não usa o SSH internamente, usando ~/.ssh/rc
satisfaria as condições desejadas , por exemplo
ip='echo $SSH_CONNECTION | cut -d " " -f 1'
echo "Root login from $ip" | mail -s "Alert: SSH root login from $ip" [email protected]
Em seguida, para alertas de login SSH globais eu não usaria nada nos usuários home ~/
, pois o usuário pode modificá-lo facilmente. O ~/.ssh/rc
pode se tornar um padrão global usando /etc/ssh/sshrc
e qualquer usuário pode substituir as configurações usando o próprio ~/.ssh/rc
, com um retorno fácil removendo o arquivo.
Se você precisar impor o alerta de uma forma que um usuário não pode substituir, use /etc/pam.d/sshd
: add line session optional pam_exec.so seteuid /path/to/login-notify.sh
, em que o script .sh
envia o e-mail (ou o usuário).