Les administrateurs ont pour politique de se connecter aux serveurs via un nom d'utilisateur personnel, puis de s'exécuter sudo -i
pour devenir root. Lors de l'exécution sudo -i
, sudo créera une variable d'environnement appelée SUDO_USER
, qui contient le nom d'utilisateur de l'utilisateur d'origine.
Existe-t-il un moyen de consigner TOUTES les commandes dans syslog avec une syntaxe proche de la syntaxe 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 ne doit pas nécessairement s'agir de la syntaxe ci-dessus, il faut simplement inclure un minimum d'utilisateurs réels (par exemple, root), d'utilisateur sudo (par exemple, ksoviero) et de la commande complète qui a été exécutée (par exemple, yum installer random-pkg).
J'ai déjà essayé snoopy
, mais cela n'incluait pas la SUDO_USER
variable.
auditd
.auditd
, et bien que je sois obligé d'enregistrer toutes les commandes en cours d'exécution, cela n'inclut pas laSUDO_USER
variable (ou des informations équivalentes), et je ne trouve pas le moyen de l'inclure. Toute aide serait grandement appréciée!Réponses:
Mise à jour : 2 autres choses qui sont apparues dans les commentaires et les questions suivantes:
auditd
cette méthode augmentera considérablement le volume de votre journal, en particulier si le système est fortement utilisé via la ligne de commande. Ajustez votre stratégie de conservation des journaux.Auditd
Les journaux de l'hôte sur lequel ils sont créés sont aussi sécurisés que les autres fichiers de la même boîte. Transférez vos journaux vers un serveur de collecte de journaux distant tel qu'ELK ou Graylog afin de préserver l'intégrité de vos journaux. De plus, en ajoutant au point ci-dessus, cela permet de supprimer de manière plus agressive les anciens journaux.Comme suggéré par Michael Hampton,
auditd
est le bon outil pour le travail ici.J'ai testé cela sur une installation Ubuntu 12.10, de sorte que votre kilométrage peut varier sur d'autres systèmes.
Installer
auditd
:apt-get install auditd
Ajoutez ces 2 lignes à
/etc/audit/audit.rules
:Ceux-ci suivront toutes les commandes exécutées par root (
euid=0
). Pourquoi deux règles? L'execve
appel système doit être suivi dans les codes 32 et 64 bits.Pour supprimer les
auid=4294967295
messages dans les journaux, ajoutezaudit=1
à la cmdline du noyau (en la modifiant/etc/default/grub
)Placez la ligne
session required pam_loginuid.so
dans tous les fichiers de configuration PAM pertinents pour login (
/etc/pam.d/{login,kdm,sshd}
), mais pas dans les fichiers pertinents poursu
ousudo
. Cela permettraauditd
d’obteniruid
correctement l’appelant lorsqu’il appellesudo
ousu
.Redémarrez votre système maintenant.
Connectons-nous et exécutons quelques commandes:
Cela donnera quelque chose comme ça dans
/var/log/audit/auditd.log
:La
auid
colonne contient l’utilisateur appelantuid
, ce qui vous permet de filtrer les commandes exécutées par cet utilisateur avecCela listera même les commandes que l'utilisateur a exécuté en tant que root.
Sources:
la source
N'oubliez pas que sudo enregistre lui-même toutes les commandes sudo dans le syslog. Par conséquent, tous les utilisateurs privés doivent apprendre à ne pas simplement utiliser sudo pour obtenir un shell root, mais à
Le problème avec cette approche ou toute autre approche à laquelle j'ai pensé est qu'en tant
root
qu'utilisateur, il est assez difficile d'empêcher un utilisateur de se soustraire à un type particulier de journalisation. Ainsi, tout ce que vous essayez sera <100%, je suis désolé de le dire.L'éducation, la documentation, l'application et surtout la confiance est ce qui est nécessaire.
la source
J'ai déjà eu à faire face au même problème et je devais trouver une solution rapide et délicate: chaque utilisateur sudo aurait son propre fichier d'historique une fois qu'il aurait exécuté la commande.
sudo -i
Dans
/root/.bashrc
j'ai ajouté la ligne suivante -Ainsi, chaque utilisateur souhaitant accéder à la racine aura un fichier d’historique .bash_history-username.
Une autre méthode -
Ajoutez le code suivant à
/root/.bashrc
et le nom d'utilisateur, sudo-user, et la commande seront ajoutés au fichier journal, quel que soit le niveau de notification défini, probablement / var / log / messages.Crédit à - http://backdrift.org/logging-bash-history-to-syslog-using-traps
la source
/bin/sh
,unset HISTFILE
ou/bin/bash --norc
.En fait, un certain nombre d’établissements interdisent l’utilisation de auditd parce qu’il nécessite beaucoup de ressources et peut donner lieu à des attaques par déni de service.
Une solution consiste à configurer le dernier shell Korn (ksh-93, voir http://kornshell.com/ pour plus de détails) afin de consigner toutes les commandes exécutées en tant que root sur un serveur syslog distant, puis de demander à la stratégie de le faire, sauf en cas d'urgence. Dans certains cas, les administrateurs système se connectent avec des comptes personnels et exécutent le shell amélioré Korn via sudo. L'examen des journaux peut détecter le moment où un administrateur lance un autre shell à partir du shell approuvé afin de couvrir leurs traces, et le SA peut ensuite être éduqué si nécessaire.
la source
Sudo a quelque chose qui s'appelle sudoreplay quand les sessions activées sont enregistrées et peuvent être rejouées plus tard. Son fonctionnement est similaire à celui de la
script
commande qui crée un script de type de session de terminal qui peut ensuite être rejoué avec lascriptreplay
commande.la source
Jusqu'à présent, les réponses ne sont pas fausses, mais si vous décidez que
sudo
la journalisationsyslog
est satisfaisante, permettez-moi de vous suggérer une solution: connectez-la via le réseau à un hôte de contrôle distant.Cela contourne le problème de "maintenant que je suis devenu root, je peux enlever toute trace de mes méfaits des journaux". Vous êtes peut-être maintenant root sur le serveur local, mais vous ne pouvez pas rappeler ce paquet de journal à partir du réseau et vous (probablement) ne disposez pas des privilèges root sur l'hôte d'audit distant.
Je le fais avec certains des réseaux que je gère depuis des années et présente deux autres avantages:
Premièrement, il existe un emplacement sur le réseau où consulter tous les syslogs, ce qui permet une corrélation beaucoup plus facile des incidents. Il en va de même pour les enquêtes telles que "Quand
juno
se plaignait-il que le serveur NFShera
ne répondait-il pas? Sihera
le problème est susceptible de se produire, voyons ce qu’elle a enregistré; sinon,juno
la connexion réseau est plus suspecte, voyons ce qu’il ya d’autrejuno
à ce moment-là. ".Deuxièmement, la rotation des journaux syslog devient plus facile: vous ne gardez pas des copies des journaux sur les hôtes locaux pendant plus de quelques jours, mais vous vous assurez que le serveur d'audit dispose d'une quantité considérable d'espace disque et y conservez tous les syslog pendant plusieurs années. De plus, si, par exemple, vous souhaitez les écrire sur le support WORM à des fins d'audit légal, par exemple, vous ne devez acheter qu'un seul disque WORM.
la source
Depuis la version 2.0.0, Snoopy est capable de consigner des variables d’environnement arbitraires.
Cependant, une récente contribution a souligné que le propriétaire de 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 mainteneur snoopy.
la source