Do czego służą pliki / etc / shadow i shadow cache w systemie operacyjnym Linux?

9

Do czego służy plik / etc / shadow w systemie operacyjnym Linux? Czy to samo dotyczy klientów SUSE? Utrzymywany jest jeden plik pamięci podręcznej cienia, jaki jest tego cel?

Ashitosh
źródło

Odpowiedzi:

16

Od samego początku systemy operacyjne Uniksowe i Uniksowe (w tym Linux) zawsze przechowują hasła jako hasła kryptograficzne (1). Te skróty były pierwotnie przechowywane /etc/passwd, ale plik ten musiał być czytelny dla całego świata, aby udostępnić informacje do innych celów - nawet prosty ls -lodczyt /etc/passwd, aby przekonwertować numeryczny identyfikator użytkownika każdego właściciela pliku na nazwę użytkownika do wyświetlenia. Jednak posiadanie zaszyfrowanych haseł w pliku odczytywalnym na świecie umożliwiło złośliwym użytkownikom łatwe uzyskanie tych skrótów i próbę wygenerowania użytecznych haseł (2) dla kont innych użytkowników.

Aby temu zapobiec, hashowane hasła zostały ostatecznie przeniesione do pliku, który może odczytać tylko root (i czasami uprzywilejowana grupa administratorów) /etc/shadow,. Ukrywa to skróty przed normalnymi użytkownikami systemu, jednocześnie udostępniając je do celów uwierzytelnienia użytkownika.

Uwagi :

  1. Pedantyczny, wiem, ale przechowywane hasła nie są szyfrowane. Są one mieszane przy użyciu algorytmu haszującego zabezpieczonego kryptograficznie (przynajmniej w chwili, gdy został napisany). Najważniejsze istotne tutaj rozróżnienia to to, że skróty mają stałą długość (długość zaszyfrowanego tekstu różni się w zależności od długości zaszyfrowanego tekstu) i nieodwracalne (zaszyfrowany tekst można odszyfrować; zaszyfrowany tekst nie może).

  2. Ponieważ skróty mają stałą długość, istnieje nieskończona liczba danych wejściowych, które będą pasować do dowolnej reprezentacji skrótu. Osoba atakująca może zatem znaleźć działające hasło, które niekoniecznie musi być takie samo, jak hasło użytkownika będącego właścicielem - chociaż jest to bardzo mało prawdopodobne, biorąc pod uwagę wielkość nowoczesnych skrótów kryptograficznych.

Dave Sherohman
źródło
Myślę, że w ostatnim akapicie musisz powiedzieć „skończony”, a nie „nieskończony”.
phunehehe
4
@ phunehehe Nie, zestaw danych wejściowych (wszystkie możliwe hasła) jest nieskończony, ale dane wyjściowe (wszystkie możliwe wartości skrótu) są skończone.
phihag
@ phihag Ah widzę. Ale hash i tak byłby znacznie dłuższy niż jakiekolwiek hasło zapamiętane przez człowieka :)
phunehehe
1
Liczba danych wejściowych prowadzących do danej kolizji nie jest nieskończona, ponieważ długość łańcuchów, które mogą być mieszane przez dowolny algorytm, jest skończona . Zobacz na przykład stackoverflow.com/questions/17388177/…
MariusMatutiae
1
@MariusMatutiae Załóżmy, że naprawdę zła implementacja skrótu, która obcina 3 znaki. Prawidłowe hasło to „abc”. Wejścia „abcd”, „abcde”, „abcdef” itp. Również będą generować ten sam wyjściowy skrót, a zatem również zostaną zaakceptowane. Istnieje nieskończona liczba ciągów, które zaczynają się od „abc” i trywialnie kolidują. (Zauważ, że zasadniczo nie zgadzamy się tutaj, czy „dane wejściowe” oznaczają przed zastosowaniem lub po obcinaniu).
Dave Sherohman,
6

/etc/shadowPlik został utworzony ze względów bezpieczeństwa i posiada zaszyfrowane hasło każdego użytkownika.

Pierwotnie zaszyfrowane hasło było przechowywane w /etc/passwd. /etc/passwdmusiały być czytelne na całym świecie, aby system mógł mapować identyfikatory użytkowników na nazwy użytkowników i aby użytkownicy mogli znaleźć informacje o sobie nawzajem, np. katalog domowy drugiego użytkownika lub jego numer telefonu, który był tradycyjnie przechowywany w polu „gecos” i wyświetlane przez narzędzie „finger”.

Ale potem ludzie zdali sobie sprawę, że to problem bezpieczeństwa. Każdy, kto ma wystarczająco dużo czasu, może wykonać tak zwany atak brutalnej siły , programowo generując zaszyfrowane hasła dla każdego możliwego hasła. Jeśli osoba atakująca zrobi to bez próby zalogowania się przez telnetlub ssh, system nie będzie wiedział, że jest atakowany.

Zaszyfrowane hasło zostało przeniesione do nowo utworzonego /etc/shadow, które można odczytać tylko przez root.

Zawiera także inne informacje, które /etc/passwdnie były obsługiwane przez plik związane z kontem użytkownika i hasłem, np. Kiedy hasło zostało ostatnio zmienione i kiedy wygaśnie.

Zobacz man 5 shadow( wersja internetowa ), aby uzyskać szczegółowe informacje na temat formatu pliku.


Nie mogę powiedzieć, czy jest tak samo w przypadku SUSE, nie wiedząc, z którą wersją SUSE masz do czynienia. Na przykład twój system SUSE może używać Blowfish zamiast MD5.

Sugerowałeś również, że miksujesz swój /etc/shadowplik z systemem z inną dystrybucją Linuksa, ale nie powiedziałeś, jaka była druga dystrybucja.

