Le coin des remarques, suggestions et bugs à faire remonter.
Répondre

History est trop bavard!

#1Messageil y a 8 ans

Bonjour @ tous.
Une petite faute de frappe m'a amené à me poser une question sur la commande history et son fichier de référence ~/.bash_history.

J'ai voulu passer en root avec su mais j'y ai mis une majuscule par réflexe comme pour tous mots en début de ligne , puis le nez sur mon clavier, je tape mon MP qui sera pour vous "azerty" :clindoeil:

[steph@manjaro ~]$ Su -
bash: Su : commande introuvable
[steph@manjaro ~]$ azerty
bash: azerty : commande introuvable

Mon MP non seulement apparaît en clair mais est donc aussi archivé dans ~/.history_bash. Hors, ce fichier est certes caché mais non protégé. Le rendre à root m'interdirait de facto toute écriture/lecture dans ce fichier et rendrait donc la commande history impossible depuis ma session.

Bien sur, il suffit d'éditer ce fichier et de virer la ligne où apparaît le MP. Une petite recherche avec les premières lettres du mot de passe indiquera d'ailleurs que ce n'est pas la première fois que ça ce produit.... On peut aussi vider le fichier, mais ce serait dommage de se passer de cette option confortable.
Une autre façon de faire est de taper history , de repérer le N° de la ligne où apparaît le MP, et de faire:

history -d XXXX
Pratique quand on est en TTY.
A part renforcer la vigilance en amont du clavier, que pourrait on faire pour améliorer cette "faille" ?

History est trop bavard!

#2Messageil y a 8 ans

'LLo lemust83,

C'est marrant, j'ai purgé aussi ce mâtin ce fichier de toutes mes maladresses "claviero-mot de passesque" :clindoeil:
Au final, le nombre de commandes (immémorisables) que l'on va chercher dedans est assez limité (enfin, pour moi..) -> s'en faire un type avec lequel on écrase l'ancien à chaque boot via un p'tit script au démarrage ?

History est trop bavard!

#3Messageil y a 8 ans

le fichier est normalement uniquement lisible que par l'utilisateur (et root)
vérifier:

ls -la $HISTFILE 
-rw------- 1 patrick users 899 29.09.2015 16:13 /home/patrick/.local/history

forcer la lecture que par moi :evil:

chmod 600 $HISTFILE


et pour une purge d'uniquement mon mot de passe :

sed -i  '/MonMotDePasse/d' $HISTFILE


ps: j'ai zsh et cette erreur "de clavier" Su/Sudo pas pour moi ! mais tu peux créer 2 alias si c'est courant
Dernière modification par papajokeil y a 8 ans, modifié au total 1 fois.

History est trop bavard!

#4Messageil y a 8 ans

Tu peux éventuellement regarder du côté de la variable HISTIGNORE.
Par contre, il faudrait trouver un moyen pour pouvoir ignorer ton mot de passe sans pour autant le faire apparaître en dur dans un fichier...

History est trop bavard!

#5Messageil y a 8 ans

HISTIGNORE : non ! :evil:

il est bien sur possible d'utiliser la variable d'environnement HISTIGNORE :
par exemple la placer dans /etc/profile

export HISTIGNORE="lemotdepasse"


mais avec la commande echo $HISTIGNORE j'ai le mot de passe plein les mirettes :rigole:

History est trop bavard!

#6Messageil y a 8 ans

papajoke a écrit :mais avec la commande echo $HISTIGNORE j'ai le mot de passe plein les mirettes :rigole:

D'où l’intérêt de la phrase :
N3mesis98 a écrit :Par contre, il faudrait trouver un moyen pour pouvoir ignorer ton mot de passe sans pour autant le faire apparaître en dur dans un fichier...

En gros il faudrait ajouter une expression régulière permettant d'ignorer le mot de passe, et si possible lui seul, sans pour autant donner trop d'informations à son propos...

History est trop bavard!

#7Messageil y a 8 ans

en même temps, si on tape Su, et que malgré la réponse bash: Su : commande introuvable on saisit quand même son mot de passe, ce n'est plus un problème au niveau de History qui a enregistré alors qu'il n'aurait pas fallu, mais un problème entre le clavier et la chaise.
on ne peut pas s'amuser à trouver des astuces pour que les erreurs de manipulations soient automatiquement rattrapées; au mieux, on pourrait imaginer que Bash n'enregistre rien si le retour est commande introuvable (là je dirais que c'est possible)...

History est trop bavard!

#8Messageil y a 8 ans

Loubrix a écrit :au mieux, on pourrait imaginer que Bash n'enregistre rien si le retour est commande introuvable (là je dirais que c'est possible)...

C'est bien à ça que je pensais. La commande su est tellement facile a taper que je le fais sans regarder que du coup , on ne voit pas le message d'erreur, d'où l'imprudence. Les commandes erronées ne devraient effectivement plus être archivées,

History est trop bavard!

#9Messageil y a 8 ans

non, justement on ne peut rien faire avec bash :pleure:
il y a bien une solution de ce type mais cela demande de tester/interpréter chaque commande du bash :triste:

ca pourrait donner un truc du genre dans le .bashrc :

