Dlaczego wprowadzone hasło nie jest widoczne?

39

Poniżej znajduje się obraz procesu, który podjąłem, aby utworzyć użytkownika na bash w Linuksie.

Tworzenie użytkownika i przypisywanie hasła w bash

Rozumiem, że hasło nie powinno być wyświetlane ze względów bezpieczeństwa, ale mam na myśli to, dlaczego gwiazdki (lub znaki, które wprowadziłem) nie pojawiają się?

Kaiylar
źródło
4
ilekroć masz pytanie dotyczące Linuksa, odpowiedzią jest bezpieczeństwo.
Katz
IBM Notes robi tę dziwną rzecz, gdy wyświetla losowe gwiazdki dla każdego znaku, który wpisujesz jako hasło. Bardzo mylące.
1
powiązane również: security.stackexchange.com/q/35133/3945
wim

Odpowiedzi:

43

Ponieważ tak robimy rzeczy w * nix land. :) Daje to trochę dodatkowego bezpieczeństwa, nie wyświetlając kilku gwiazdek. W ten sposób osoba, która zobaczy Twój ekran, nie zobaczy długości Twojego hasła.

Ale muszę przyznać, że trochę przerażające jest, że nie dostajesz żadnych informacji zwrotnych podczas wprowadzania hasła, szczególnie jeśli masz złą klawiaturę. Dlatego większość okien dialogowych z hasłem GUI w systemach * nix daje ci jakieś informacje zwrotne, np. Używając gwiazdek lub częściej ⬤. A niektóre nawet wyświetlają każdą postać podczas pisania, ale natychmiast zastępują ją znakiem *lub ⬤, ale to nie jest tak dobre, jeśli ktoś może patrzeć przez ramię. Lub jeśli mają urządzenie, które może odbierać i dekodować sygnał wideo wysyłany z komputera na monitor.

PM 2 Ring
źródło
5
... z pomocąstty -echo
Jeffa Schallera
7
Ta odpowiedź nie jest zła, ale IMHO Gilles udzieliła prawdziwej odpowiedzi. Niemal na pewno implementatorzy tak naprawdę nie myśleli o „odrobinie dodatkowego bezpieczeństwa” i zdecydowanie nie myśleli o wrażeniach użytkownika. Zrobili to tak, jak to zrobili, ponieważ było tanie i łatwe do zrobienia w ten sposób. Później spodziewaliśmy się, że tak będzie dalej ...
Celada
2
@Celada: Sprawiedliwy punkt. FWIW, już poprawiłem doskonałą odpowiedź Gillesa.
PM 2,
2
@Celada Zwiększone bezpieczeństwo może nie doprowadziło do pierwotnej decyzji o braku wyświetlania, ale zawsze uważałem to za korzyść i widzę, że inni myślący w ten sposób mogą stanowić dobry powód, aby tak pozostać.
Monty Harder
1
Wydaje mi się, że wyświetlanie ostatniego wpisanego znaku jest głównie mobilne, prawdopodobnie dlatego, że pisanie na małej klawiaturze ekranowej jest bardziej podatne na błędy. Nie sądzę, żebym kiedykolwiek widział to w aplikacjach komputerowych.
Barmar,
82

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).

Gilles „SO- przestań być zły”
źródło
1
To zdecydowanie najlepsza odpowiedź imo i jest bardzo pomocna. Dzięki za wyjaśnienie mojego przekonania i rozszerzenie ^, ^ zasługuje na głosowanie!
DankyNanky
4
Program obsługi terminalu zajmuje się prostymi funkcjami edycji (takimi jak backspace) i buforowaniem linii. Odczyt linii za pomocą fgets () nie powraca, dopóki nie zostanie naciśnięty klawisz Enter. dzięki czemu drukowanie gwiazdek jest trudne. Jeśli miałbyś czytać to po jednym znaku na raz i wyświetlać echa gwiazdkom, utraciłbyś funkcję cofania lub potrzebowałbyś dodatkowego wysiłku, aby ją wesprzeć.
Jasen
1
Przechodząc do historii w tej kwestii, zastanawiam się, w jaki sposób odnosi się to do czasu, w którym tty faktycznie odnosiło się do teletypewriter ...
Jasper
1
Istnieją sposoby wykonania polecenia bez zapisywania go w historii poleceń. Zobacz na przykład Wykonaj polecenie bez przechowywania go w historii .
CVn,
2
Dodatek: Terminale, które „wykonują dodatkową pracę” w celu powtórzenia danych wprowadzonych przez użytkownika, są tak zwanymi terminalami „full duplex”. W Ye Olde Days istniały również terminale „półdupleksowe”, w których znak był wyświetlany od razu po wpisaniu, a system operacyjny nie odesłał go z powrotem do terminala w celu wyświetlenia. Jeśli dobrze pamiętam, terminale te nie miały możliwości wyłączenia echa.
Alexis
3

Niewidoczne hasło sprawia, że ​​jest ono bezpieczniejsze, ponieważ inni nie mogą zobaczyć długości hasła. Pozwala to uniknąć ryzyka, że ​​inni spróbują odgadnąć hasło na podstawie jego długości i zalogować się na konto.

Coder AP
źródło
Klawiatury wydają się hałasować podczas ich używania, które można usłyszeć lub nagrać do późniejszej analizy w celu ustalenia długości hasła. Niektóre modele klawiatury są cichsze niż inne . Ponadto niektóre klawisze wydają stosunkowo wyraźne dźwięki (pomyśl o spacji, Enter itp.). W tym kontekście zastanów się również, jak ważne jest zachowanie tajemnicy długości hasła? w sprawie bezpieczeństwa informacji .
CVn,
@ Michael Kjörling: To, co powiedziałeś, to bezpieczeństwo na poziomie zaawansowanym i ważna kwestia, którą należy wziąć pod uwagę (szczególnie dla tych, których moc słyszenia jest naprawdę dobra, i którzy mogą uzyskać długość hasła przez hałas klawiatury). Jest to jednak kwestia sprzętowa, którą należy rozważyć na poziomie sprzętowym i jako taka, teraz mamy możliwość klawiatur ekranowych, które nie wytwarzają hałasu.
Coder AP,