Dlaczego uprawnienie do pliku / etc / shadow jest ustawione na 600?

25

Uprawnienia /etc/shadowwynoszą 600, co oznacza, że ​​nie jest czytelny dla nikogo poza rootem.

Ponieważ jednak wszystkie hasła w nim zawarte nie są zapisywane w postaci zwykłego tekstu, ale jako skróty (co oznacza, że ​​niemożliwe jest obliczenie oryginalnego hasła z skrótu), dlaczego nie wszyscy mogą go odczytać?

Shubhanshu Vishwakarma
źródło
Czy na pewno uprawnienia /etc/shadow600?
edwinksl,
4
Jeśli hasło do Twojego konta Stackoverflow jest zaszyfrowane, czy chcesz pokazać to hasło innym osobom?
Jeon
5
@ByteCommander. Czasami chcę mieć sposób na poprawienie poprawek.
TRiG

Odpowiedzi:

60

Aby zapobiec atakom siłowym offline.

Mimo że nie możesz cofnąć skrótu, nadal możesz wypróbować każde możliwe hasło, aż znajdziesz pasujące hasło, i możesz wykonywać miliony prób na sekundę przy dobrym sprzęcie i lokalnym dostępie do pliku.

Jeśli plik ma 644uprawnienia, każdy, kto zaloguje się do systemu, nawet podczas sesji gościa, będzie mógł skopiować ten plik z komputera (na pamięć USB lub zdalnie za pośrednictwem scp) i podjąć próbę ataku siłowego offline , bez pozostawiania żadnych dowodów na to na komputerze .


Należy pamiętać, że uprawnienia do Ubuntu są w rzeczywistości 640, a nie 600:

$ ls -l /etc/shadow
-rw-r----- 1 root shadow 1239 Jun 25 04:35 /etc/shadow

Nie ma to jednak większego znaczenia, ponieważ nadal nie ma uprawnień dla innych i domyślnie nikogo nie ma w shadowgrupie.


Początkowo skróty były przechowywane /etc/passwd(i dlatego się nazywa passwd), ponieważ w czasie, gdy Linux był tworzony, złamanie skrótu, nawet wtedy, gdy stosowano słabe typy, było praktycznie niemożliwe. W końcu jednak moc przetwarzania wzrosła do tego stopnia, że ​​złamanie skrótu, przynajmniej stosunkowo słabego hasła, stało się możliwe.

Zmiana uprawnień /etc/passwddo 640lub 600nie działałaby, ponieważ istnieje wiele uzasadnionych powodów, aby czytać /etc/passwdjako zwykły użytkownik (konwersja UID na nazwy użytkowników, uzyskiwanie pełnego imienia i nazwiska użytkownika, numeru telefonu itp.), Więc skróty zostały przeniesione do /etc/shadow, który otrzymał 640uprawnienia. xZamiast pola hash hasła dla użytkownika w /etc/passwdsłuży do wskazania, że hash dla tego użytkownika są przechowywane w /etc/shadowzamian.

wstaw nazwę_tutaj
źródło
1
Dobre połączenie z kopiowaniem pliku!
Rinzwind
1
i nie potrzebuję przedstawiciela ;-) edytuj: hmm on ustawił na mój: P przepraszam: D edit2 i teraz jest z powrotem. eh: D
Rinzwind 20.09.16
6
Ostatnio sprawdziłem, czy możesz z powrotem zaszyfrować hasło do / etc / passwd i usunąć linię z / etc / shadow i oczekiwać, że będziesz w stanie się zalogować. / Etc / shadow istnieje, dzięki czemu można go ustawić na 600 z podanego powodu w tej odpowiedzi.
Jozuego
8
Warto zauważyć, że uprawnienia do / etc / passwd wynoszą 644. Wierzę, że historycznie hash hasła były tutaj przechowywane. Jednak zmiana tego pliku na 640 spowodowałaby wszelkiego rodzaju problemy ze zgodnością, więc zamiast tego skróty haseł zostały przeniesione do cienia i usunięte z passwd - dzięki temu pozostałe informacje w passwd pozostają czytelne na całym świecie, podczas gdy skróty haseł są utrzymywane w tajemnicy inny plik.
Rodney,
4
@Rodney jako ktoś, kto dorastał na BSD 4.3, masz rację. Skróty zostały zapisane w / etc / passwd. Kiedy Vax 11/780 był najnowocześniejszy, brutalny atak na hasła w pliku był uważany za niemożliwy. Być może, co ważniejsze, Internet [Arpanet] był senną, małą ślepą zaułkiem, a takich rzeczy nie brano pod uwagę; nie było ssh-only rlogin / telnet. Przechowywanie pliku haseł 644 oznacza, że ​​narzędzia takie jak lsnie muszą być setuid root, aby tłumaczyć z identyfikatora użytkownika na nazwę.
Mike S
13

