Question J'ai tapé accidentellement le mot de passe dans la ligne de commande bash


J'ai accidentellement tapé mon mot de passe dans la ligne de commande bash, en confondant le Last login: ... ligne pour Wrong password (J'étais pressé). Que dois-je faire pour couvrir ma trace?

Ce que je faisais était l'édition .bash_history et supprimer la ligne incriminée (a dû se reconnecter une fois pour voir le mot de passe apparaître dans le fichier afin que je puisse le supprimer, et me reconnecter à nouveau pour le voir disparaître de l'historique disponible sous la touche UPARROW).

Y a-t-il un autre endroit où l'historique des commandes pourrait être sauvegardé? Le système est CentOS 6.5.


179
2018-04-02 06:42


origine


Changez simplement le mot de passe :) - gronostaj
Changer le mot de passe n'est pas si simple ... Je devrais demander à l'administrateur de réinstaller ma nouvelle clé publique sur 15 serveurs différents - et le gars est comme /dev/null. - MaDa
Si vous ne pouvez pas changer votre mot de passe facilement à tout moment, vous pourriez avoir une grave faille de sécurité. Que ferez-vous lorsque quelqu'un obtiendra votre mot de passe? Avez-vous des moyens de révoquer immédiatement l'accès au système? - gronostaj
Vous pouvez modifier la phrase secrète d'une clé ssh sans changer la clé: ssh-keygen -f id_rsa -p. - jwg
Vous venez de mentionner que, au moins sous les connexions Windows en réseau, vous êtes arrêté. L'administrateur (dans une tour de serveur élevée) est par défaut d'enregistrer toutes les tentatives de connexion, et bien sûr les noms d'utilisateur sont en clair. Tout ce que certaines personnes entreprennent, c'est de rechercher des chaînes non-username-ish et de les corréler avec le prochain nom d'utilisateur valide (ou la prochaine tentative de connexion sur la même machine). Et il n'y a pas de moyen simple de supprimer ce fichier journal d'administration. Donc tu dois vraiment changer ton mot de passe. - Carl Witthoft


Réponses:


Vous pouvez supprimer uniquement la ligne incriminée de bash'histoire, au lieu de nettoyer toute l'histoire. Retirez simplement la ligne avec le -d flag, puis sauvegardez (écrivez) le nouvel historique avec le -w drapeau:

$ history
351 ssh me@site.com
352 my_password
$ history -d 352
$ history -w

174
2018-04-02 12:25



Sachez que cela ne fonctionne pas si vous avez défini "PROMPT_COMMAND = history -a". Avec cela, la commande avec votre mot de passe est immédiatement écrite dans votre .bash_history lorsque l'invite est affichée après la fin de la commande. Vous devrez modifier votre .bash_history pour le supprimer. - benrifkah


Il y a deux parties à cela:

  • bash stocke l'historique dans un fichier ~/.bash_history qui est, par défaut, écrit à la fin de la session
  • la history qui est gardé en mémoire

Pour être sûr, vous devez le supprimer de la session:

history -c

et tronquer le fichier historique selon vos besoins:

> ~/.bash_history

Si votre session dans laquelle vous avez tapé le mot de passe est toujours ouverte, une autre façon de couvrir votre trace est de définir le HISTFILE variable pour le périphérique nul afin que l'historique ne soit pas écrit dans ~/.bash_history quand la session se termine:

export HISTFILE=/dev/null

120
2018-04-02 07:17



Hey regarde, c'est l'administrateur! - Raystafarian
Pun n'est pas prévu, désolé :) Je ne regardais pas ton pseudo quand j'écrivais mon commentaire. - MaDa
Pour être paranoïaque (et pourtant pour une raison quelconque ne changez toujours pas votre mot de passe) ne devriez-vous pas shred le fichier ou l'écraser autrement plusieurs fois? - kojiro
@MaDa Pas de problème. J'ai même ajouté un autre moyen à la réponse pour amener mon pseudo dans la photo. - devnull
Réglage HISTFILE= est assez. De bash(1): Si ce n'est pas le cas, l'historique des commandes n'est pas enregistré lors de la fermeture d'un shell. - Lekensteyn


Puisque bash (au moins toutes les versions historiques et actuelles dont je suis au courant) ne sauvegarde pas automatiquement l’histoire tant que vous n’avez pas quitté, une stratégie généralement applicable lorsque vous avez tapé une commande dont vous voulez vous assurer qu’elle ne sera jamais enregistrée est de taper immédiatement:

kill -9 $$

Cela tue le shell avec SIGKILL, qui ne peut pas être attrapé, de sorte que le shell n'a aucun moyen de sauvegarder quoi que ce soit à la sortie.

