Mostrar caracteres de senha ao efetuar login no Linux

11

Estou configurando um terminal serial sem fio de longo alcance (com um par de XBees, se alguém estiver se perguntando) conectado à minha caixa Linux. Está indo muito bem, mas às vezes o pressionamento de tecla não ocorre. Isso geralmente é gerenciável, verei a falta e o atingirei novamente. No entanto, é ruim quando tenho que tentar algumas vezes digitar minha senha porque o Linux não mostra nada. Eu já adicionei a pwfeedbacklinha ao meu arquivo sudoers, mas gostaria que o prompt de login também mostrasse alguns comentários. A máquina Linux está executando o Debian (na verdade, é um raspberry pi que gerencia a maior parte da minha rede doméstica).

É possível alterar o prompt de login do tty para enviar comentários enquanto digito minha senha?


Em vez disso:

Raspbian GNU/Linux 7 linuxbox ttyAMA0

linuxbox login: skylarmt
Password:

Eu gostaria deste:

Raspbian GNU/Linux 7 linuxbox ttyAMA0

linuxbox login: skylarmt
Password: **********
Skylar Ittner
fonte
veja esta resposta: unix.stackexchange.com/a/141272/27616
Olivier Dulac
Eu não acho que essa mudança seja atualmente possível no nível de configuração. O login do terminal é gerenciado pelo agetty, que chama / bin / login para solicitação de senha. Você pode obter o efeito descrito alterando corretamente o código-fonte de login, recompile-o e use a versão modificada, mas isso requer algum conhecimento de ANSI C.
precisa saber é o seguinte

Respostas:

1

Não conheço nenhuma configuração para fazer isso, se você REALMENTE quiser fazê-lo, pode conseguir isso:
1 - modificando a função getpass no arquivo getpass.c no pacote glibc.
2 - construa libc- (VERSION) .so
3 - faça backup da lib original (sua arquitetura) /libc.so (diga renomeie para libc- (VERSION) .so.bak
4 - mova o novo arquivo para lib / (sua arquitetura ) / 5 - execute ldconfig para atualizar o cache
Como exemplo, você pode substituir o código que lê a senha por um código que pode se parecer com isto:

  /* 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;
Baroudi Safwen
fonte