Comment pouvez-vous enregistrer chaque commande tapée


24

Comment pouvez-vous enregistrer chaque commande entrée par quelqu'un dans le shell?

Je vous demande à la fois de vous protéger si vous êtes connecté au serveur de quelqu'un d'autre et que quelque chose casse, ou si quelqu'un d'autre est connecté à votre serveur (intentionnellement ou par malveillance).

Même un novice peut contourner l'histoire avec unset historyou créer un nouveau shell pour cacher ses traces.

Je suis curieux de savoir comment les administrateurs linux seniors suivent quelles commandes ont été entrées / modifications apportées au système.

Réponses:


29

Découvrez auditd . Si vous ajoutez

-a exit,always -F arch=b64 -S execve
-a exit,always -F arch=b32 -S execve

à /etc/audit/audit.rulestoutes les commandes exécutées seront enregistrées. Voir: http://whmcr.com/2011/10/14/auditd-logging-all-commands/

Envoyez-le ensuite à un serveur syslog.


Ce execven'est sûrement pas le seul appel système que vous devez vous connecter. Pourquoi pas execvpaussi bien? Ou execl? etc.
2rs2ts

En fait, j'ai remarqué que dans la page de manuel, execil est dit que "La exec() famille de fonctions remplace l'image de processus actuelle par une nouvelle image de processus. Les fonctions décrites dans cette page de manuel sont des frontaux pour execve(2)." Donc, même si je ne suis pas sûr, execveatje peux être sûr de la execfamille.
2rs2ts

5

Vous pouvez utiliser la commande de script . Cette commande n'est pas incluse dans POSIX, mais vous trouverez utile de stocker dans un fichier toutes les frappes ainsi que les messages de sortie et d'erreur. Vous pourrez ultérieurement consulter le fichier. Si vous effectuez un travail important et souhaitez conserver un journal de toutes vos activités, vous devez appeler cette commande immédiatement après vous être connecté:

$ script
Script démarré, le fichier est dactylographié
$ _ Notez qu'il s'agit d'un autre shell - enfant du shell de connexion

L'invite revient et toutes vos frappes (y compris celle utilisée pour revenir en arrière) que vous entrez maintenant ici sont enregistrées dans le fichier 'dactylographié'. Une fois votre enregistrement terminé, vous pouvez terminer la session en entrant exit .
Remarque: Si vous saisissez le nom de fichier du script , la session sera stockée dans le nom de fichier plutôt que tapuscrit , c'est-à-dire que tapuscrit est la valeur par défaut si aucun nom de fichier spécifique n'est spécifié.

Vous pouvez maintenant utiliser le nom de fichier cat ou le script tapé cat , selon le cas, pour afficher la session enregistrée.

Si vous souhaitez ajouter une nouvelle session à un ancien fichier, utilisez: script -a Ajoute la nouvelle session à la dactylographie, la même règle par défaut s'applique ici aussi

C'est une façon dont un administrateur système peut garder une trace des sessions. J'espère que cela a été instructif et utile. À votre santé!

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.