82 votes

Consigner toutes les commandes exécutées par les administrateurs sur les serveurs de production

La politique de l'entreprise veut que les administrateurs se connectent aux serveurs via un nom d'utilisateur personnel, puis exécutent sudo -i pour devenir root. Après avoir exécuté sudo -i sudo va créer une variable environnementale appelée SUDO_USER qui contient le nom d'utilisateur de l'utilisateur original.

Y a-t-il un moyen d'enregistrer TOUTES dans syslog avec une syntaxe similaire à la suivante :

${TIME/DATE STAMP}: [${REAL_USER}|${SUDO_USER}]: ${CMD}

Un exemple d'entrée serait :

Sat Jan 19 22:28:46 CST 2013: [root|ksoviero]: yum install random-pkg

Évidemment, il n'est pas nécessaire que ce soit exactement la syntaxe ci-dessus, il doit juste inclure un minimum de l'utilisateur réel (ex. root), l'utilisateur sudo (ex. ksoviero), et la commande complète qui a été exécutée (ex. yum install random-pkg).

J'ai déjà essayé snoopy mais il ne comprenait pas le SUDO_USER variable.

2voto

MadHatter Points 77602

Non pas qu'il y ait quelque chose de mal avec les autres réponses jusqu'ici, mais si vous décidez que sudo par l'intermédiaire de syslog est satisfaisante, puis-je suggérer une astuce : enregistrez-la via le réseau sur un hôte d'audit distant.

Cela permet de contourner le problème du "maintenant que je suis devenu root, je peux effacer toute trace de ma malfaisance dans les journaux". Vous êtes peut-être maintenant root sur la machine locale, mais vous ne pouvez pas rappeler ce paquet de journaux depuis le réseau, et vous n'avez (probablement) pas les privilèges root sur l'hôte d'audit distant.

Je fais cela avec certains des réseaux que je gère depuis des années, et cela présente deux autres avantages en matière de signal :

Tout d'abord, il n'y a qu'un seul endroit sur le réseau pour vérifier tous les syslogs, ce qui permet une corrélation beaucoup plus facile des incidents, et constitue donc un guichet unique pour les enquêtes du type "Quand ". juno se plaignait que le serveur NFS hera ne répondait pas, quelqu'un d'autre s'est-il plaint de la même chose au même moment ? Si c'est le cas, hera est susceptible d'être le problème, voyons ce qu'elle a consigné ; sinon.., juno La connexion réseau de l'entreprise est plus suspecte, voyons ce qu'il y a d'autre. juno enregistré à ce moment-là".

Deuxièmement, la rotation des journaux syslog devient plus facile : vous ne conservez pas de copies des journaux sur les hôtes locaux pendant plus de quelques jours, mais vous vous assurez que le serveur d'audit dispose d'un énorme espace disque et y conserve tous les syslogs pendant plusieurs années. De plus, si vous souhaitez les écrire sur un support WORM à des fins d'audit médico-légal, vous ne devez acheter qu'un seul lecteur WORM.

2voto

Depuis la version 2.0.0, Snoopy est capable d'enregistrer des variables environnementales arbitraires. Ici est un lien vers le fichier de configuration d'exemple de Snoopy, où l'on peut trouver tout ce qui concerne l'option %{env:NAME_OF_MY_ENV_VAR_I_WANT_LOGGED} la syntaxe.

Cependant, une contribution récente a souligné que la journalisation du propriétaire du tty est une réponse assez efficace et élégante à la question "Qui a exécuté cette commande, en tant que root ?".

Divulgation : Je suis le mainteneur de Snoopy.

Edit : Changement du lien pour pointer directement vers la documentation pertinente (apparemment, certaines personnes ne peuvent pas la trouver dans le repo) + légère reformulation.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X