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

25

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

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

Shubhanshu Vishwakarma
fonte
Tem certeza de que as permissões /etc/shadowsão 600?
precisa saber é o seguinte
4
Se uma senha da sua conta Stackoverflow estiver com hash, você está disposto a mostrar sua senha com hash para outras pessoas?
Jeon
5
@ByteCommander. Às vezes, quero uma maneira de promover edições.
TRiG 21/09/16

Respostas:

60

Para impedir ataques de força bruta offline.

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

Se o arquivo tiver 644permissões, qualquer pessoa que faça login no seu sistema, mesmo em uma sessão de convidado, poderá copiar esse arquivo do seu computador (para um dispositivo USB ou via remota scp) e tentar um ataque de força bruta offline , sem deixar nenhuma evidência disso no seu computador .


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

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

Isso não importa muito, pois ainda não há permissões para outras pessoas e, por padrão, ninguém está no shadowgrupo.


Originalmente, os hashes eram armazenados /etc/passwd(e é por isso que é chamado passwd), 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 em que quebrar um hash, pelo menos com uma senha relativamente fraca, se tornou viável.

Alterar as permissões de /etc/passwdpara 640ou 600não funcionaria, pois existem muitos motivos legítimos para poder ler /etc/passwdcomo um usuário normal (converter UIDs em nomes de usuário, obter o nome completo do usuário, número de telefone etc.), para que os hashes fossem movidos para /etc/shadow, que recebeu 640permissões. Um xlugar no campo do hash da senha de um usuário /etc/passwdé usado para indicar que o hash desse usuário está armazenado /etc/shadow.

insert_name_here
fonte
1
Boa chamada na cópia do arquivo!
Rinzwind 20/09/16
1
e eu não preciso do representante ;-) edit: hmm ele colocou no meu: desculpe: D edit2 e agora está de volta. eh: D
Rinzwind 20/09/16
6
Por último, verifiquei que você poderia colocar a senha com hash novamente em / etc / passwd e remover a linha de / etc / shadow e espera poder efetuar login. / Etc / shadow existe para que possa ser definido como 600 pelo motivo indicado nesta resposta.
Joshua Joshua
8
Vale a pena notar que as permissões para / etc / passwd são 644. Acredito que, historicamente, os hashes de senha costumavam ser armazenados aqui. No entanto, alterar esse arquivo para 640 teria causado todos os tipos de problemas de compatibilidade; portanto, os hashes de senha foram movidos para sombra e removidos da senha - isso permite que as outras informações na senha permaneçam legíveis mundialmente enquanto os hashes de senha são mantidos em segredo. arquivo diferente.
Rodney
4
@Rodney como alguém que cresceu no BSD 4.3, você está correto. Hashes foram armazenados em / etc / passwd. Quando o Vax 11/780 era o estado da arte, um ataque de força bruta às senhas no arquivo era considerado impossível. Talvez o mais importante seja que a Internet [Arpanet] era uma pequena represa sonolenta e essas coisas dificilmente eram consideradas; não havia ssh-only rlogin / telnet. Manter o arquivo de senhas 644 significa que utilitários como o lsnão precisam ser configurados como root para converter de uid em nome.
Mike S
13

Na verdade, o / etc / shadow foi criado para permitir afastar-se de uma lista publicamente legível de nomes de usuário e senhas.

Espere aí, 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, os sistemas operacionais do tipo Unix, incluindo Linux, geralmente mantinham as senhas em / etc / passwd. Esse arquivo era legível mundialmente e ainda é, porque contém informações que permitem o mapeamento, por exemplo, entre IDs numéricos e nomes de usuários. Essas informações são altamente úteis, mesmo para usuários comuns, para fins perfeitamente legítimos; portanto, ter o mundo dos arquivos legível foi de grande benefício para a usabilidade.

Mesmo naquela época, as pessoas percebiam que ter as senhas em texto sem formatação em um arquivo em um local conhecido que qualquer pessoa que pudesse fazer login pudesse ler livremente era uma má idéia. Então, as senhas foram hash, em certo sentido. Esse é o antigo mecanismo de hash de senha "crypt", que quase nunca é usado em sistemas modernos, mas geralmente é suportado para fins legados.

Dê uma olhada em / etc / passwd no seu sistema. Veja esse segundo campo, que diz em xtoda parte? Ele costumava conter a senha com hash da conta em questão.

