Dlaczego wprowadzanie hasła działa w poleceniu sudo w potoku?


25

Jeśli zrobię:

sudo cat /etc/resolv.conf | less

Poprosi mnie o hasło, nawet jeśli mniej (przypuszczalnie) zajmuje standardowe. Ponad jakie fd jest wyświetlany monit o hasło i jak odzyskuje dane wejściowe?

Odpowiedzi:


48

W rzeczywistości typowe wywołanie w sudoogóle nie odczytuje hasła stdin. Zamiast tego sudouzyska bezpośredni dostęp do terminala sterującego (a ttylub pty, poprzez /dev/ttyspecjalny plik) i wyświetli monit i odczyta znaki bezpośrednio. Można to zobaczyć w tgetpass.cpliku w sudoźródle.

Istnieje kilka innych scenariuszy:

  • Jeśli askpassokreślony jest program, np. W -Aparametrze, zostanie on wywołany.
  • W przeciwnym razie, jeśli konkretnie poprosisz sudoo czytanie stdin, np. Z -Sflagą - i napisze również monit stderr. Tak jest w przypadku odpowiedzi MadHattera .
  • W przeciwnym razie, jeśli nie będzie ttydostępny
    • Jeśli echo hasła jest wyłączone (domyślnie jest kontrolowane przez visiblepwflagę w sudoers), sudozgłosi błąd:no tty present and no askpass program specified
    • W przeciwnym razie sudowróci do korzystania, stdina stderrnawet jeśli nie zostanie specjalnie zażądane. Odpowiedź MadHattera będzie obowiązywać również tutaj.

10

Rura łączy standardowe sudo catwyjście ze lessstandardowym wejściem, więc sudo catstandardowe wejście pozostaje nienaruszone i może otrzymać hasło.

Co do znaku zachęty, to wychodzi na sudo catzdziwienie; w bash spróbuj przekierować to wraz ze standardowym wyjściem, używając

sudo cat /etc/resolv.conf |& less

i zobacz, jak różna jest odpowiedź.


16
Chociaż ta odpowiedź jest poprawna, ponieważ sudostdin jest nadal podłączony do terminala za pomocą polecenia przykładowego, nie ma to bezpośredniego związku z tym, w jaki sposób otrzymuje swoje hasło: domyślnie sudonie żąda haseł przez stdin ani nie wyświetla monitu przez stderr- ty może spróbować 2>/dev/nullto potwierdzić. Zamiast tego sudouzyskuje bezpośredni dostęp do tty.
Bob
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.