Abaixo está uma imagem do processo que eu levei para criar um usuário no bash no Linux.
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?
Abaixo está uma imagem do processo que eu levei para criar um usuário no bash no Linux.
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?
Respostas:
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.
stty -echo
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 passwd
apenas 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 passwd
comando 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 passwd
exigem uma opção como cat | passwd --stdin
e 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 sudo
ou 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 -A
para sudo; para ssh, é complicado quando você a invoca de um terminal).
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.