W rzeczywistości plik / etc / shadow został utworzony, aby umożliwić odejście od publicznie czytelnej listy nazw użytkowników i haseł.

Trzymaj się, to będzie trochę lekcja historii, zanim dojdziemy do właściwej odpowiedzi. Jeśli nie interesuje Cię historia, po prostu przewiń w dół.

W dawnych czasach uniksopodobne systemy operacyjne, w tym Linux, ogólnie zachowywały hasła w / etc / passwd. Ten plik był czytelny na całym świecie i nadal jest, ponieważ zawiera informacje umożliwiające mapowanie na przykład między numerycznymi identyfikatorami użytkowników a nazwami użytkowników. Informacje te są bardzo użyteczne nawet dla zwykłych użytkowników w całkowicie uzasadnionych celach, więc możliwość odczytu świata plików była bardzo korzystna dla użyteczności.

Nawet wtedy ludzie zdali sobie sprawę, że posiadanie haseł w postaci zwykłego tekstu w pliku w znanej lokalizacji, którą każdy, kto mógłby się zalogować, mógł swobodnie czytać, było złym pomysłem. W pewnym sensie hasła zostały zaszyfrowane. Jest to stary mechanizm mieszania haseł „szyfrowania”, który prawie nigdy nie jest używany w nowoczesnych systemach, ale często obsługiwany do starszych celów.

Spójrz na / etc / passwd w swoim systemie. Widzisz to drugie pole, które mówi xwszędzie? Kiedyś przechowywał zaszyfrowane hasło do danego konta.

