Como determinar o endereço IP de quem fez login na raiz?
15
Existem várias pessoas com acesso root a uma VM específica pela qual sou responsável. Gostaria de descobrir qual endereço IP foi usado para fazer login na raiz.
Você pode acessar os logs para ver o que os comandos foram feitas anteriormente: sudo less /root/.bash_history, eu ainda estou tentando pesquisar isso, parece ser uma pergunta muito boa :)
Se alguém fizer logon como root, eles podem fazer praticamente tudo o que deseja remover todos os logs que eles precisam também ...
Comintern
4
Como uma observação lateral, você deve impedir o login direto da raiz. É um grande problema de segurança.
Fedorqui
Respostas:
15
Você pode usar o lastcomando para obter essas informações
# last|head
phemmer ssh 192.168.0.24 Wed Aug 20 21:08 - 21:08 (00:00)
phemmer pts/13 192.168.0.2 Wed Aug 20 14:00 - 18:43 (04:43)
phemmer ssh 192.168.0.2 Wed Aug 20 14:00 - 18:43 (04:43)
phemmer ssh ::1 Wed Aug 13 23:08 - 23:08 (00:00)
phemmer ssh ::1 Wed Aug 13 23:08 - 23:08 (00:00)
phemmer ssh ::1 Wed Aug 13 23:07 - 23:07 (00:00)
phemmer pts/15 192.168.0.20 Thu Aug 7 19:00 - 19:00 (00:00)
phemmer ssh 192.168.0.20 Thu Aug 7 19:00 - 19:00 (00:00)
phemmer :0 Wed Jul 30 20:06 still logged in
reboot system boot 3.13.2-gentoo Wed Jul 30 20:05 still running
Como você pode ver sem dúvida, a terceira coluna mostrará o endereço IP remoto no caso de um login SSH.
lastusa o /var/log/wtmparquivo, então esse método é semelhante à resposta do G-Man (um pouco mais simples, pois você não precisa especificar o caminho para o arquivo).
Isso depende da sua distribuição ou sistema operacional. sshdregistrará cada login em algum lugar e incluirá o endereço IP relevante no login em um formato como este:
Aug 20 15:56:53 machine sshd[2728]: Accepted publickey for root from 192.168.1.2 port 49297
Essa parte é consistente, mas como você chega lá pode variar. Em sistemas baseados emsystemd , use journalctl:
journalctl /usr/bin/sshd
para listar todas as mensagens de log do sshd executável. Você pode esperar isso para logins raiz ou outros critérios e limitá-lo por data com --sincee --until(consulte man journalctl).
Alternativamente e historicamente, as mensagens serão registradas (geralmente) em algum lugar /var/log. Comumentesshd mensagens são enviadas /var/log/auth.log, mas o arquivo exato pode variar substancialmente. Qualquer que seja:
grep sshd /var/log/auth.log
fornecerá uma saída amplamente equivalente à journalctlversão.
Truque legal, mas IMO você está melhor fora apenas usandolast
Creek
7
Você não deve permitir que as pessoas sshfaçam login diretamente como root (usando a senha root ou um certificado /root/.ssh/authorized_keys) se desejar auditar quem fez login como root. Em vez disso, use uma conta para cada pessoa e deixe-a usar sudopara obter permissões de root. Dessa maneira, você encontrará no log apropriado (a posição do arquivo de log depende de qual distribuição você possui, você pode até configurar o daemon de log para enviar as mensagens para outra máquina) a mensagem user john ran the command 'sudo rm -rf /'. Bem, talvez você não encontre facilmente esse comando nos logs.
Primeiro, isso não responde à pergunta. Segundo, você sempre deve ter uma maneira de resgatar o sistema. O que acontece quando você usa a autenticação LDAP e seu servidor LDAP morre? Como você vai entrar na caixa?
Patrick
4
@Patrick Primeiro, a pergunta começa com "existem várias pessoas com acesso root a uma VM específica"; portanto, faz sentido sugerir que a abordagem correta não é auditar o IP, mas sim auditar os usuários. Segundo, o problema que você coloca não tem relação: se uma pessoa deve acessar uma máquina em uma emergência do LDAP que não está funcionando, ela deve ter sua própria conta local e se ela deve fazer trabalhos administrativos em uma situação de emergência, a conta local deve ter sudopoder. Nunca existe um motivo real para compartilhar uma conta entre duas pessoas, mas uma pessoa pode ter duas contas, se necessário.
Pqnet
A questão não é perguntar como alterar seu design, mas como obter um endereço IP. Quanto à sua outra solução, agora você tem uma conta local (possivelmente várias), com uma senha que nunca expira. Eu não consideraria isso uma melhoria.
Patrick
@ Patrick qualquer que seja. Você gerencia seu próprio servidor, eu administro o meu. Você fez o seu ponto, as pessoas vão ler o seu comentário e decidir.
Pqnet
1
@Patrick melhoria sobre o que? Ter contas de usuário separadas para pessoas separadas é quase certamente uma melhoria em relação a várias pessoas compartilharem uma única rootconta.
Jk013
0
A partir da breve descrição que você forneceu, parece que seria melhor se você configurasse um sistema de monitoramento de logs. Isso o ajudaria a monitorar os logins, criar alertas, comparar os dados de vários dias e, sim, é claro, gráficos para tudo isso.
Mas se você precisar monitorá-lo temporariamente , poderá usar o lastcomando
last | grep root | grep -v tty | awk '{print $3}'
Isso fornecerá a lista de IPsou Hostnamesde onde o usuário root efetuou login.
sudo less /root/.bash_history
, eu ainda estou tentando pesquisar isso, parece ser uma pergunta muito boa :)Respostas:
Você pode usar o
last
comando para obter essas informaçõesComo você pode ver sem dúvida, a terceira coluna mostrará o endereço IP remoto no caso de um login SSH.
last
usa o/var/log/wtmp
arquivo, então esse método é semelhante à resposta do G-Man (um pouco mais simples, pois você não precisa especificar o caminho para o arquivo).fonte
Isso depende da sua distribuição ou sistema operacional.
sshd
registrará cada login em algum lugar e incluirá o endereço IP relevante no login em um formato como este:Essa parte é consistente, mas como você chega lá pode variar. Em sistemas baseados em
systemd
, usejournalctl
:para listar todas as mensagens de log do
sshd
executável. Você pode esperar isso para logins raiz ou outros critérios e limitá-lo por data com--since
e--until
(consulteman journalctl
).Alternativamente e historicamente, as mensagens serão registradas (geralmente) em algum lugar
/var/log
. Comumentesshd
mensagens são enviadas/var/log/auth.log
, mas o arquivo exato pode variar substancialmente. Qualquer que seja:fornecerá uma saída amplamente equivalente à
journalctl
versão.fonte
O comando
deve mostrar informações como o que
who
mostra, mas voltando no tempo.fonte
last
Você não deve permitir que as pessoas
ssh
façam login diretamente como root (usando a senha root ou um certificado/root/.ssh/authorized_keys
) se desejar auditar quem fez login como root. Em vez disso, use uma conta para cada pessoa e deixe-a usarsudo
para obter permissões de root. Dessa maneira, você encontrará no log apropriado (a posição do arquivo de log depende de qual distribuição você possui, você pode até configurar o daemon de log para enviar as mensagens para outra máquina) a mensagemuser john ran the command 'sudo rm -rf /'
. Bem, talvez você não encontre facilmente esse comando nos logs.fonte
sudo
poder. Nunca existe um motivo real para compartilhar uma conta entre duas pessoas, mas uma pessoa pode ter duas contas, se necessário.root
conta.A partir da breve descrição que você forneceu, parece que seria melhor se você configurasse um sistema de monitoramento de logs. Isso o ajudaria a monitorar os logins, criar alertas, comparar os dados de vários dias e, sim, é claro, gráficos para tudo isso.
Mas se você precisar monitorá-lo temporariamente , poderá usar o
last
comandoIsso fornecerá a lista de
IPs
ouHostnames
de onde o usuário root efetuou login.fonte