Afficher les caractères du mot de passe lors de la connexion à Linux


11

Je mets en place un terminal série sans fil longue portée (avec une paire de XBees, si quelqu'un se demande) connecté à ma box Linux. Ça va très bien, mais parfois une frappe ne passe pas. C'est généralement gérable, je vais voir le manque et le frapper à nouveau. Cependant, c'est mauvais quand je dois essayer plusieurs fois de taper mon mot de passe car Linux n'affiche rien. J'ai déjà ajouté la pwfeedbackligne à mon fichier sudoers, mais j'aimerais que l'invite de connexion affiche également des commentaires. La machine Linux exécute Debian (c'est en fait une framboise pi qui gère la plupart de mon réseau domestique).

Est-il possible de modifier l'invite de connexion tty pour envoyer des commentaires lorsque je tape mon mot de passe?


Au lieu de cela:

Raspbian GNU/Linux 7 linuxbox ttyAMA0

linuxbox login: skylarmt
Password:

Je voudrais ceci:

Raspbian GNU/Linux 7 linuxbox ttyAMA0

linuxbox login: skylarmt
Password: **********


Je ne pense pas qu'un tel changement soit actuellement possible au niveau de la configuration. La connexion au terminal est gérée par agetty qui appelle / bin / login pour l'invite de mot de passe. Vous pouvez obtenir l'effet décrit en modifiant correctement le code source de connexion, en le recompilant et en utilisant une version modifiée, mais cela nécessite certaines connaissances en C ANSI.
DevilaN

Réponses:


1

Je ne connais aucune configuration pour le faire, si vous voulez vraiment le faire, vous pouvez y parvenir en:
1 - modifiant la fonction getpass dans le fichier getpass.c dans le paquet glibc.
2 - compilez libc- (VERSION) .so
3 - sauvegardez la lib / (votre architecture) originale /libc.so (par exemple renommez libc- (VERSION) .so.bak
4 - déplacez le nouveau fichier vers lib / (votre architecture) ) / 5 - exécutez ldconfig pour mettre à jour le cache
À titre d'exemple, vous pouvez remplacer le code qui lit le mot de passe par un code qui peut ressembler à ceci:

  /* Read the password. */
  // nread = __getline (&buf, &bufsize, in);

  int index=0;
  char c;
  while ( (c=getchar())!= EOF ){
     putch('*');
     buf[i]=c;
     ++i;
  }
  buf[i]='\0';
  nread=i;
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.