As senhas não são armazenadas em segundo lugar. Eles são transformados por uma função e o valor assim produzido, chamado hash
, é armazenado.
Se você efetuar login, a mesma função será executada na sua entrada e o valor gerado será comparado com o valor armazenado no arquivo /etc/shadow
.
A função é de um tipo, que é difícil de inverter. Assim, com o valor em / etc / shadow, você não pode calcular a senha original, e a chave nela não é útil para o login - você precisa da senha.
Com força bruta, você pode tentar gerar essa senha, e para nomes comuns como 123456, password, asdf, secret, 1111
e assim por diante, os valores-sombra já são bem conhecidos e armazenados no chamado rainbow-tables
.
Para evitar ataques com rainbow-tables, a função password pode usar um salt
, que influencia o resultado, o que significa que toda senha usa um salt diferente, armazenado nos dois primeiros bytes da string hash da senha (obrigado para psusi, que me corrigiu), de modo que você precisaria de uma rainbow-table diferente para cada senha, o que não é muito prático - leva muito tempo para gerá-las e é caro.
Não tenho certeza se o ubuntu usa um sal. Podemos esperar por alguém que nos explique, ou você pode gerar o mesmo usuário com a mesma senha em duas máquinas e comparar o valor em / etc / shadow.