2009-09-11 3 views
7

In un moderno sistema Unix o Linux, come si può sapere quale codice imposta il file /etc/passwd memorizza i nomi utente in? I nomi utente sono autorizzati a contenere caratteri accentati (nell'intervallo 0x80..0xFF in, ad esempio, ISO 8859-1 o 8859-15)? Il file /etc/passwd può contenere UTF-8? Puoi dire che contiene UTF-8? Che dire del semplice testo delle password prima che siano crittografate o con hash?Quale set di codici è/etc/passwd memorizzato? Può essere UTF-8? Quali sono i limiti posti ai nomi degli utenti?

Chiaramente, se i nomi utente e altri dati sono limitati all'intervallo 0x00..0x7F (ed esclude comunque 0x00), non vi è alcuna differenza tra UTF-8, 8859-1 o 8859-15; i personaggi presenti sono tutti codificati allo stesso modo.

Inoltre, sto usando /etc/passwd come abbreviazione per qualcosa sulla falsariga di "l'identificazione dell'utente e il server di autenticazione (a volte chiamato un servizio di directory) su una macchina Unix-based, di solito si accede tramite PAM e talvolta ospitati su altri macchine del tutto da quella locale, ma a volte ancora in realtà un file sul disco rigido locale, convenzionalmente chiamato /etc/passwd, spesso supportato da /etc/shadow ". Suppongo anche che le domande equivalenti sul database di gruppo (spesso il file /etc/group) abbiano la stessa risposta.

risposta

4

È tutto ASCII. Ma la password stessa non viene mai memorizzata, ma solo i risultati dell'hash unidirezionale. Se ti stai chiedendo quali caratteri possono essere contenuti nella password stessa, dipende dalle impostazioni locali, il che limiterà i caratteri che il tuo terminale è in grado di gestire. Vedere "locale man"

From the BSD man page:

"file/etc/passwd password di ASCII ..."

Per quanto riguarda i nomi utente, posso dirvi che Solaris supporta solo ASCII. Non posso parlare per altri Unix-en.

"Non tutti gli oggetti in Solaris 2 e Solaris 7can hanno nomi composta da caratteri arbitrari. The names of the following objects must be composed of ASCII characters:

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

"

+0

Potete fornire prove documentali (URL) per l'affermazione? E cosa succede se i byte non ASCII vengono inseriti nel file/etc/passwd? –

+1

Grazie per le informazioni extra. Supponendo di avere una macchina accessibile da persone provenienti dagli Stati Uniti (terminali 8859-1), Germania (8859-15) e Taiwan (UTF-8). Quale set di codici è il file password memorizzato ora? –

+0

È ancora tutto ASCII. Ciò che puoi digitare varierà con le impostazioni locali del terminale. Ma l'output della funzione di hash sarà sempre ASCII. Ad esempio, puoi creare un file contenente i caratteri che ti piacciono e l'esecuzione md5 su di esso - e il set di caratteri del file originale non ha nulla a che fare con il set di caratteri dell'hash risultante. (Tradizionalmente, l'hash passwd è generato da crypt, senza md5 però) – nont