Perché l'autorizzazione del file per / etc / shadow è impostata su 600?


25

Le autorizzazioni di /etc/shadowsono 600, il che significa che non è leggibile per nessuno tranne che per root.

Tuttavia, poiché tutte le password al suo interno non sono memorizzate in chiaro ma come hash (il che significa che è impossibile calcolare la password originale dall'hash), perché non può essere letta da tutti?


Sei sicuro che le autorizzazioni /etc/shadowsiano 600?
edwinksl,

4
Se una password del tuo account StackOverflow è sottoposta a hash, sei disposto a mostrare la tua password con hash ad altri?
Jeon,

5
@ByteCommander. A volte voglio un modo per migliorare le modifiche.
TRiG,

Risposte:


60

Per prevenire attacchi di forza bruta offline.

Anche se non puoi invertire un hash, puoi comunque provare a eseguire l'hashing di tutte le password possibili fino a quando non trovi una corrispondenza e puoi fare milioni di tentativi al secondo con un buon hardware e accesso locale al file.

Se il file disponesse delle 644autorizzazioni, chiunque abbia effettuato l'accesso al sistema, anche in una sessione ospite, sarebbe in grado di copiare questo file dal computer (su una chiavetta USB o in remoto tramite scp) e tentare un attacco di forza bruta offline , senza lasciare alcuna prova di ciò sul tuo computer .


Si noti che le autorizzazioni su Ubuntu in realtà 640non sono 600:

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

Questo non importa molto, dal momento che non ci sono ancora autorizzazioni per gli altri e, per impostazione predefinita, nessuno è nel shadowgruppo.


Inizialmente, gli hash erano archiviati /etc/passwd(ed è per questo che si chiama passwd), come quando fu creata Linux, crackare un hash, persino i tipi deboli usati allora, era praticamente impossibile. Alla fine, però, la potenza di elaborazione è arrivata al punto in cui è diventato possibile craccare un hash, almeno con una password relativamente debole.

Cambiare i permessi di /etc/passwdper 640o 600non avrebbe funzionato, in quanto vi sono molte ragioni legittime per essere in grado di leggere /etc/passwdcome utente normale (la conversione di UID a nomi utente, ricevendo il nome, numero di telefono completo di un utente, ecc), in modo hash sono stati spostati /etc/shadow, cui sono state concesse le 640autorizzazioni. Un campo xal posto dell'hash della password per un utente /etc/passwdè usato per indicare che l'hash /etc/shadowinvece è archiviato .


1
Buona chiamata per la copia del file!
Rinzwind,

1
e non ho bisogno del rappresentante ;-) modifica: hmm l'ha impostato sul mio: P scusa: D edit2 e ora è tornato di nuovo. eh: D
Rinzwind

6
L'ultima volta che ho verificato potresti reinserire la password con hash in / etc / passwd e rimuovere la linea da / etc / shadow e aspettarti di poter accedere. / Etc / shadow esiste in modo che possa essere impostato su 600 per il motivo indicato in questa risposta.
Giosuè,

8
Vale la pena notare che le autorizzazioni per / etc / passwd sono 644. Credo che storicamente, gli hash delle password fossero archiviati qui. Tuttavia, cambiare questo file in 640 avrebbe causato ogni sorta di problemi di compatibilità, quindi invece gli hash delle password sono stati spostati in shadow e rimossi da passwd - questo consente alle altre informazioni in passwd di rimanere leggibili dal mondo mentre gli hash delle password sono tenuti segreti in un file diverso.
Rodney,

4
@Rodney come qualcuno che è cresciuto su BSD 4.3, hai ragione. Gli hash sono stati memorizzati in / etc / passwd. Quando Vax 11/780 era all'avanguardia, un attacco di forza bruta alle password nel file era considerato impossibile. Forse ancora più importante, Internet [Arpanet] era un po 'arretrato assonnato, e cose del genere erano appena prese in considerazione; non c'era ssh- solo rlogin / telnet. Mantenere il file di password 644 significa che utilità come lsnon devono essere setuid root per tradurre da uid a nome.
Mike S,