Problem polegał na tym, że ludzie mogli pobrać plik / etc / passwd, a nawet go nie pobrać, i pracować nad złamaniem haseł. Nie był to duży problem, gdy komputery nie były szczególnie wydajne (Clifford Stoll, w „ The Cuckoo's Egg” , jak pamiętam, daje czas na zaszyfrowanie jednego hasła w systemie klasy IBM PC w połowie lat 80. XX wieku ), ale stał się problemem wraz ze wzrostem mocy obliczeniowej. W pewnym momencie, przy porządnej liście słów, złamanie tych haseł stało się zbyt łatwe. Z przyczyn technicznych ten schemat nie obsługuje także haseł dłuższych niż osiem bajtów.

Dwie rzeczy zostały zrobione, aby rozwiązać ten problem:

  • Przejście do silniejszych funkcji skrótu. Stara krypta () przeżyła swój okres użyteczności i opracowano bardziej nowoczesne schematy, które były zarówno przyszłościowe, jak i silniejsze obliczeniowo.
  • Przenieś hashowane hasła do pliku, który nie był czytelny dla nikogo. W ten sposób, nawet jeśli funkcja skrótu hasła okazała się słabsza niż oczekiwano, lub jeśli ktoś miał słabe hasło na początku, istniała inna przeszkoda dla atakującego w uzyskaniu dostępu do wartości skrótu na początku. Nie był już dostępny dla wszystkich.

Ten plik to / etc / shadow.

Oprogramowanie współpracujące z / etc / shadow jest na ogół bardzo małe, wysoce skoncentrowane i zwykle poddawane jest dodatkowej kontroli w recenzjach ze względu na potencjalne problemy. Działa również ze specjalnymi uprawnieniami, które pozwalają mu czytać i modyfikować / etc / shadow, jednocześnie uniemożliwiając zwykłym użytkownikom przeglądanie tego pliku.

Więc masz: uprawnienia do / etc / shadow są restrykcyjne (choć, jak już wspomniano, nie tak restrykcyjne, jak twierdzisz), ponieważ celem tego pliku jest ograniczenie dostępu do poufnych danych.

Skrót hasła powinien być silny, ale jeśli twoje hasło znajduje się w 500 najlepszych hasłach na listach internetowych , każdy, kto ma dostęp do skrótu, będzie mógł szybko znaleźć hasło. Ochrona skrótu zapobiega temu prostemu atakowi i podnosi poprzeczkę dla udanego ataku, od zwykłego zerkania do wymagania, aby albo był administratorem systemu na hoście, albo najpierw przeszedł atak eskalacji uprawnień. Zwłaszcza w prawidłowo administrowanym systemie dla wielu użytkowników oba są znacznie trudniejsze niż tylko przeglądanie pliku czytelnego dla świata.

CVn
źródło
Naprawdę podoba mi się sposób, w jaki
opisujesz
Terminologia / etymologia: /etc/shadownie przechowuje „haseł cienia” (ponieważ to nie jest rzecz). Cały plik jest cieniem /etc/passwd. Zobacz, w jaki sposób terminologia jest używana w Linux Shadow Password HOWTO : Dlaczego cień pliku passwd? . W przeciwieństwie do niektórych innych zastosowań terminu „cień” w komputerach, nie jest to jednak kopia w tle (np. Zapisywanie kodu BIOS-u w pamięci RAM zamiast uruchamiania z pamięci ROM). Pole w / etc / passwd jest symbolem zastępczym, zawierającym znak specjalny, który oznacza „prawdziwy skrót hasłem znajduje się w / etc / shadow”.
Peter Cordes
Dobra historia, ale 1 sekunda. na hasło prawie nie ograniczało nawet w latach 80. XX wieku, nie wtedy, gdy górne hasła były używane przez ponad 1% osób.
Warren Dew
1
@WarrenDew Nie jestem pewien, czy składasz oświadczenie o fakcie lub opinii. crypt () ma 12-bitową sól i 12 + 64-bitowe wyjście dla ośmiobajtowego hasła (wtedy zwykle kodowane w standardzie base64). W przypadku typowych haseł, tak, prawdopodobnie możesz je zaatakować brutalnie, ale hasło nie wymagało aż tak dużej ilości hasła, aby złamanie tej brutalnej siły było niemożliwe, gdyby każde sprawdzenie hasła trwało sekundę. Wstępne obliczenie solonego stołu dla nawet jednego hasła zajęłoby około godziny z szybkością jednego szyfrowania na sekundę, a ponadto trzeba było zmagać się z ograniczoną pamięcią (40-80 MB było wtedy dużo).
CVn
@PeterCordes Dobry punkt. Usuwam ten fragment, ponieważ tak naprawdę nie ma on szczególnego związku z odpowiedzią na pytanie PO.
CVn
10

Dlaczego zezwolenie na plik / etc / shadow ma wartość 600?

Kto Ci to powiedział?

$ls -l /etc/shadow
-rw-r----- 1 root shadow 1407 mei 18 10:05 /etc/shadow
  • to 640.

Prosta odpowiedź: uprawnienia w systemie Linux są traktowane poważnie. „Inni” nie mają powodu, aby cokolwiek robić /etc/shadow. I nie ma powodu, by grupa „cień” do niego pisała. A wykonanie jest poza kolejnością.

Ponieważ jednak wszystkie hasła w nim zawarte nie są zapisywane w postaci zwykłego tekstu, ale jako skróty (co oznacza, że ​​niemożliwe jest obliczenie oryginalnego hasła z skrótu), dlaczego nie wszyscy mogą go odczytać?

Ponieważ nie ma jednego powodu, aby to zrobić.

Hashe są jednokierunkowe. Przyznanie komuś dostępu do odczytu umożliwia mu użycie skryptu do nadużywania tego jednokierunkowego działania: wystarczy wymienić dowolne słowo, jakie można sobie wyobrazić, i utworzyć skrót. W pewnym momencie może pasować do hasła. Może jednak trochę potrwać.

Ta odpowiedź jest interesująca i zawiera pewne szacunki dotyczące brutalnego wymuszania.

Rinzwind
źródło
640 jest dla zwykłego użytkownika? użytkownik grupy może odczytać plik cienia?
Shubhanshu Vishwakarma
Przepraszam? Plik ma 640. Więc czytaj, pisz dla użytkownika „root” i czytaj dla grupy „shadow”. „shadow” to uprzywilejowana grupa stworzona przez system do tego konkretnego celu.
Rinzwind
2

Ważne tło: /etc/shadowistnieje wyłącznie w celu ukrywania skrótów haseł. We wczesnych dniach uniksowych hashe hasła były przechowywane w /etc/passwd. Gdy komputery stały się bardziej wydajne, połączenia sieciowe stały się bardziej trwałe, a zabezpieczenia bardziej wyrafinowane, ludzie zdali sobie sprawę, że utrzymywanie skrótów haseł w celu odczytania słów wymagało kłopotów. (Nie będę szczegółowo opisywał exploitów; jest już na to wystarczająco dużo dobrych odpowiedzi).

Ale /etc/passwdnie może być chroniony przed odczytem: jest używany przez wszelkiego rodzaju programy do mapowania identyfikatorów użytkowników numerycznych na nazwy użytkowników oraz do wyszukiwania katalogów domowych, domyślnych powłok, pełnej nazwy użytkownika (i numeru biura itp. - sprawdź man finger) . Tak więc wrażliwa część, skróty hasła, została przeniesiona /etc/shadow, a reszta pozostała bez zmian. Dlatego /etc/passwd, pomijając nazwę, zawiera wszystko oprócz (zakodowanego) hasła.

Alexis
źródło
dzięki za odpowiedź na moje pytanie, teraz mam pełny pomysł na plik / etc / passwd i / etc / shadow.
Shubhanshu Vishwakarma