O problema era que as pessoas podiam fazer o download do / etc / passwd ou até mesmo não fazer o download e trabalhar para decifrar as senhas. Este não foi um grande problema, enquanto os computadores não eram particularmente poderosos (Clifford Stoll, em The Cuckoo's Egg , dá, pelo que me lembro, o tempo para colocar uma senha em um sistema de classe de PC IBM em meados da década de 1980, em meados da década de 1980, em cerca de um segundo. ), mas tornou-se um problema à medida que o poder de processamento aumentava. Em algum momento, com uma lista decente de palavras, a quebra dessas senhas se tornou muito fácil. Por razões técnicas, esse esquema também não suporta senhas com mais de oito bytes.

Duas coisas foram feitas para resolver isso:

  • Movendo-se para funções de hash mais fortes. A antiga cripta () sobreviveu à sua vida útil, e foram criados esquemas mais modernos, que eram à prova de futuro e computacionalmente mais fortes.
  • Mova as senhas com hash para um arquivo que não possa ser lido por ninguém. Dessa maneira, mesmo que a função de hash da senha tenha sido mais fraca do que o esperado, ou se alguém tivesse uma senha fraca, havia outro obstáculo para um invasor obter acesso aos valores de hash. Não era mais gratuito para todos.

Esse arquivo é / etc / shadow.

O software que trabalha com / etc / shadow geralmente é muito pequeno, altamente focado e tende a receber algum exame extra nas revisões devido ao potencial de problemas. Também é executado com permissões especiais, o que permite ler e modificar / etc / shadow, mantendo os usuários comuns incapazes de ver esse arquivo.

Então, já está: As permissões no / etc / shadow são restritivas (embora, como já apontado, não sejam tão restritivas quanto você afirma), porque o objetivo desse arquivo é restringir o acesso a dados confidenciais.

Um hash de senha deve ser forte, mas se sua senha estiver entre as 500 principais senhas nas listas da Internet , qualquer pessoa com acesso ao hash ainda poderá encontrar a senha rapidamente. Proteger o hash evita esse ataque simples e eleva a barreira para um ataque bem-sucedido, desde a simples espionagem até a exigência de que você já seja um administrador de sistemas no host ou passe primeiro por um ataque de escalação de privilégios. Especialmente em um sistema multiusuário administrado corretamente, ambos são significativamente mais difíceis do que apenas olhar para um arquivo legível pelo mundo.

um CVn
fonte
Eu realmente gosto do jeito que você descreve todas as coisas :) (y)
Shubhanshu Vishwakarma
Terminologia / etimologia: /etc/shadownão contém "senhas-sombra" (porque isso não é uma coisa). O arquivo inteiro é uma sombra de /etc/passwd. Veja como a terminologia é usada no Linux Shadow Password HOWTO : Por que sombrear seu arquivo passwd? . Ao contrário de outros usos do termo "Sombra" na computação, no entanto, não é uma cópia de sombra (como sombrear o código do BIOS na RAM, em vez de executar a partir da ROM). O campo em / etc / passwd é um espaço reservado, contendo um caractere especial que significa "o hash da senha real está em / etc / shadow".
Peter Cordes
Boa história, mas 1 segundo. por senha dificilmente limitava mesmo na década de 1980, não quando as senhas principais eram usadas por mais de 1% das pessoas cada.
Warren Orvalho
1
@WarrenDew Não tenho certeza se você está fazendo uma declaração de fato ou opinião. O crypt () possui uma saída de 12 bits de sal e 12 + 64 bits para uma senha de oito bytes (geralmente codificada em base64). Para senhas comuns, sim, você provavelmente poderia atacá-los pela força bruta, mas não demorou que muito de uma senha para fazer rachaduras pela força bruta inviável se cada verificação de senha levou um segundo. A pré-computação de uma tabela salgada para uma única senha levaria da ordem de uma hora a uma taxa de uma criptografia por segundo, além de você ter que lidar com armazenamento limitado (40 a 80 MB eram muitos naqueles dias).
um CVn
@PeterCordes Good point. Estou excluindo essa passagem porque realmente não é particularmente relevante para responder à pergunta do OP.
um CVn
10

Por que a permissão para o arquivo / etc / shadow está definida como 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 alguma coisa com/etc/shadow . E não há razão para o grupo "sombra" escrever para ele. E a execução está fora de ordem.

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

Porque não há uma única razão para fazê-lo.

Os hashes são unidirecionais. Conceder 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.

Esta resposta é interessante e tem algumas estimativas sobre a força bruta.

Rinzwind
fonte
640 é para usuário normal ?? usuário do grupo pode ler o arquivo shadow?
Shubhanshu Vishwakarma
Desculpe? O arquivo é 640. Portanto, leia, escreva para o usuário "root" e leia para o grupo "shadow". "shadow" é um grupo criado pelo sistema privilegiado para esse fim específico.
Rinzwind 20/09/16
2

Contexto importante: /etc/shadowexiste apenas com o objetivo de manter os hashes de senha ocultos. Nos primeiros dias do Unix, os hashes de senha eram armazenados /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 palavras estava causando problemas. (Não detalharei as façanhas; já existem boas respostas sobre isso.)

Mas /etc/passwdnão podia ser protegido contra leitura: é usado por todos os tipos de programas para mapear IDs de usuário numéricos para nomes de usuários e procurar diretórios pessoais, shells padrão, o nome completo do usuário (e número do escritório etc. - veja man finger) . Portanto, a parte sensível, os hashes da senha, foram movidos para /etc/shadowo restante, e o restante permaneceu como estava. É por isso que /etc/passwd, apesar do nome, contém tudo, exceto a senha (com hash).

alexis
fonte
obrigado pela sua resposta à minha pergunta, agora eu tenho uma idéia completa do arquivo / etc / passwd e / etc / shadow.
Shubhanshu Vishwakarma