Chaque nouvel utilisateur se connectant génère une nouvelle sshd
session avec un PID spécifique. Vous pouvez utiliser pstree
pour imprimer les commandes héritées de quelle sshd
session, puis recouper ce PID /var/log/auth.log
.
Exemple (anonymisé): je me suis connecté à un serveur distant avec 3 sessions simultanées, avec le même utilisateur distant. Je veux maintenant savoir de quelle adresse IP le client est venu qui a exécuté la commande watch date
.
$ pstree -p | grep watch
| |-sshd(15243)---sshd(15342)---bash(15343)---watch(15450)
$ sudo grep 15243 /var/log/auth.log
Mar 7 15:37:29 XXXXXXXXXX sshd[15243]: Accepted publickey for XXXXXXXXXX from 12.34.56.78 port 48218 ssh2
Mar 7 15:37:29 XXXXXXXXXX sshd[15243]: pam_unix(sshd:session): session opened for user XXXXXXXXXX by (uid=0)
Mar 7 15:37:44 XXXXXXXXXX sudo: XXXXXXXXXX : TTY=pts/7 ; PWD=/home/XXXXXXXXXX ; USER=root ; COMMAND=/bin/grep 15243 /var/log/auth.log
pstree -p
montre que la watch
commande est héritée de sshd
PID 15243. grep
ing pour ce PID en /var/auth/auth.log
montre que c'est IP 12.34.56.78 qui a démarré cette session. C'est donc également l'utilisateur qui a démarré watch
.
Quant à trouver history
spécifiquement pour cet utilisateur, il ne peut pas être fait à partir de ce que je peux voir lorsque tous les utilisateurs distants utilisent le même utilisateur SSH local. De plus, il peut facilement être usurpé / inactivé / etc., il n'est donc pas vraiment fiable. Si elle est enregistrée dans le fichier historique, vous pouvez simplement rechercher la cp
commande et regarder en arrière dans le fichier, mais si elle n'est pas là, alors il n'y a pas grand-chose à faire.
Daniel Andersson
la source
grep: /var/log/auth.log: No such file or directory
:-(/var/log/secure
./var/log/auth.log.1
, etc., existent, essayez-les pour voir s'ils contiennent les informations. Ensuite, redémarrezrsyslog
(sudo service rsyslog restart
) et voyez s'il commence à se remplirauth.log
, ce qu'il devrait déjà faire. SSHD se connecte/var/log/auth.log
par défaut dans Ubuntu , donc à moins que vous n'ayez explicitement modifié les cibles de journalisation via/etc/ssh/ssd_config
ou/etc/syslog.conf
(vous pouvez vérifier dans quel fichier leauth
niveau est enregistré ici), il devrait y être. Sinon: quelque chose ne va pas :-).Vous pouvez ajouter ces deux lignes à / etc / profile ou / etc / bashrc afin de consigner toutes les commandes exécutées par bash:
Cela utilisera syslog pour enregistrer chaque commande exécutée avec l'utilisateur qui l'a fait et son adresse IP dans un format comme celui-ci:
De plus, vous pouvez ajouter la ligne ci-dessous à votre configuration syslog (/etc/syslog.conf) pour rediriger les messages local3 vers un fichier spécifique.
la source
syslog-ng
comme amélioration et le fichier de configuration l'est/etc/syslog-ng/syslog-ng.conf
.Vous pouvez utiliser snoopy pour cela.
Vous devez le configurer pour enregistrer la variable d'environnement personnalisée (SSH_CLIENT) en spécifiant IP =% {env: SSH_CLIENT} dans la définition du format de message de journal (indicateur ./configure ou configurable dans snoopy.ini depuis la version 2.x).
Divulgation: Snoopy mainteneur ici.
la source
En supposant que vous utilisez bash,
history
vous n'afficherez que VOTRE historique de ligne de commande. Par défaut, il lit~/.bash_history
l'historique. Notez que cela peut être changé (bien que très peu probable) en faisant quelque chose commeHISTFILE=/home/userFoo/.my_alt_history
.En supposant que vous êtes root sur la boîte, vous pouvez parcourir tous les répertoires de l'utilisateur et lire leurs historiques pour voir qui exécute cette commande.
la source
ps -aux | grep "cp file1.sh file2.sh"