# Passwd

passwd é uma ferramenta na maioria dos sistemas operacionais Unix e tipo Unix usada para alterar a senha de usuário. A senha fornecida pelo usuário é executada por meio de uma função de derivação de chave para criar uma versão hash da nova senha, que é salva. Apenas a versão hash é armazenada e a senha fornecida não é salva por razões de segurança.
Quando o usuário entra no sistema (logon), a senha fornecida pelo usuário durante o processo de autenticação é processada por meio da mesma função de derivação de chave e a versão hash resultante é comparada com a versão salva. Se os hashes são idênticos, a senha fornecida é considerada correta e o usuário é autenticado. Na teoria, é possível que duas senhas diferentes produzam o mesmo hash. Entretanto, funções hash criptográficas são projetadas de tal forma que encontrar qualquer senha que produza o mesmo hash é muito difícil e praticamente inviável, desta forma se o hash produzido for compatível com o armazenado, o usuário pode ser autenticado.
O comando passwd pode ser usado para alterar senhas de contas locais e, na maioria dos sistemas, também pode ser usada para alterar senhas gerenciadas em um mecanismo de autenticação distribuído como NIS, Kerberos ou LDAP.Para alterar senhas armazenadas em LDAP é utilizado o comando ldappasswd.
O programa passwd apareceu inicialmente na versão 6 do Unix da AT&T juntamente com o arquivo /etc/passwd.

## Arquivo passwd

O arquivo /etc/passwd é um banco de dados de informações baseadas em texto sobre os usuários que podem logar no sistema ou outras identidades de usuários do sistema operacional que possuem processos em execução.
Em muitos sistemas operacionais este arquivo é apenas um de muitos back-ends possíveis para o serviço de nomes passwd mais geral.
O nome do arquivo origina-se de uma de suas funções iniciais uma vez que continha os dados usados para verificar senhas de contas de usuários. Entretanto, em sistemas Unix modernos a informação de senha sensível à segurança é, em vez disso, armazenada em um arquivo diferente usando senhas sombra, ou outras implementações de banco de dados.
O arquivo /etc/passwd normalmente possui permissões de sistema de arquivos que o permite ser legível por todos os usuários do sistema (permissão global de leitura), apesar de que ele pode ser modificado apenas pelo super usuário ou por meio do uso de alguns comandos privilegiados de propósito especial.
O arquivo /etc/passwd é um arquivo de texto com um registro por linha, em que cada um descreve uma conta de usuário. Cada registro consiste de sete campos separados por dois pontos. A ordenação dos registros dentro do arquivo geralmente não é importante.
Um exemplo de registro pode ser:
Os campos, na ordem da esquerda para a direita, são:
* Nome do usuário: uma cadeia de caracteres que um usuário pode digitar quando loga-se no sistema operacional: o nome de login. Deve ser única entre os usuários listados no arquivo.
* Informação usada para validar uma senha de usuário. Na maioria das utilizações modernas, este campo é normalmente definido para "x"(ou "*", ou algum outro indicador) com a informação de senha real sendo armazenada em um arquivo de senha sombra separado. Em sistemas Linux, definir este campo como um asterisco ("*") é uma maneira comum de desabilitar logins diretos a uma conta enquanto ainda preserva seu nome, entretanto outro valor possível é "*NP*" que indica o uso de um servidor NIS para obter a senha. Sem o sombreamento de senha em efeito, este campo normalmente conteria um hash criptográfico da senha do usuário (em combinação com um sal).
* Número identificador do usuário, usado pelo sistema operacional para propósitos internos.
* Número identificador de grupo, que identifica o grupo primário do usuário. Todos os arquivos que são criados por este usuário podem ser inicialmente acessíveis por este grupo.
* Campo Gecos, comentário que descreve a pessoa ou conta. Normalmente, ele é composto de valores separados por vírgulas, incluindo o nome completo do usuário e detalhes de contato.
* Caminho para o diretório home do usuário.
* Programa que é iniciado toda vez que o usuário loga no sistema. Para um usuário interativo, este é normalmente um dos interpretadores de linha de comando (shells).

## Arquivo shadow

/etc/shadow é usado para incrementar o nível de segurança das senhas ao restringir o acesso de todos os usuários, porém altamente privilegiados, a dados de hash de senha. Normalmente, estes dados são armazenados em arquivos de propriedade de e acessíveis apenas pelo super usuário.
Os administradores de sistemas podem reduzir a probabilidade de ataques de força bruta tornando a lista de hashes de senha ilegíveis por usuários sem privilégios. A maneira óbvia de fazer iso é tornar o banco de dados passwd propriamente dito legível apenas pelo usuário root. Contudo, isto pode restringir o acesso a outros dados no arquivo, como mapeamentos nome_de_usuário-para-id_de_usuário, o qual quebraria muitas utilidade e provisões existentes. Uma solução é um arquivo de senhas "sombra" (shadow) para armazenar os hashes de senha separados de outros dados no arquivo passwd legível globalmente. Para arquivos locais, ele normalmente é o /etc/shadow nos sistemas Linux e Unix, ou o /etc/master.passwd em sistemas BSD. Cada um é legível apenas pelo root. (Acesso como root aos dados é considerável aceitável, pois em sistemas com o modelo de segurança tradicional "root todo poderoso" o usuário root é capaz de obter as informações de outras formas, em qualquer caso) Virtualmente, todos os sistemas operacionais tipo Unix recentes usam senhas "sombreadas".