13

In realtà, / etc / shadow è stato creato per consentire l' allontanamento da un elenco leggibile pubblicamente di nomi utente e password.

Aspetta lì, questa sarà una piccola lezione di storia, prima di arrivare alla risposta effettiva. Se non ti interessa la storia, scorri un po 'verso il basso.

In passato, i sistemi operativi simili a Unix, incluso Linux, generalmente mantenevano le password in / etc / passwd. Quel file era leggibile in tutto il mondo e lo è ancora, perché contiene informazioni che consentono la mappatura, ad esempio tra ID utente numerici e nomi utente. Tali informazioni sono estremamente utili anche per gli utenti ordinari per scopi perfettamente legittimi, quindi avere il file world leggibile è stato di grande beneficio per l'usabilità.

Anche allora, le persone si resero conto che avere le password in chiaro in un file in una posizione ben nota che chiunque potesse accedere poteva leggere liberamente era una cattiva idea. Quindi, in un certo senso, le password sono state sottoposte a hash. Questo è il vecchio meccanismo di hashing della password "cripta", che non viene quasi mai utilizzato sui sistemi moderni, ma spesso supportato per scopi legacy.

Dai un'occhiata a / etc / passwd sul tuo sistema. Vedi quel secondo campo, che dice xovunque? Utilizzava la password con hash per l'account in questione.

Il problema era che le persone potevano scaricare / etc / passwd, o addirittura non scaricarlo, e lavorare per decifrare le password. Questo non è stato un grosso problema mentre i computer non erano particolarmente potenti (Clifford Stoll, in The Cuckoo's Egg , dà, come ricordo, il tempo di hash una password su un sistema di classe PC IBM a metà degli anni '80 in circa un secondo ), ma è diventato un problema all'aumentare della potenza di elaborazione. Ad un certo punto, con un elenco di parole decente, decifrare quelle password è diventato troppo facile. Per motivi tecnici, anche questo schema non può supportare password più lunghe di otto byte.

Sono state fatte due cose per risolvere questo:

  • Passare a funzioni hash più potenti. La vecchia cripta () era sopravvissuta alla sua vita utile e furono ideati schemi più moderni che erano sia a prova di futuro che computazionalmente più forti.
  • Sposta le password con hash in un file non leggibile da chiunque. In questo modo, anche se una funzione di hash della password si è rivelata più debole del previsto, o se qualcuno aveva una password debole per cominciare, c'era un altro ostacolo per un utente malintenzionato di ottenere l'accesso ai valori di hash per cominciare. Non era più gratuito per tutti.

Quel file è / etc / shadow.

Il software che funziona con / etc / shadow è generalmente molto piccolo, altamente focalizzato e tende a ricevere un po 'più di controllo nelle recensioni a causa del potenziale problema. Funziona anche con permessi speciali, che gli permettono di leggere e modificare / etc / shadow, mantenendo gli utenti ordinari incapaci di guardare quel file.

Quindi il gioco è fatto: i permessi su / etc / shadow sono restrittivi (anche se, come già sottolineato, non abbastanza restrittivi come dici) perché lo scopo di quel file è limitare l'accesso ai dati sensibili.

Si suppone che un hash password sia forte, ma se la password si trova tra le prime 500 password negli elenchi Internet , chiunque abbia accesso all'hash sarà comunque in grado di trovare rapidamente la password. La protezione dell'hash impedisce tale attacco semplice e alza la barra per un attacco riuscito dalla semplice sbirciatina alla richiesta di essere già un amministratore di sistema sull'host o passare prima attraverso un attacco di escalation di privilegi. Soprattutto su un sistema multiutente correttamente gestito, entrambi sono significativamente più difficili che guardare solo un file leggibile dal mondo.


mi piace molto il modo in cui descrivi ogni cosa :) (y)
Shubhanshu Vishwakarma,

