Qual é o objetivo dos arquivos / etc / shadow e shadow cache no sistema operacional Linux?

9

Qual é o objetivo do arquivo / etc / shadow no sistema operacional Linux? Além disso, é o mesmo para clientes SUSE? Há um arquivo de cache de sombra que é mantido. Qual é o objetivo disso?

Ashitosh
fonte

Respostas:

16

Desde o início, os sistemas operacionais Unix e Unix-style (incluindo Linux) sempre armazenaram senhas como hashes criptográficos (1). Esses hashes foram originalmente armazenados /etc/passwd, mas esse arquivo precisava ser legível por todo o mundo para disponibilizar as informações para outros fins - é ls -lnecessário apenas ler /etc/passwdpara converter um ID de usuário numérico de cada proprietário de arquivo em seu nome de usuário para exibição. No entanto, ter as senhas com hash em um arquivo legível pelo mundo permitiu que usuários mal-intencionados obtivessem facilmente esses hashes e tentassem gerar senhas utilizáveis ​​(2) para as contas de outros usuários.

Para evitar isso, as senhas com hash acabaram sendo movidas para um arquivo legível apenas pela raiz (e ocasionalmente por 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 :

  1. Pedantic, eu sei, mas as senhas armazenadas não são criptografadas. Eles são hash usando um algoritmo de hash criptograficamente seguro (pelo menos no momento em que foi gravado). As principais distinções relevantes aqui são que os hashes são de tamanho fixo (o tamanho do texto criptografado varia de acordo com o tamanho do texto criptografado) e não reversível (o texto criptografado pode ser descriptografado; o texto em hash não).

  2. Como os hashes são de comprimento fixo, há um número infinito de entradas que corresponderão a qualquer representação de hash. Um invasor pode, portanto, encontrar uma senha de trabalho que não seja necessariamente a mesma que a senha do usuário proprietário - embora isso seja muito improvável, dado o tamanho dos hashes criptográficos modernos.

Dave Sherohman
fonte
Acho que no último parágrafo você deve dizer "finito" e não "infinito".
## phreinhe #
4
@phunehehe Não, o conjunto de entrada (todas as senhas possíveis) é infinito, mas a saída (todos os valores possíveis de hash) é finita.
Phihag #
@phihag Ah eu vejo. Mas um hash seria muito mais tempo do que qualquer senha humano-rememberable qualquer maneira :)
phunehehe
1
O número de entradas que levam a qualquer colisão não é infinito, porque o comprimento das seqüências que podem ser hash por qualquer algoritmo é finito . Veja por exemplo stackoverflow.com/questions/17388177/…
MariusMatutiae 4/15/15
1
@MariusMatutiae Suponha uma implementação de hash realmente ruim que trunca em 3 caracteres. A senha correta é "abc". As entradas "abcd", "abcde", "abcdef" etc. também produzirão o mesmo hash de saída e, portanto, também serão aceitas. Há um número infinito de strings que começam com "abc" e colidem trivialmente. (Note que nós estamos basicamente apenas discordando aqui sobre se significa "a entrada" antes ou depois de truncamento é aplicada.)
Dave Sherohman
6

O /etc/shadowarquivo foi criado por motivos de segurança e mantém a senha criptografada de cada usuário.

Originalmente, a senha criptografada era armazenada em /etc/passwd. /etc/passwdTinha que ser legível mundialmente, para que o sistema pudesse mapear os IDs dos usuários para os nomes dos usuários e para que os usuários pudessem descobrir informações um sobre o outro, por exemplo, o diretório inicial do outro usuário ou seu número de telefone, que era tradicionalmente armazenado no campo "gecos" e exibido pelo utilitário "finger".

Mas então as pessoas perceberam que este era um problema de segurança. Qualquer pessoa com tempo suficiente pode fazer o que é chamado de ataque de força bruta , gerando programaticamente senhas criptografadas para todas as senhas possíveis. Se o invasor fez isso sem realmente tentar fazer login via telnetou ssh, o sistema não sabia que estava sendo atacado.

Portanto, a senha criptografada foi movida para o recém-criado /etc/shadow, que é legível apenas pela raiz.

Ele também contém outras informações que o /etc/passwdarquivo não suportava relacionadas à conta e senha do usuário, por exemplo, quando a senha foi alterada pela última vez e quando expirará.

Consulte man 5 shadow( versão web ) para obter detalhes completos sobre o formato do arquivo.


Não sei dizer se é o mesmo para o SUSE, sem saber com qual versão do SUSE você está lidando. Por exemplo, seu sistema SUSE pode usar o Blowfish em vez do MD5.

Você também sugeriu que estava misturando seu /etc/shadowarquivo com um sistema executando uma distribuição Linux diferente, mas não disse qual era a outra distribuição.

Consulte Problemas ao migrar o arquivo shadow do SuSE 9.3 para o Ubuntu Server x86_64, por exemplo.

