Enviar email se o usuário acessar o servidor via ssh [closed]

2

Eu quero ser notificado se alguém acessar meu servidor Debian via ssh.

Por isso, quero enviar um e-mail sempre que um usuário faz login no meu servidor via ssh, então adicionei essa linha no final de /etc/profile :

/usr/local/bin/shell-login.sh | mailx -s "SSH Login User $(whoami) on YOUR-HOSTNAME" [email protected]

/usr/local/bin/shell-login.sh contém:

#!/bin/bash

echo "Login on $(hostname) at $(date +%Y-%m-%d +%H:%M)"
echo "User: "$(whoami)
echo
id
echo
finger

Isso funciona muito bem: recebo um e-mail a cada minuto informando que root está efetuando login, o que parece ser causado por cron (consulte /var/log/auth.log )

Como faço para alterar essa configuração para não enviar e-mails em chamadas ssh internas automatizadas?

    
por rubo77 26.01.2015 / 04:46

3 respostas

4

Para mim, a questão ainda não está clara, por isso tento responder à pergunta contida no primeiro parágrafo. Como logar logins SSH?

Também vou limitar minha resposta a todos os sistemas * nix com suporte a PAM. Este é um ponto relevante, porque você não limita o escopo da sua pergunta dando um sistema operacional em particular.

Ok, aqui está o que eu usei no passado: sshrc . Se você adicionar um arquivo com o nome em /etc/ssh (a localização pode variar!), Ele será executado por conexões SSH interativas (por exemplo, com shell).

A desvantagem é que você não será informado sobre as coisas que também são relevantes, como conexões SFTP ( sftp-internal subsystem).

No entanto, temos uma rota aqui.

Podemos usar o PAM com pam_exec.so para nossa vantagem e limitar seu efeito ao SSH adicionando isso a /etc/pam.d/sshd (para mim, é a última linha sem comentário):

session    optional     pam_exec.so stdout /etc/your_email_script.sh

Isso garantirá que o script seja executado como um usuário privilegiado (relevante se você preferir chamar o binário sendmail para enviar o e-mail) e que não há praticamente nada que o usuário possa fazer para evitar que esse script seja executado. Você pode limitar efetivamente o acesso a esse script apenas para root .

A parte com optional você deve ajustar se necessário. Leitura relevante: man pam_exec , man pam.conf , man pam.d .

Você também pode querer brincar com o quão cedo você deseja executar seu script.

O que você vê a perder é. Você tem muitas outras maneiras de bloquear o servidor. Para começar: não permita senhas. Mantenha a autenticação somente de chave. Certifique-se de que as pessoas com acesso somente ao SFTP não tenham acesso adicional:

Match group sftponly
        ChrootDirectory /home
        X11Forwarding no
        AllowTcpForwarding no
        ForceCommand internal-sftp
        PasswordAuthentication no

permitirá que os membros do grupo sftponly usem apenas SFTP e nenhum encaminhamento de porta, etc., e limitará o escopo a /home (as permissões de arquivo / pasta fazem o resto).

AllowGroups ssh-users

somente permitirá que os membros de um grupo ssh-users até façam logon via SSH. Ou seja, você pode limitar o logon SSH a um subconjunto de sua base de usuários.

PermitRootLogin no

deve ser definido e os usuários relevantes devem ser sudoers.

PasswordAuthentication no
PubkeyAuthentication yes

deve garantir que a senha sobre a qual você tem controle limitado não possa ser usada para fazer logon.

AuthorizedKeysFile     /some/protected/folder/.ssh/authorized_keys

pode garantir que os usuários não tenham permissão para gerenciar seu arquivo authorized_keys , mas exige que você faça isso em seu nome.

    
por 26.01.2015 / 12:08
1

Você pode fazer isso editando (com cuidado) /etc/pam.d/sshd e adicionando o módulo pam_exec na pilha. Este módulo pode ser usado para chamar um programa externo - como o seu script - quando alguém iniciou com sucesso uma sessão ssh.

Deixe-me saber se você precisa de "instruções" e atualizarei minha resposta para incluí-las em um sistema baseado no Debian. (Outras distribuições têm pilhas PAM ligeiramente diferentes, então você teria que interpretar minhas instruções ao invés de segui-las cegamente).

    
por 26.01.2015 / 11:57
0

Tente isto:

#!/bin/bash

if [ ! $(whoami) == root ] ; then
echo "Login on $(hostname) at $(date +%Y-%m-%d +%H:%M)"
echo "User: "$(whoami)
echo
id
echo
finger
fi
    
por 26.01.2015 / 08:29