Zobacz na przykład problemy z migracją pliku cienia z SuSE 9.3 na Ubuntu Server x86_64 .

Aby to rozgryźć, otwórz /etc/shadowi sprawdź, czy pole zaszyfrowanego hasła zaczyna się od $1$lub $2$. Jeśli zawiera $1$, to jest MD5 i jest kompatybilny z większością innych dystrybucji. Jeśli zawiera $2$, prawdopodobnie jest to Blowfish, zgodnie z plikami cieni Blowfish na Debianie .

Jeśli używasz Ubuntu, pierwszy wynik wyszukiwania Google dla Blowfish Ubuntu może być dobrym miejscem startowym.

Mikel
źródło
3

Użytkownicy są wyszczególnieni w /etc/passwdpliku. Ten plik zawiera wiele informacji wykorzystywanych przez systemm nie tylko do umożliwienia użytkownikom logowania.

Każda linia odpowiada wpisowi użytkownika, a różne pola są oddzielone dwukropkami. Pierwsze pole to login, po którym następuje odpowiednie hasło.

W tym polu przechowywane były zaszyfrowane hasła. Jednak /etc/passwdplik musi być czytelny dla wszystkich w systemie, więc szyfrowanie nie zapobiega atakom siłowym, jak to powiedział @Mikel. Rozwiązaniem było przenieść te zaszyfrowane hasła root-Do odczytu pliku: /etc/shadow.

Tak więc /etc/shadowzawiera zaszyfrowane hasła użytkowników systemu. System wie, że musi sprawdzić hasła w tym pliku, gdy pola hasła /etc/passwdzawierają tylko x (co oznacza „ przejście do / etc / shadow”)

jopasserat
źródło
1
Pamiętaj, że hasła przechowywane w /etc/passwd/ są nadal mieszane dokładnie w taki sam sposób, jak gdyby były /etc/shadow. W rzeczywistości nie mówisz, że hasła w /etc/passwdtekście byłyby zwykłym tekstem, ale dla kogoś, kto nie zna obsługi hasła * nix, łatwo byłoby źle zinterpretować twoją odpowiedź.
Dave Sherohman,
Dziękuję za komentarz, który pomógł mi poprawić odpowiedź.
Nie sądzę, żeby to xfaktycznie coś znaczyło. Jest tam tak samo jak nieprawidłowy skrót (taki, który nie pasuje do żadnego hasła). Niektóre systemy używają !.
user1686
3

Zobaczmy, czy uda mi się zdobyć wszystkie głosy na świecie, odkąd napisałem, co stało się Linux Shadow Password Suite w '87;)

Oryginalny /etc/passwdplik zawierał zmodyfikowany skrót DES hasła hasła w postaci jawnego tekstu. W momencie tworzenia tej crypt()funkcji uważano (i zostało to stwierdzone przez twórców systemu operacyjnego UNIX), że ataki na skróty haseł byłyby niemożliwe ze względu na liczbę możliwych haseł i użycie 12-bitów (4096 możliwych wartości) „sól”. Każde możliwe hasło w postaci czystego tekstu miało 4096 możliwych wartości skrótu, a przy 64-bitowym wyniku skrótu, co dało w sumie 2 ^ 72 możliwych skrótów hasła.

Jak wspomniano inny plakat, /etc/passwdbył także wykorzystywany przez różne narzędzia do mapowania między nazwami użytkowników a wartościami UID ( /etc/groupplik zapewnia analogiczną funkcję dla grup) i wymagał, aby był czytelny na całym świecie.

W latach osiemdziesiątych stało się oczywiste, że ataki słownikowe na hash przechowywany w /etc/passwdpliku stają się wykonalne i /etc/shadowzostały wprowadzone do AT&T UNIX we wczesnej wersji Systemu V. Udokumentowałem, których stron użyłem do napisania oryginalnej biblioteki Shadow, i „ Od tego czasu zapomnieliśmy, ale zdecydowanie była to wczesna wersja Systemu V, prawdopodobnie SVR3.2.

To, co zrobił AT&T i co zaimplementowałem dla SCO Xenix (oryginalny SCO Xenix, a nie późniejszy zły SCO Xenix) w 87, które ostatecznie zaczęło być używane w Linuksie, to po prostu przeniesienie zaszyfrowanego hasła /etc/shadow. Zapobiegło to atakowi drive-by, w którym nieuprzywilejowany użytkownik nabył kopię /etc/passwdi przeprowadził atak przeciwko niej. Jeśli wiesz, dlaczego przede wszystkim napisałem Shadow, kazałem użytkownikowi pobrać mój /etc/passwdplik za pośrednictwem UUCP w czasach, gdy nadal używaliśmy UUCP do prawie wszystkiego.

Do czasu stworzenia Linuksa i jego powszechnego zastosowania istniała bardzo duża liczba narzędzi do atakowania skrótów haseł. Wydajne re-implementacje crypt()były jedną ścieżką, a ataki oparte na słownikach za pomocą narzędzi takich jak Crack i libcrack były innymi. Pierwszego portu dokonali Nate Holloway i Floria La Roche (udzieliłem im uznania, nie wiem, czy ktokolwiek wykonał pracę przed nimi).

W końcu użycie skrótów crypt()opartych na hasłach, nawet w chronionym pliku, nie było już bezpieczne i dokonano pierwotnych MD5zmian skrótu. MD5ostatecznie został uznany za zbyt słaby i zastosowano nowsze hasze.

Teoretycznie można przechowywać wystarczająco mocny skrót /etc/passwd. Słaba ochrona operacyjna oznacza, że ​​wiele systemów ma swoje /etc/shadowpliki dostępne za pośrednictwem różnych wektorów ataku - „Ukradłem pliki kopii zapasowych” jest prawdopodobnie najłatwiejszym.

Julie w Austin
źródło