Você já se perguntou como o Linux gerencia com eficiência um ambiente multiusuário? Neste artigo, explicamos como o Linux armazena e gerencia senhas e logins de usuário.
Explorando o arquivo / etc / passwd
Quando um usuário insere um nome de usuário e uma senha, o Linux verifica a senha inserida em uma entrada em vários arquivos no diretório “/ etc”.
O “/ etc / passwd” é um dos arquivos mais importantes que armazena detalhes do usuário.
A última entrada neste arquivo corresponde a usuários “carbono”. Existem vários campos de informação separados por dois pontos (:).
carbon: nome do usuário ao qual esta entrada corresponde.x: indica que existe uma senha para o usuário. No entanto, a senha é armazenada no arquivo “/ etc / shadow”. Se em vez dexmostra um!símbolo, isso indica que não existe uma senha.1000: ID de usuário deste usuário.1000: ID de grupo do grupo ao qual este usuário pertence.carbon, , ,: indicando vários campos de informação, incluindo nome completo e números de telefone. Aqui, nenhum número de telefone foi fornecido./home/carbon: localização do diretório inicial atribuído a este usuário./bin/bash: shell padrão atribuído a este usuário.
Vamos criar outro usuário para o qual alguns números de telefone foram armazenados. O usuário “plutão” é adicionado ao sistema usando o adduser comando.

Olhando para o arquivo “etc / passwd” novamente, podemos ver as informações completas do usuário “pluto”. O campo que possui uma lista separada por vírgulas de nomes completos e números é chamado de “campo GECOS”.

Sempre que um usuário é criado, os valores do diretório inicial e do shell padrão que precisam ser atribuídos são especificados no arquivo “/etc/adduser.conf”.

IDs de usuário para usuários criados começam em 1000 e vão até 59999.
O usuário “carbon” foi capaz de visualizar as entradas do arquivo “/ etc / passwd” simplesmente usando o cat comando. Vamos dar uma olhada em suas permissões.

Apenas o usuário “root” pode gravar no arquivo. Outros usuários podem apenas ler o arquivo. Como esse arquivo pode ser lido por todos, não é ideal armazenar senhas aqui. Em vez disso, é armazenado em outro arquivo chamado “/ etc / shadow”.
Explorando o arquivo / etc / shadow
Agora vamos tentar visualizar a senha armazenada para os usuários “carbono” e “pluto” no arquivo ”/ etc / shadow”.

Dando uma olhada nas permissões para o arquivo “/ etc / shadow”, podemos ver que apenas o usuário “root” pode ler e gravar no arquivo. Além disso, apenas os membros do grupo “sombra” podem ler o arquivo. Na realidade, o grupo “sombra” está vazio, mas é sintaticamente necessário para este arquivo.

Fazendo login como “root”, podemos ver as últimas dez linhas de “/ etc / shadow”. Para cada entrada em “/ etc / passwd,” há uma entrada correspondente neste arquivo. O formato será assim:
pluto:$6$JvWfZ9u....:18283:0:99999:7:::

Nesse arquivo, também, cada entrada tem vários campos separados por dois pontos (:). Vamos decifrar a entrada do usuário “plutão”.
pluto: nome do usuário ao qual esta entrada corresponde.$6$JvWfZ9u.$yGFIqOJ....: A senha de usuário com hash armazenada junto com as informações sobre o algoritmo de hash usado. Além disso, um valor salt é usado junto com a senha de texto simples para gerar o hash da senha.
{ plaintext password, salt} -> hashed password
Vamos processar o conteúdo neste campo. o $ símbolo é usado como um delimitador para separar três campos.
$6 $JvWfZ9u. $yGFIqOJ....
$6: o algoritmo de hash usado. Aqui está a lista de algoritmos de hash em potencial.- $ 1: MD5
- $ 2a: Blowfish
- $ 2y: Eksblowfish
- $ 5: SHA-256
- $ 6: SHA-512
$JvWfZ9u.: valor de sal.$yGFIqOJ....: senha com hash.
O valor de hash resultante é armazenado como a senha criptografada de um usuário. O valor de sal é exclusivo para cada usuário. Mesmo que dois usuários tenham a mesma senha de texto simples, o uso de um salt exclusivo geraria um valor hash exclusivo.
Seguindo com os campos restantes nesta entrada,
18283: Indica o número de dias desde 1º de janeiro de 1970 em que a senha foi alterada pela última vez0: este campo é utilizado para indicar o número de dias após os quais a senha pode ser alterada. Um valor 0 significa que a senha pode ser alterada a qualquer momento.99999: este campo indica o número de dias após os quais a senha deve ser alterada. Um valor de 99999 indica que um usuário pode reter a senha pelo tempo que desejar.7: se a senha for configurada para expirar, este campo indica o número de dias para avisar o usuário sobre a expiração da senha.: : :Mais três campos fazem parte desta entrada, embora estejam vazios aqui. O primeiro indica o número de dias de espera após o vencimento da senha, após os quais a conta será desabilitada. O segundo indica o número de dias desde 1º de janeiro de 1970 que uma conta foi desativada. O terceiro campo é reservado para uso futuro. Os campos vazios indicam que a senha existente para este usuário não expirou e não está definida para expirar em breve.
Os últimos sete campos relativos à validade da senha são considerados coletivamente como contendo informações sobre a “Política de vencimento da senha”.
Os valores padrão correspondentes à “Política de vencimento da senha” são especificados no arquivo “/etc/login.defs”. Esses valores podem ser alterados para um usuário usando o change comando.

E as informações do grupo?
As informações e senhas do usuário são armazenadas nos arquivos “/ etc / passwd” e “/ etc / shadow”. Da mesma forma, as informações do grupo são armazenadas no arquivo “/ etc / group”.

Destacados acima estão os grupos pertencentes aos usuários “carbono” e “plutão”. Quando um usuário é criado no Linux, esse usuário é imediatamente atribuído a um grupo com o mesmo nome do usuário.
Os membros de um grupo também podem compartilhar uma senha de grupo para atividades relacionadas ao grupo. O valor de x indica que as informações de senha desse grupo estariam no arquivo “/ etc / gshadow”.
No entanto, o acesso a “/ etc / gshadow” é restrito ao usuário “root”.

O usuário “root” pode visualizar as entradas de “/ etc / gshadow”, que é semelhante a “/ etc / shadow”. Olhando para a entrada do grupo “carbono”, podemos ver que o segundo campo tem um valor de !, o que indica que não existe uma senha para este grupo.

Juntando tudo
Quando um usuário deseja fazer login, o hash da senha digitada é encontrado usando o valor salt desse usuário em “/ etc / shadow”. Em seguida, ele é comparado com o hash armazenado. Se os valores corresponderem, o acesso será concedido ao usuário.
- Como redefinir a senha root no Linux
- Como gerenciar sua senha de usuário a partir do terminal no Linux
Apoie o nosso trabalho ❤️
Se você gostou deste artigo, considere deixar uma gorjeta para nos ajudar a continuar publicando conteúdo de qualidade.




