Para tentar descobrir, abra /etc/shadowe veja se o campo de senha criptografada começa com $1$ou $2$. Se ele contiver $1$, é MD5 e é compatível com a maioria das outras distribuições. Se houver $2$, provavelmente é o Blowfish de acordo com os arquivos de sombra do Blowfish no Debian .

Se você estiver usando o Ubuntu, o primeiro resultado de pesquisa do Google para o blowfish do Ubuntu pode ser um bom ponto de partida.

Mikel
fonte
3

Os usuários estão listados no /etc/passwdarquivo. Este arquivo contém muitas informações usadas pelo systemm, não apenas para permitir que os usuários efetuem login.

Cada linha corresponde a uma entrada do usuário e campos diferentes são separados por dois pontos. O primeiro arquivado é o login, seguido pela senha correspondente.

As senhas criptografadas costumavam ser armazenadas neste campo. No entanto, o /etc/passwdarquivo deve ser legível por todos no sistema, para que a criptografia não impeça ataques de força bruta, como foi dito pelo @Mikel. A solução foi para mover essas senhas criptografadas em raiz só de arquivo legível: /etc/shadow.

Assim, /etc/shadowcontém as senhas criptografadas dos usuários do sistema. O sistema sabe que tem de verificar as senhas neste arquivo quando os campos de senha em /etc/passwdconter uma x sozinho (que significa " atravessar para / etc / shadow")

jopasserat
fonte
1
Observe que as senhas armazenadas em /etc/passwd/ foram ainda hash exatamente da mesma maneira que seriam se estivessem dentro /etc/shadow. Você realmente não diz que as senhas /etc/passwdseriam em texto simples, mas seria fácil para alguém não familiarizado com o manuseio de senhas * nix interpretar erroneamente sua resposta como implicando isso.
Dave Sherohman 6/02
Obrigado pelo seu comentário que me ajudou a melhorar minha resposta.
Eu não acho que isso xrealmente significa alguma coisa. Está lá apenas como um hash inválido (que não corresponde a nenhuma senha). Alguns sistemas usam !.
User1686
3

Vamos ver se consigo obter todos os votos positivos no mundo, desde que escrevi o que se tornou o Linux Shadow Password Suite em 87;)

O /etc/passwdarquivo original continha um hash baseado em DES modificado da senha de texto não criptografado. No momento em que a crypt()função foi criada, acreditava-se (e isso foi afirmado pelos criadores do sistema operacional UNIX) que ataques contra o hash da senha seriam inviáveis, devido ao número de senhas possíveis e ao uso de uma placa de 12 bits. (4.096 valores possíveis) "sal". Cada senha de texto não criptografado possível tinha 4.096 valores possíveis de hash e, com resultado de 64 bits, resultou em um total de 2 ^ 72 possíveis hashes de senha.

Como outro pôster mencionado, /etc/passwdtambém foi usado por vários utilitários para mapear entre nomes de usuário e valores de UID (o /etc/grouparquivo fornece a função análoga para grupos) e que exigia que fosse legível pelo mundo.

Na década de 1980, tornou-se óbvio que os ataques de dicionário contra o hash de senha armazenado no /etc/passwdarquivo estavam se tornando viáveis ​​e /etc/shadowforam introduzidos na AT&T UNIX em uma versão inicial do System V. desde então esquecemos, mas foi definitivamente um lançamento inicial do System V, provavelmente o SVR3.2.

O que a AT&T fez, e o que eu implementei para o SCO Xenix (o SCO Xenix original, e não o SCO Xenix mais tarde) em 87 que acabou sendo usado no Linux, foi simplesmente mover a senha hash para /etc/shadow. Isso impediu o ataque drive-by, onde um usuário sem privilégios adquiriu uma cópia /etc/passwde executou um ataque contra ele. Se você está familiarizado com o motivo de eu ter escrito o Shadow em primeiro lugar, solicitei que um usuário baixasse meu /etc/passwdarquivo via UUCP nos dias em que ainda usávamos o UUCP para praticamente tudo.

No momento em que o Linux foi criado e utilizado amplamente, havia um número muito grande de ferramentas para atacar hashes de senhas. Reimplementações de alto desempenho decrypt() reimplementações de eram uma avenida e os ataques baseados em dicionário por meio de ferramentas como Crack e libcrack eram outros. A porta inicial foi feita por Nate Holloway e Floria La Roche (eu dei crédito a eles, não sei se alguém fez o trabalho antes deles).

Eventualmente, o uso de crypt()hashes com base, mesmo em um arquivo protegido, não era mais seguro e as MD5alterações no hash com base no original foram feitas. MD5eventualmente, foi considerado muito fraco e hashes mais recentes foram usados.

Em teoria, um hash forte o suficiente poderia ser armazenado /etc/passwd. A baixa segurança operacional significa que muitos sistemas têm seus /etc/shadowarquivos disponíveis através de vários vetores de ataque - "Eu roubei os arquivos de backup" é provavelmente o mais fácil.

Julie em Austin
fonte