Affichage en direct des commandes du shell Linux exécutées par un autre utilisateur?


27

Est-il possible pour l'utilisateur root sous Linux d'avoir une vue en temps réel (ou presque en temps réel) des commandes shell exécutées par un autre utilisateur connecté via un terminal ou SSH? De toute évidence, ils sont stockés dans .bash_history, mais cela n'est enregistré que lorsque l'utilisateur se déconnecte et peut également être désactivé.

Edit: idéalement quelque chose qui peut facilement être activé et désactivé.


ttyrpldça a l'air bon. recommandé dans cette question. serverfault.com/questions/40011/…
hayalci

Réponses:


16

en tant que root, vous pouvez remplacer leur shell par un simple script wrapper qui a consigné leurs commandes avant de les passer au vrai shell. Cela ne fonctionnerait qu'avant leur connexion.


20
Nous l'avons fait pour surveiller un compte piraté chez un ancien employeur. Créé "/ bin / bash" (remarquez l'espace) qui était un wrapper autour de la commande de script. A fonctionné comme un charme :)
Commandant Keen

Très intelligent! +1
EMP

9

Utilisez sniffy si vous souhaitez pénétrer dans la session de l'utilisateur ou screen -xsi vous avez une coopération.

Sachez cependant que l'espionnage de vos utilisateurs peut être soumis à des réglementations, voire carrément illégal, en fonction de votre législation locale.


7

Changer le shell est très simple à contourner, patcher le shell lui-même est mieux, mais vous devez patcher tous les shells. Notre pirate préféré utilise cela, en prime, il ne se soucie pas de désactiver bash_history.

ssh host /bin/sh -i  

Snoopy est un wrapper autour des fonctions exec et enregistre tout binaire externe exécuté (pas les commandes internes du shell)

La suggestion de @David Schmitt sniffy utilise une meilleure méthode, elle exploite le pseudoterminal.

ttysnoop utilise la même méthode, mais elle n'est pas entretenue. (J'ai probablement eu des problèmes pour qu'il enregistre les connexions ssh, je ne peux pas m'en souvenir)

Vous pouvez essayer de patcher ssh pour enregistrer une session, mais ce patch est ancien .

pseudopod et rootsh peuvent être utilisés pour enregistrer des sudos légitimes. Et shwatcr est une autre chose pour surveiller les connexions.


Que doit-on faire exactement ssh host /bin/sh -i?
Mike Pennington

+1 pour snoopy, pas parfait mais a fait ce dont nous avions besoin.
skinp

4

Si vous êtes coopératif, vous pouvez utiliser l' écran GNU entre deux utilisateurs - demandez à l' un d'établir la session d'écran, puis à l'autre de se joindre à l'aide screen -x.

Si vous voulez que root «espionne» d'autres utilisateurs à leur insu, la solution la meilleure et la plus efficace pourrait être un logiciel / matériel enregistreur de frappe.


4

Sysdig est un puissant outil d'exploration au niveau du système - c'est ce que vous voulez;)

Exemple:

sysdig -i spy_users

Catégorie: Sécurité

spy_users Afficher l'activité interactive des utilisateurs

répertorie toutes les commandes que les utilisateurs lancent de manière interactive (par exemple à partir de bash) et tous les utilisateurs de l'annuaire visitent


2

Vous pouvez essayer le patch bash-BOFH. Recherchez le patch.


1

J'ai écrit une méthode pour enregistrer toutes les commandes / commandes intégrées de «bash» dans un fichier texte ou un serveur «syslog» sans utiliser de correctif ni d'outil exécutable spécial.

Il est très facile à déployer, car il s'agit d'un simple shellscript qui doit être appelé une fois lors de l'initialisation du 'bash'.

Voir la méthode ici: http://blog.pointsoftware.ch/index.php/howto-bash-audit-command-logger


Bienvenue dans Server Fault! Nous préférons vraiment que les réponses aient du contenu, pas des pointeurs vers le contenu. Cela garantit que la réponse restera disponible même si le lien tombe en panne. Bien que cela puisse théoriquement répondre à la question, il serait préférable d'inclure ici les parties essentielles de la réponse et de fournir le lien de référence.
user9517 prend en charge GoFundMonica


1
function spy() { 
   ptsnum=`ps awfux | grep pt[s]\/"$1" | awk '/bas[h]/{print $2}'` ; 
   /usr/bin/strace -s 1000 -t -f -p $ptsnum 2>&1 3>&1 \
        | grep -Poi 'write\(...\"[[:print:]]{1,2}\"[.][.][.][,]..\)' ; 
}

[436] klikevil@epiphany ~ $ w<br>
 09:36:43 up 12:06,  6 users,  load average: 0.46, 0.29, 0.20<br>
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT<br>
klikevil pts/0    75.125.126.8     23:05    2:19m 10:33   0.18s cmd                                      <br>
klikevil pts/1    75.125.126.8     00:18    6:50m  0.06s  0.04s sshd: klikevil [priv]<br>
klikevil tty7     :0               09:02   17:07m  2:02   0.32s x-session-manager<br>
klikevil pts/2    :0.0             09:03    3:30   0.08s  0.08s bash<br>
klikevil pts/3    :0.0             09:03    0.00s  0.76s  0.00s w<br>
klikevil pts/4    :0.0             09:06    3:13   0.46s  0.00s /bin/sh /usr/bin/thunder<br>
[437] klikevil@epiphany ~ $ spy 2<br>
write(2, "e"..., 1)<br>
write(2, "c"..., 1)<br>
write(2, "h"..., 1)<br>
write(2, "o"..., 1)<br>
write(2, " "..., 1)<br>
write(2, "s"..., 1)<br>
write(2, "u"..., 1)<br>
write(2, "p"..., 1)<br>
write(2, " "..., 1)<br>
write(2, "d"..., 1)<br>
write(2, "o"..., 1)<br>
write(2, "g"..., 1)<br>
write(2, "\n"..., 1)<br>
^C<br>

Semble fonctionner assez bien si cela ne vous dérange pas de trier un tas de sauts de ligne.


1

Snoopy est destiné à la journalisation légère des commandes.

Si vous voulez voir en direct les commandes exécutées sur votre système, c'est peut-être le cas. Avertissement: snoopy n'est pas une solution d'audit appropriée et peut facilement être contourné.

Cependant, si vous souhaitez voir chaque caractère tapé dans le terminal, vous devrez utiliser un autre outil.

Divulgation: Je suis le responsable snoopy actuel.


-3

essayez cette exportation HISTTIMEFORMAT = "% T" exécutez ensuite quelques commandes et "historique" ...

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.