Por que a permissão de arquivo para / etc / shadow está configurada para 600?

24

As permissões de /etc/shadow são 600, o que significa que não é legível para ninguém, exceto para root.

No entanto, como todas as senhas dentro dela não são armazenadas em texto não criptografado, mas como hashes (o que significa que é impossível calcular a senha original do hash), por que ela não pode ser lida por todos?

    
por Shubhanshu Vishwakarma 20.09.2016 / 22:29

4 respostas

59

Para evitar ataques de força bruta off-line.

Mesmo que você não consiga reverter um hash, ainda é possível tentar fazer hash de todas as senhas possíveis até encontrar uma correspondência e fazer milhões de tentativas por segundo com um bom hardware e acesso local ao arquivo.

Se o arquivo tivesse 644 permissões, qualquer pessoa que efetuasse login em seu sistema, mesmo em uma sessão de convidado, seria capaz de copiar esse arquivo do seu computador (seja para um USB stick ou remotamente via scp ) e tente um ataque de força bruta offline, sem deixar nenhuma evidência disso em seu computador .

Observe que as permissões no Ubuntu são, na verdade, 640 , não 600 :

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

Isso não importa muito, já que ainda não há permissões para outros e, por padrão, ninguém está no grupo shadow .

Originalmente, os hashes eram armazenados em /etc/passwd (é por isso que é chamado passwd ), já que quando o Linux foi criado, quebrar um hash, mesmo os tipos fracos usados na época, era praticamente impossível. Eventualmente, porém, o poder de processamento avançou ao ponto de quebrar um hash, pelo menos de uma senha relativamente fraca, tornou-se viável.

A alteração das permissões de /etc/passwd para 640 ou 600 não funcionaria, pois há muitos motivos legítimos para ler /etc/passwd como usuário normal (convertendo UIDs em nomes de usuários, obtendo um usuário nome completo, número de telefone, etc), então os hashes foram movidos para /etc/shadow , que recebeu 640 de permissões. Um x no lugar do campo hash de senha para um usuário em /etc/passwd é usado para indicar que o hash desse usuário está armazenado em /etc/shadow .

    
por insert_name_here 20.09.2016 / 22:41
12

Na verdade, o / etc / shadow foi criado para permitir a remoção de uma lista publicamente legível de nomes de usuários e senhas.

Aguarde, isso será um pouco de uma lição de história, antes de chegarmos à resposta real. Se você não se importa com a história, basta rolar um pouco para baixo.

Antigamente, sistemas operacionais baseados em Unix, incluindo o Linux, geralmente mantinham as senhas em / etc / passwd. Esse arquivo era legível por todo o mundo, e ainda é, porque contém informações que permitem o mapeamento, por exemplo, entre IDs de usuário numérico e nomes de usuário. Essa informação é altamente útil até mesmo para usuários comuns para propósitos perfeitamente legítimos, então ter o mundo legível em arquivos foi de grande benefício para a usabilidade.

Mesmo naquela época, as pessoas perceberam que ter as senhas em texto simples em um arquivo em um local bem conhecido que qualquer pessoa que pudesse fazer login podia ler livremente era uma má ideia. Então, as senhas foram divididas, de certo modo. Esse é o antigo mecanismo de hashing de senha "crypt", que quase nunca é usado em sistemas modernos, mas geralmente é suportado para fins de legado.

Dê uma olhada em / etc / passwd no seu sistema. Veja o segundo campo, que diz x em todos os lugares? Usava a senha com hash da conta em questão.

O problema era que as pessoas podiam baixar o / etc / passwd, ou até mesmo não baixá-lo, e trabalhar no cracking das senhas. Este não foi um grande problema, enquanto os computadores não eram particularmente poderosos (Clifford Stoll, em O ovo do cuco , dá, como lembro, o tempo para colocar uma senha em um sistema de classe IBM PC no meados da década de 1980, cerca de um segundo), mas se tornou um problema com o aumento do poder de processamento. Em algum momento, com uma lista de palavras decente, quebrar essas senhas se tornou muito fácil. Por motivos técnicos, esse esquema também não suportava senhas com mais de oito bytes.

