Comment déterminer l'adresse IP de qui s'est connecté à Root?


15

Il y a plusieurs personnes avec un accès root à une VM particulière dont je suis responsable. Je voudrais savoir quelle adresse IP a été utilisée pour se connecter à root.


1
Vous pouvez accéder aux journaux pour voir quelles commandes ont été effectuées précédemment sudo less /root/.bash_history
:,


6
Si quelqu'un se connecte en tant que root, il peut faire à peu près tout ce qu'il veut pour supprimer tous les journaux dont il a besoin ...
Comintern

4
En guise de remarque, vous devez interdire la connexion directe root. C'est un gros problème de sécurité.
fedorqui

Réponses:


15

Vous pouvez utiliser la lastcommande pour obtenir ces informations

# 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

Comme vous pouvez le voir sans aucun doute, la 3ème colonne affichera l'adresse IP distante en cas de connexion SSH.

lastutilise le /var/log/wtmpfichier, donc cette méthode est similaire à la réponse de G-Man (juste un peu plus simple car vous n'avez pas besoin de spécifier le chemin d'accès au fichier).


14

Cela dépend de votre distribution ou de votre système d'exploitation. sshdenregistrera chaque connexion quelque part et inclura l'adresse IP appropriée dans la connexion dans un format comme celui-ci:

Aug 20 15:56:53 machine sshd[2728]: Accepted publickey for root from 192.168.1.2 port 49297

Cette partie est cohérente, mais la façon dont vous y arrivez peut varier. Sur les systèmes basés sur systemd, utilisez journalctl:

journalctl /usr/bin/sshd

pour répertorier tous les messages de journal de l' sshdexécutable. Vous pouvez le récupérer pour les connexions root ou d'autres critères, et le limiter par date avec --sinceet --until(voir man journalctl).

Alternativement et historiquement, les messages seront connectés (généralement) quelque part /var/log. Généralement, les sshdmessages entrent /var/log/auth.log, mais le fichier exact peut varier considérablement. Quel qu'il soit:

grep sshd /var/log/auth.log

vous donnera une sortie largement équivalente à la journalctlversion.


7

La commande

who /var/log/wtmp

devrait montrer des informations comme ce qui whomontre, mais remontant dans le temps.


Belle astuce, mais IMO, vous feriez mieux d'utiliser simplementlast
Creek

7

Vous ne devez pas autoriser les utilisateurs à l'utiliser sshen vous connectant directement en tant que root (en utilisant le mot de passe root ou un certificat /root/.ssh/authorized_keys) si vous souhaitez vérifier qui s'est connecté en tant que root. Utilisez plutôt un compte pour chaque personne et laissez-les utiliser sudopour obtenir les autorisations root. De cette façon, vous trouverez dans le journal approprié (la position du fichier journal dépend de la distribution que vous avez, vous pouvez même configurer le démon de journal pour envoyer les messages à une autre machine) le message user john ran the command 'sudo rm -rf /'. Eh bien, peut-être que vous ne trouverez pas facilement cette commande dans les journaux.


2
Tout d'abord, cela ne répond pas à la question. Deuxièmement, vous devez toujours avoir un moyen de sauver le système. Que se passe-t-il lorsque vous utilisez l'authentification LDAP et que votre serveur LDAP meurt? Comment allez-vous vous connecter à la boîte?
Patrick

4
@Patrick Premièrement, la question commence par "plusieurs personnes ont un accès root à une machine virtuelle particulière", il est donc logique de suggérer que la bonne approche n'est pas l'audit IP mais l'audit des utilisateurs. Deuxièmement, le problème que vous posez n'est pas lié: si une personne est censée accéder à une machine en cas d'urgence de LDAP qui ne fonctionne pas, elle devrait avoir son propre compte local, et si elle est censée faire du travail d'administration dans une telle urgence, le compte local doit avoir sudoPuissance. Il n'y a jamais de raison réelle de partager un compte entre deux personnes, mais une personne peut avoir deux comptes si nécessaire.
pqnet

La question n'est pas de savoir comment changer leur conception, c'est de savoir comment obtenir une adresse IP. Quant à votre autre solution, vous avez maintenant un compte local (éventuellement plusieurs), avec un mot de passe qui n'expire jamais. Je ne considérerais pas cela comme une amélioration.
Patrick

@Patrick que ce soit. Vous gérez votre propre serveur, je gère le mien. Vous avez fait valoir votre point de vue, les gens liront votre commentaire et décideront.
pqnet

1
@Amélioration de Patrick par rapport à quoi? Avoir des comptes d'utilisateurs séparés pour des personnes distinctes est presque certainement une amélioration par rapport au fait que plusieurs personnes partagent un même rootcompte.
jw013

0

D'après la brève description que vous avez fournie, il semble préférable de mettre en place un système de surveillance des journaux. Cela vous aiderait à surveiller les connexions, à créer des alertes, à comparer les données de plusieurs jours, et oui bien sûr des graphiques pour tout cela.

Mais si vous avez besoin de le surveiller temporairement , vous pouvez utiliser la lastcommande.

last | grep root | grep -v tty | awk '{print $3}'

Cela vous donnera la liste de IPsou Hostnamesd'où l'utilisateur root s'est connecté.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.