Por que a senha inserida não está visível?

39

Abaixo está uma imagem do processo que eu levei para criar um usuário no bash no Linux.

Criando usuário e atribuindo senha no bash

Entendo que a senha não deve ser exibida por motivos de segurança, mas o que quero dizer é: por que os asteriscos (ou os caracteres que eu inseri) não aparecem?

Kaiylar
fonte
4
sempre que você tiver alguma dúvida sobre o Linux, a resposta é segurança.
Katz
O IBM Notes faz essa coisa estranha, na qual eles exibem asteriscos aleatórios para cada caractere digitado como senha. Muito confuso.
11
Dupe entre
wim
11
também relacionado: security.stackexchange.com/q/35133/3945
wim

Respostas:

43

Porque é assim que fazemos as coisas em * nix land. :) Dá um pouco de segurança extra ao não exibir um monte de asteriscos. Dessa forma, alguém que vê sua tela não pode ver o tamanho da sua senha.

Mas devo admitir que é um pouco assustador não receber feedback quando você digita uma senha, especialmente se você tiver um teclado com defeito. Portanto, a maioria das caixas de diálogo de senha da GUI nos sistemas * nix fornece algum tipo de feedback, por exemplo, usando asteriscos ou mais comumente ⬤. E alguns até exibem cada caractere enquanto você o digita, mas imediatamente o substituem por um *ou ⬤, mas isso não é tão bom se alguém pode estar olhando por cima do seu ombro. Ou se eles tiverem um dispositivo capaz de captar e decodificar o sinal de vídeo enviado do seu computador para o monitor.

PM 2Ring
fonte
5
... com a ajuda destty -echo
Jeff Schaller
7
Esta resposta não é ruim, mas IMHO Gilles deu a resposta real. Certamente, os implementadores não estavam realmente pensando em "um pouco de segurança extra" e definitivamente não estavam pensando na experiência do usuário. Eles fizeram do jeito que fizeram, porque era barato e fácil fazê-lo dessa maneira. Então, mais tarde, viemos a esperar que ele continue a trabalhar dessa maneira ...
Celada
2
@ Celada: ponto justo. FWIW, eu já votei em excelente resposta de Gilles.
PM 2Ring
2
@ Celada A segurança adicional pode não ter levado à decisão original de não mostrar nada, mas sempre considerei um benefício e posso ver como os outros que pensam dessa maneira podem ter fornecido um bom motivo para mantê-la dessa maneira.
Monty Mais difícil
11
Eu acho que a exibição do último caractere digitado é principalmente uma abordagem móvel, provavelmente porque digitar em um pequeno teclado na tela é mais suscetível a erros. Acho que nunca vi isso em aplicativos de desktop.
Barmar '09
82

Qual é a maneira mais simples de ocultar a entrada do usuário?

Não está exibindo!

Ocultar senhas durante a digitação é uma tradição antiga. Faz sentido do ponto de vista da segurança na maioria dos contextos: se alguém está olhando por cima de seus ombros, você não quer facilitar a visualização do que está digitando. (Algumas diretrizes de segurança modernas, por exemplo, 1 2 3 4 5 , recomendam a opção de tornar a senha visível, porque isso permite que o usuário possa escolher senhas mais complexas e ter a confiança de que não gastará seu tempo consertando invisíveis. O maior risco não é surfar nos ombros, é adivinhar a força bruta, possivelmente offline.)

Tendo decidido que a senha deveria ser oculta, os implementadores tiveram que decidir como fazê-lo. O terminal possui um modo em que a entrada do usuário é exibida (eco ativado) e um modo em que a entrada do usuário não é exibida (eco desativado). O modo eco off tem uma existência intrínseca de certa forma: esse é o modo em que o terminal não faz o trabalho extra de fazer eco da entrada do usuário. Esse modo também deve existir para aplicativos em que a digitação de uma tecla não insere esse caractere, mas invoca algum atalho de aplicativo vinculado a essa tecla. Portanto, comandos como passwdapenas configuram o terminal para ecoar o modo enquanto eles estão lendo uma senha.

Imprimir asteriscos para cada caractere exigiria um trabalho de implementação extra por apenas um benefício relativamente pequeno, que os implementadores do passwdcomando não têm vontade de fazer. Não há modo terminal para imprimir asteriscos, pois seria um recurso muito especializado, útil apenas ao inserir senhas.

A propósito, se você quiser ver sua senha ao alterá-la, poderá usá-la cat | passwd(pelo menos em alguns sistemas - algumas versões de passwdexigem uma opção como cat | passwd --stdine outras não aceitam isso). (Você pode até fazer { echo 'current password'; echo 'new password'; echo 'new password'; } | passwd, mas não faça isso: isso salvaria as senhas no histórico do shell, das quais há muito mais risco de vazamento.) Organizando isso com comandos que lêem a senha do terminal e não o que quer que seja sua entrada padrão, como sudoou ssh, é mais complexa; se você tiver uma GUI disponível, poderá usar o ssh-askpass, que mostra quantos caracteres você digitou ( SUDO_ASKPASS=/usr/bin/ssh-askpass sudo -Apara sudo; para ssh, é complicado quando você a invoca de um terminal).

Gilles 'SO- parar de ser mau'
fonte
11
Esta é de longe a melhor resposta imo e é realmente muito útil. Obrigado por esclarecer minha opinião e expandir ^, ^ merece votação!
DankyNanky
4
O manipulador de terminal cuida de recursos simples de edição (como backspace) e buffer da linha. Uma leitura de linha usando fgets () não retorna até que enter seja pressionado. o que dificulta a impressão dos asteriscos. Se você fosse ler um caractere de cada vez e repetir asteriscos, perderia a funcionalidade de backspace ou precisaria de um esforço extra para apoiá-la.
Jasen
11
Quando vai para o ângulo história sobre esta questão, eu me pergunto como isso se relaciona com o momento em que tty efectivamente referida teletypewriter ...
Jasper
11
Existem maneiras de executar um comando sem que ele seja armazenado no histórico de comandos. Veja, por exemplo, o comando Executar sem mantê-lo no histórico .
um CVn
2
Adendo: Os terminais que "fazem um trabalho extra" para ecoar a entrada do usuário são os chamados terminais "full duplex". Em Ye Olde Days, havia também terminais "half duplex", em que o caractere era exibido imediatamente pelo terminal ao ser digitado, e o sistema operacional não o enviava de volta ao terminal para exibição. Se bem me lembro, esses terminais não tinham como desativar o eco.
21478 alexis
3

Tornar a senha invisível torna-a mais segura, pois o comprimento da senha não pode ser visto por outras pessoas. Isso evita o risco de outras pessoas tentarem adivinhar a senha pelo comprimento e fazer login na sua conta.

Coder AP
fonte
Os teclados tendem a emitir alguma quantidade de ruído à medida que são usados, que podem ser ouvidos ou gravados para análise posterior para determinar o tamanho da senha. Alguns modelos de teclado são mais silenciosos que outros . Além disso, algumas teclas tendem a emitir ruídos relativamente distintos (pense em barra de espaço, Enter, etc.). Nesse contexto, considere também Quão importante é manter em segredo o tamanho da senha? em segurança da informação .
um CVn
@ Michael Kjörling: O que você disse é uma segurança de nível avançado e um ponto válido a ser considerado (especialmente para aqueles cuja capacidade auditiva é realmente boa, que pode obter o tamanho da senha através do ruído dos teclados). Mas é uma questão de hardware, que precisa ser considerada no nível do hardware e, como tal, agora temos a facilidade de teclados com tela sensível ao toque, que não geram ruído.
Coder AP