Terminologia / etimologia: /etc/shadownon contiene "password shadow" (perché non è una cosa). L'intero file è un'ombra di /etc/passwd. Scopri come viene utilizzata la terminologia nel Linux Shadow Password HOWTO : Perché shadow il tuo file passwd? . A differenza di altri usi del termine "Shadow" nell'informatica, tuttavia, non è una copia shadow (come l'ombreggiamento del codice BIOS nella RAM invece che in esecuzione dalla ROM). Il campo in / etc / passwd è un segnaposto, contenente un carattere speciale che significa "l'hash della password reale è in / etc / shadow".
Peter Cordes,

Buona storia ma 1 sec. la password non limitava nemmeno negli anni '80, non quando le password migliori venivano utilizzate da più dell'1% delle persone ciascuna.
Warren Dew,

1
@WarrenDew Non sono sicuro se stai facendo una dichiarazione di fatto o un'opinione. crypt () ha un output a 12 bit e 12 + 64 bit per una password di otto byte (quindi comunemente codificata in base64). Per le password più comuni, sì, probabilmente si potrebbe attaccarli con la forza bruta, ma non ci volle che gran parte di una password per fare di cracking con la forza bruta non fattibile se ogni controllo password ha preso un secondo. Il pre-calcolo di una tabella salata per una sola password richiederebbe all'ordine di un'ora al ritmo di una crittografia al secondo, inoltre si doveva fare i conti con una memoria limitata (40-80 MB era molto in quei giorni).
un CVn il

@PeterCordes Buon punto. Sto cancellando quel passaggio perché non è particolarmente rilevante per rispondere alla domanda del PO.
un CVn il

10

Perché l'autorizzazione per il file / etc / shadow è impostata su 600?

Chi vi ha detto che?

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

Risposta semplice: le autorizzazioni in Linux sono prese sul serio. Non c'è motivo per cui "altri" possano fare qualcosa /etc/shadow. E non c'è motivo per il gruppo "ombra" di scrivergli. E l'esecuzione è fuori dall'ordine.

Tuttavia, poiché tutte le password al suo interno non sono memorizzate in chiaro ma come hash (il che significa che è impossibile calcolare la password originale dall'hash), perché non può essere letta da tutti?

Perché non esiste un solo motivo per farlo.

Gli hash sono a senso unico. Dare a qualcuno l'accesso in lettura gli consente di usare uno script per abusare di questo modo a senso unico: basta elencare qualsiasi parola che si possa immaginare e creare l'hash. Ad un certo punto potrebbe corrispondere alla password. Potrebbe volerci un po 'di tempo però.

Questa risposta è interessante e ha alcune stime sulla forza bruta.


640 è per l'utente normale ?? l'utente del gruppo può leggere il file shadow ??
Shubhanshu Vishwakarma,

Scusate? Il file è 640. Quindi leggi, scrivi per l'utente "root" e leggi per il gruppo "shadow". "ombra" è un gruppo creato dal sistema privilegiato per questo scopo specifico.
Rinzwind,

2

Sfondo importante: /etc/shadowesiste esclusivamente allo scopo di mantenere nascosti gli hash delle password. Nei primi giorni di Unix, venivano archiviati gli hash delle password /etc/passwd. Man mano che i computer diventavano più potenti, le connessioni di rete più persistenti e gli exploit di sicurezza più sofisticati, le persone si resero conto che mantenere gli hash delle password leggibili a parole stava chiedendo problemi. (Non descriverò in dettaglio gli exploit; ci sono già abbastanza buone risposte a riguardo.)

Ma /etc/passwdnon può essere protetto da lettura: è utilizzato da tutti i tipi di programmi per mappare gli ID utente numerici sui nomi utente e per cercare le home directory, le shell predefinite, il nome completo dell'utente (e il numero dell'ufficio ecc. - check out man finger) . Quindi la parte sensibile, l'hash della password, è stata spostata /etc/shadowe il resto è rimasto com'era. Ecco perché /etc/passwd, disprezzare il nome, contiene tutto tranne la password (con hash).


grazie per la tua risposta alla mia domanda, ora ho avuto un'idea completa di / etc / passwd e / etc / shadow file.
Shubhanshu Vishwakarma,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.