Duas coisas foram feitas para resolver isso:

  • Movendo para funções hash mais strongs. A velha cripta () havia sobrevivido à sua vida útil, e foram criados esquemas mais modernos que eram tanto à prova do futuro quanto computacionalmente mais strongs.
  • Mova as senhas com hash para um arquivo que não seja legível por qualquer pessoa. Dessa forma, mesmo se uma função hash de senha fosse mais fraca do que o esperado, ou se alguém tivesse uma senha fraca para começar, havia outro obstáculo para um invasor obter acesso aos valores de hash para começar. Não era mais livre para todos.

Esse arquivo é / etc / shadow.

O software que trabalha com o / etc / shadow é geralmente muito pequeno, altamente focado e tende a receber algum escrutínio extra nas revisões devido ao potencial de problemas. Ele também roda com permissões especiais, o que permite que ele leia e modifique o arquivo / etc / shadow, enquanto mantém usuários comuns incapazes de ver o arquivo.

Então você tem: As permissões em / etc / shadow são restritivas (embora, como já foi apontado, não sejam tão restritivas quanto você declara) porque todo o propósito desse arquivo é restringir o acesso a arquivos sensíveis. dados.

Um hash de senha deve ser strong, mas se sua senha estiver nas listas Top 500 Senhas na Internet , qualquer pessoa com acesso ao hash ainda poderá encontrar a senha rapidamente. Proteger o hash impede esse simples ataque e eleva o padrão de um ataque bem-sucedido, desde a simples observação até a requisição de um administrador do sistema no host ou de um ataque de escalonamento de privilégios primeiro. Especialmente em um sistema multiusuário corretamente administrado, ambos são significativamente mais difíceis do que apenas olhar para um arquivo legível pelo mundo.

    
por Michael Kjörling 21.09.2016 / 22:29
10
  

Por que a permissão do arquivo / etc / shadow está definida para ser 600?

Quem te disse isso?

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

Resposta simples: as permissões no Linux são levadas a sério. Não há razão para que "outros" façam algo com /etc/shadow . E não há razão para a "sombra" do grupo escrever para ela. E a execução está fora da ordem.

  

No entanto, como todas as senhas dentro dela não são armazenadas em texto não criptografado, mas como hashes (o que significa que é impossível calcular a senha original do hash), por que ela não pode ser lida por todos?

Porque não há um único motivo para isso.

Hashes são unidirecionais. Dar acesso de leitura a alguém possibilita que ele use um script para abusar dessa maneira: apenas liste qualquer palavra que você possa imaginar e crie o hash. Em algum momento, pode corresponder à senha. Pode demorar um pouco também.

Essa resposta é interessante e tem algumas estimativas sobre o uso de força bruta.

    
por Rinzwind 20.09.2016 / 22:39
2

Plano de fundo importante: /etc/shadow existe apenas com o objetivo de manter os hashes de senha ocultos. Nos primeiros dias do Unix, os hashes de senha eram armazenados em /etc/passwd . À medida que os computadores se tornaram mais poderosos, as conexões de rede mais persistentes e as explorações de segurança mais sofisticadas, as pessoas perceberam que manter os hashes de senha legíveis por palavra estava causando problemas. (Eu não vou detalhar as façanhas; já há bastante boas respostas sobre isso.)

Mas /etc/passwd não pôde ser protegido por leitura: Ele é usado por todos os tipos de programas para mapear IDs de usuários numéricos para nomes de usuário e procurar diretórios de usuário, shells padrão, nome completo do usuário (e número do escritório etc. - confira man finger ). Assim, a parte sensível, os hashes de senha, foi movida para /etc/shadow e o restante permaneceu como estava. É por isso que /etc/passwd , desprezam o nome, contém tudo exceto a senha (hash).

    
por alexis 21.09.2016 / 22:17