Jaki jest najprostszy sposób ukrywania danych wejściowych użytkownika?
Nie wyświetlam tego!
Ukrywanie haseł podczas ich wpisywania to stara tradycja. Ma to sens z punktu widzenia bezpieczeństwa w większości kontekstów: jeśli ktoś patrzy na twoje ramiona, nie chcesz, aby łatwo było zobaczyć, co piszesz. (Niektóre współczesne wytyczne bezpieczeństwa, np. 1 2 3 4 5 , zalecają jednak opcję wyświetlania hasła, ponieważ pozwala to użytkownikowi wybrać bardziej złożone hasła i mieć pewność, że nie spędzą czasu na naprawianiu go niewidocznym literówki. Największym ryzykiem nie jest surfowanie po ramionach, to zgadywanie z użyciem siły, prawdopodobnie offline.)
Zdecydowawszy, że hasło powinno być ukryte, realizatorzy musieli zdecydować, jak to zrobić. Terminal ma tryb, w którym wejście użytkownika jest pokazywane (echo włączone) oraz tryb, w którym wejście użytkownika nie jest pokazywane (echo wyłączone). Tryb wyłączania echa istnieje w pewien sposób: jest to tryb, w którym terminal nie wykonuje dodatkowej pracy polegającej na echu danych wprowadzanych przez użytkownika. Ten tryb musi istnieć również w aplikacjach, w których wpisanie klawisza nie wstawia tego znaku, ale wywołuje skrót aplikacji powiązany z tym klawiszem. Polecenia takie jak passwdpo prostu ustaw terminal na tryb wyłączania echa podczas odczytywania hasła.
Drukowanie gwiazdek dla każdej postaci wymagałoby dodatkowej pracy wdrożeniowej przy niewielkiej korzyści, czego realizatorzy passwdkomendy nie mieli ochoty robić. Nie ma trybu terminalu do drukowania gwiazdek, ponieważ byłaby to bardzo wyspecjalizowana funkcja, przydatna tylko podczas wprowadzania haseł.
Nawiasem mówiąc, jeśli chcesz zobaczyć hasło podczas jego zmiany, możesz użyć cat | passwd(przynajmniej w niektórych systemach - niektóre wersje passwdwymagają opcji podobnej, cat | passwd --stdina niektóre w ogóle tego nie akceptują). (Możesz nawet to zrobić { echo 'current password'; echo 'new password'; echo 'new password'; } | passwd, ale nie rób tego: zapisałoby to hasła w historii powłoki, z których wiąże się o wiele większe ryzyko wycieku.) Zapewnienie tego za pomocą poleceń, które czytają hasło z terminala, a nie cokolwiek ich standardowe dane wejściowe, takie jak sudolub ssh, są bardziej złożone; jeśli masz GUI, możesz użyć ssh-askpass, który pokazuje, ile znaków wpisałeś ( SUDO_ASKPASS=/usr/bin/ssh-askpass sudo -Adla sudo; dla ssh jest to skomplikowane, gdy wywołujesz je z terminala).