Desde o início, os sistemas operacionais Unix e Unix (incluindo o Linux) sempre armazenaram senhas como hashes criptográficos (1). Esses hashes foram originalmente armazenados em /etc/passwd
, mas esse arquivo precisava ser legível para disponibilizar as informações para outros fins - até mesmo um simples ls -l
precisa ler /etc/passwd
para converter o ID do usuário numérico de cada proprietário de arquivo ao seu nome de usuário para exibição. No entanto, ter as senhas com hash em um arquivo legível para o mundo permitiu que usuários mal-intencionados obtivessem facilmente esses hashes e tentassem gerar senhas úteis (2) para as contas de outros usuários.
Para evitar isso, as senhas hash foram eventualmente movidas para um arquivo legível somente pelo root (e ocasionalmente um grupo privilegiado de administradores), /etc/shadow
. Isso oculta os hashes dos usuários normais do sistema, mantendo-os disponíveis para fins de autenticação do usuário.
Notas :
-
Pedante, eu sei, mas as senhas armazenadas não são criptografadas . Eles são criptografados usando um algoritmo hash criptograficamente seguro (pelo menos a partir do momento em que foi escrito). As principais distinções relevantes aqui são que os hashes são de comprimento fixo (a duração do texto criptografado varia com base na duração do texto que foi criptografado) e não reversível (o texto criptografado pode ser descriptografado; o texto com hash não pode).
-
Como os hashes são de comprimento fixo, há um número infinito de entradas que corresponderão a qualquer representação com hash. Um invasor pode, portanto, encontrar uma senha de trabalho que não seja necessariamente igual à senha do usuário proprietário - embora isso seja muito improvável, dado o tamanho dos hashes de criptografia modernos.