La plupart des autres approches impliquent le nettoyage après le fait (c'est-à-dire après que les données ont déjà atteint le disque), ce qui a beaucoup plus de risques d'erreur (manque de copie), surtout si le système utilise btrfs ou similaire.


23
2018-04-02 16:20



+1, pas seulement plus de chance d'erreur, il mai même être récupérable selon si / combien de commandes ont été exécutées après - Cruncher
Manquer le mot "automatiquement"? Parce que dotancohen a montré un moyen de sauvegarder l'historique sans quitter le shell. - Ben Voigt
Le shell peut être configuré pour enregistrer l'historique après l'exécution de chaque commande, au lieu de la quitter. - Kundor
+1 C'est exactement ce que je voulais recommander! outre rm ~/.bash_history~ supprimer le fichier de sauvegarde dans le cas de l'OP lorsqu'il a déjà été enregistré - Tomas
Sachez que cela ne fonctionne pas si vous avez défini "PROMPT_COMMAND = history -a". Avec cela, la commande avec votre mot de passe est immédiatement écrite dans votre .bash_history lorsque l'invite est affichée après la fin de la commande. Vous devrez modifier votre .bash_history pour le supprimer. - benrifkah


Une fois que vous avez saisi accidentellement quelque chose que vous ne souhaitez pas stocker dans l'historique, vous pouvez taper: unset HISTFILE

Bash ne saura pas où stocker l'historique lors de la déconnexion, ce qui désactivera efficacement la journalisation de l'historique pour toute la session.


11
2018-04-02 18:51



Sachez que cela ne fonctionne pas si vous avez défini "PROMPT_COMMAND = history -a". Avec cela, la commande avec votre mot de passe est immédiatement écrite dans votre .bash_history lorsque l'invite est affichée après la fin de la commande. Vous devrez modifier votre .bash_history pour le supprimer. - benrifkah


Mon truc préféré pour cela est d'appuyer sur la flèche vers le haut, de revenir en arrière sur la commande, de taper quelque chose (peut-être pas nécessaire), d'appuyer sur la flèche vers le bas, de taper "ls" et d'appuyer sur Entrée. On se sent vraiment hokey, mais ça marche vraiment. J'ai découvert cela quand je me suis énervé après avoir édité la mauvaise commande dans mon historique et que je l'ai ruiné en ne pressant pas ctrl-c pour annuler l'édition. Je suppose que Bash soutient l'histoire révisionniste. ;-)

$ passw0rd
$ <up arrow><backspace x8>cd<down arrow>echo hi
$ history|tail -3

Ressemble à:

$ passw0rd
passw0rd: command not found
$ echo hi
hi
$ history|tail -3
 2445* cd
 2446  echo hi
 2447  history|tail -3
$ 

10
2018-04-03 20:58



C'est bizarre. Un inconvénient est qu'il semble savoir que vous avez édité l'historique, donc il pourrait y avoir un moyen de restaurer l'ancienne version? - MadTux
@MadTux - Totalement, mais l'historique .bash n'est qu'un fichier texte brut. Vous pouvez donc faire l'exemple ci-dessus, quitter et vous reconnecter. Lorsque vous affichez le contenu complet du fichier .bash_history, rien ne le différencie de ce que vous venez de faire si vous avez simplement exécuté "cd", donc le chemin est propre. - Mark Jerde
Sachez que cela ne fonctionne pas si vous avez défini "PROMPT_COMMAND = history -a". Avec cela, la commande avec votre mot de passe est immédiatement écrite dans votre .bash_history lorsque l'invite est affichée après la fin de la commande. Vous devrez modifier votre .bash_history pour le supprimer. - benrifkah


Outre les autres réponses, il peut être pertinent que le mot de passe se trouve également dans le tampon de défilement du terminal - l’historique du texte affiché - maintenant, et plus d’un problème, éventuellement sur le disque dur, si l’émulateur de terminal historique sur le disque. Cela se produit dans KDE konsole, la taille de l'historique est définie sur "scrollback illimité", pour ne jamais ignorer aucune sortie.


10
2018-04-03 19:58





Avec $<space> command, une commande n'est pas ajoutée à l'historique, parfois utile

$  history | grep mywierdgrep
$ history | grep mywierdgrep
 2005  history | grep mywierdgrep

5
2018-04-02 14:07



Bien qu'intéressant, il n'est pas clair comment cela est utile dans le scénario décrit. Voulez-vous dire que chaque mot de passe doit commencer par un espace? - Ben Voigt
Non, ce qu’il suggère, c’est qu’avec cela, toutes les lignes que vous tapez que vous ne voulez pas voir dans l’histoire, doivent être tapées avec un espace de début. ex: "ls" devient "ls" et cette ligne ne s'affiche jamais dans l'historique ou dans la liste des flèches de vos sessions. - Bryan C.
Notez que cette astuce de l'espace principal ne fonctionne que si $ HISTCONTROL contient ignorespace. - Bernd Jendrissek
@ jris198944 Fournir un mot de passe via un argument de ligne de commande pourrait potentiellement l'exposer à toute personne du système qui s'exécute ps. - jamesdlin
Et de toute façon, même si cette astuce est utile si vous planifiez à l’avance, cela n’aide pas le scénario original accidentellement entré un mot de passe sur une ligne de commande. - jamesdlin