2009-09-11 10 views
7

Na współczesnym systemie Unix lub Linux, w jaki sposób można określić, który kod ustawił plik /etc/passwd przechowujący nazwy użytkowników? Czy nazwy użytkowników mogą zawierać znaki akcentowane (od zakresu 0x80..0xFF w, powiedzmy, ISO 8859-1 lub 8859-15)? Czy plik /etc/passwd może zawierać UTF-8? Czy możesz powiedzieć, że zawiera on UTF-8? Co powiesz na zwykły tekst haseł, zanim zostaną zaszyfrowane lub zaszyfrowane?Który zestaw kodowy jest zapisany w/etc/passwd? Czy to może być UTF-8? Jakie ograniczenia są nałożone na nazwy użytkowników?

Oczywiście, jeśli nazwy użytkownika i inne dane są ograniczone do zakresu 0x00..0x7F (i tak czy inaczej wykluczają 0x00), to nie ma różnicy między UTF-8, 8859-1 lub 8859-15; obecne znaki są zakodowane tak samo.

Używam również jako skrótu do czegoś podobnego do "bazy danych identyfikacyjnych i uwierzytelniających użytkownika (czasami nazywanej usługą katalogową) na maszynie opartej na Uniksie, zwykle dostępnej przez PAM, a czasami hostowanej na innych maszyny całkowicie z lokalnego, ale czasami nadal jest to plik na lokalnym dysku twardym, zwykle nazywany /etc/passwd, często obsługiwany przez /etc/shadow ". Zakładam również, że równoważne pytania dotyczące bazy danych grupy (często pliku /etc/group) mają tę samą odpowiedź.

Odpowiedz

4

To wszystko ASCII. Ale samo hasło nigdy nie jest przechowywane - tylko wyniki jednokierunkowego skrótu. Jeśli zastanawiasz się, jakie znaki mogą być w samym haśle, zależy to od ustawień regionalnych, które ograniczą znaki, z którymi może poradzić sobie twój terminal. Patrz "Locale man"

From the BSD man page:

"/ etc/passwd plik ASCII hasło ..."

Co do nazw użytkowników, mogę powiedzieć, że Solaris obsługuje tylko ASCII. Nie mogę mówić za innych Unix-en.

"Nie każdy obiekt w Solaris 2 i Solaris 7can mają nazwy składają się z dowolnych znaków. The names of the following objects must be composed of ASCII characters:

* User names, group name, and passwords 
* System name ... 

"

+0

można dostarczyć dokument potwierdzający (a URL) twierdzenie? A co się stanie, jeśli bajty inne niż ASCII zostaną wprowadzone do pliku/etc/passwd? –

+1

Dzięki za dodatkowe informacje. Przypuśćmy, że masz maszynę, do której dostęp mają ludzie z USA (terminale w 8859-1), Niemcy (8859-15) i Tajwan (UTF-8). Który zestaw kodowy jest teraz przechowywany w pliku haseł? –

+0

To wciąż wszystko, co ASCII. To, co możesz wpisać, zależy od ustawień regionalnych terminala. Ale wyjście funkcji mieszającej zawsze będzie ASCII. Na przykład możesz utworzyć plik zawierający dowolne znaki, które chcesz, i uruchomić md5 na nim - a zestaw znaków oryginalnego pliku nie ma nic wspólnego z zestawem znaków wynikowego hasha. (tradycyjnie hash passwd jest generowany przez kryptę, ale nie md5). – nont