function test_trouvé() {
   # on décompose $PROMPT_COMMAND
   si pas $(locate $PROMPT_COMMAND) alors
       #on la supprime la dernière commande
       history -d $(history 1)
}
trap 'test_trouvé' DEBUG;

içi la fonction "test_trouvé" est lancée avant et après toute les commandes du bash
Dernière modification par papajokeil y a 8 ans, modifié au total 2 fois.

History est trop bavard!

#10Messageil y a 8 ans

J'ai aussi pensé à cette solution, mais je ne trouve rien à ce sujet sur le net...
J'avais bien une petite idée qui consistait, dans le .bashrc, à ajouter des instructions à la variable PS1 pour avoir quelque chose de ce genre :

PS1='$(if [ 0 -ne $? ]; then
    <retirer la dernière ligne de l'historique>
fi)<reste du PS1>'

Mais vu que l'historique n'est sauvegardé dans le .bash_history qu'à la fin de la session, je ne vois pas comment supprimer la dernière ligne de ce dernier...

EDIT : Grillé par Papajoke. Je ne tapuscrite visiblement pas encore assez vite face à un reporter du net :clindoeil:
PS : Oui, je sais, le verbe "tapuscriter" n'existe pas (encore ?), mais j'adore quand même l'utiliser :siffle

History est trop bavard!

#11Messageil y a 8 ans

N3mesis98 a écrit :Mais vu que l'historique n'est sauvegardé dans le .bash_history qu'à la fin de la session, je ne vois pas comment supprimer la dernière ligne de ce dernier...


un truc comme cela fonctionne :

history -d $(history 1|cut -d " " -f 3)
Dernière modification par papajokeil y a 8 ans, modifié au total 1 fois.

History est trop bavard!

#12Messageil y a 8 ans

Je viens d'essayer avec :

PS1='$(if [ 0 -ne $? ]; then
    echo $(history 1)
    history -d $(history 1)
fi)<reste du PS1>'

mais ça ne supprime pas la dernière ligne de l'historique pour une raison obscure...
Pourtant, on voit bien avec le echo que $(history 1) retourne la bonne ligne de l'historique.

Exemple :

>> azery
bash: azery: command not found
505  azery
>> history | tail
  505  azery
  506  history | tail

History est trop bavard!

#13Messageil y a 8 ans

même chose que toi :tetu!

function my_prompt(){
  local err=$?
  if [ 127 == "$err" ]; then
    history -w   
    # marche pas non plus :
    #sed -i "s/$(history 1|cut -d " " -f 5)/???/g" $HISTFILE
    echo -n "err:$err retirer de l'historique : $(history 1|cut -d ' ' -f 3)"
    history -d $(history 1|cut -d " " -f 3)
  fi
  echo -n ''
}
export PS1="\$(my_prompt)\[\e[00;33m\]\u\[\e[0m\]\[\e[00;36m\][\w]\[\e[0m\]\[\e[00;37m\]> \[\e[0m\]"

même le history -w ne change rien !? alors que si j'execute :

history -d $(history 1|cut -d " " -f 3)

la touche UP ne me retourne pas cette ligne : c'est que le code fonctionne bien :confus:
Dernière modification par papajokeil y a 8 ans, modifié au total 1 fois.

History est trop bavard!

#14Messageil y a 8 ans

Oui même problème, ça fonctionne bien quand entré à la main, mais pas dans le .bashrc.
Je vois mal comment contourner ce problème du coup...

History est trop bavard!

#15Messageil y a 8 ans

autre solution :tetu!

function my_prompt(){
  if [ 127 == "$?" ]; then
    # il est aussi possible de tout bloquer .... :
    read eventuelpassword
  fi
}
export PS1="\$(my_prompt)\[\e[00;33m\]\u\[\e[0m\]\[\e[00;36m\][\w]\[\e[0m\]\[\e[00;37m\]> \[\e[0m\]"

ici, le "prompt" est bloqué :rigole: donc la commande suivante(ou pass dans notre cas) ne va pas entrer dans l'historique
avec un BIP en + c'est pas trop mal...

History est trop bavard!

#16Messageil y a 8 ans

Je vois que ça fume :gsourire:
Mon idée était de rajouter dans le bash.rc une ligne de type

if 'commande introuvable' then  !>>history.bash

Je traduis mon idée: Si le retour est "commande introuvable" on ne concatène pas le fichier ...
En fait je cherche la fonction où bash redirige vers history. Pas encore trouvé... Y a à lire dans /usr/share/bash/...
Pas si simple ce truc :clindoeil:

History est trop bavard!

#17Messageil y a 8 ans

J'arrive à :

$(if [ 127 -eq $? ]; then
    history -a   
    sed -i "/$(tail -n 1 $HISTFILE)/d" "$HISTFILE"
    history -c # marche pas
    history -r
fi)

Donc en gros, j'arrive bien à supprimer le mot de passe du fichier d'historique, mais pas de l'historique courant.
Ce qui ne sert finalement pas à grand chose du coup, car à la fin de la session, l'historique courant sera quand même ajouté à la fin du fichier...
Il semble impossible de modifier l'historique courant depuis le .bashrc, que ce soit avec history -d ou history -c.
Répondre