Qual é a diferença entre 'passwd' e 'chpasswd'?

14

Eu li a descrição desses comandos em um livro,
passwd:

Altera a senha de um usuário existente.

chpasswd:

Lê um arquivo de pares de nome e senha de login e atualiza as senhas.

Parece que esses comandos estão fazendo os mesmos trabalhos. Existe alguma diferença entre eles?

EDITAR:

Quero saber quando os usamos quais arquivos são alterados. Eles mudam o mesmo arquivo ou arquivo diferente? Se eles mudarem arquivos diferentes, o que são?

metarose
fonte
2
/etc/passwordcontém informações da conta do usuário. /etc/shadowcontém senhas criptografadas. Acredito que esses são os únicos arquivos relevantes. Você pode alterar uma senha editando manualmente esses arquivos, mas seria muito estranho.
SauceCode

Respostas:

18

De man chpasswd:

'Este comando deve ser usado em um ambiente de sistema grande, onde muitas contas são criadas ao mesmo tempo.'

passwd é (na minha experiência) normalmente usado de forma interativa para um único usuário.

SauceCode
fonte
7

Veja as páginas de manual para os dois:

NOME

    chpasswd - atualiza senhas no modo em lote

SINOPSE

    chpasswd [opções]

DESCRIÇÃO

    O chpasswdcomando lê uma lista de pares de nome de usuário e senha a partir da entrada padrão e usa essas informações para atualizar um grupo de usuários existentes. Cada linha tem o formato:

       usuário senha


NOME

    passwd - altera a senha do usuário

SINOPSE

    passwd [opções] [LOGIN]

DESCRIÇÃO

    O passwdcomando altera senhas para contas de usuário. Um usuário normal só pode alterar a senha da sua própria conta, enquanto o superusuário pode alterar a senha de qualquer conta.  passwdtambém altera a conta ou o período de validade da senha associada.

MrRolling
fonte
7

Em poucas palavras:

  • passwdverifica se o STDIN (descritor de arquivo 0) está conectado ao terminal usando isatty(0). Caso contrário, passwdseria possível salvá-lo, ou seja, você só pode trabalhar passwdinterativamente

  • chpasswd, por outro lado, foi projetado para ler (nome de usuário e) senha do STDIN e é chamado de modo em lote (cria / atualiza várias credenciais do usuário de uma só vez). Ele lê senhas (em texto não criptografado por padrão) e nome de usuário de STDIN, fornecidos no formato user_name:password, com nova linha separando as entradas

heemail
fonte
0

Eu descobri que embora

echo user:password | chpasswd

funciona para alguns sistemas operacionais, mas alguns sistemas operacionais, como o debian9,10, mostram um erro, can not connect to /var/run/nscd/socketpois usam /etc/nsswitch.conf para determinar onde armazenar a senha.

Por outro lado, o passwdcomando parece não precisar de shell interativo,

(echo user; echo password) | passwd

funciona para mim tanto no host físico quanto no contêiner, para vários sistemas operacionais (ubuntu xenial-bionic, debian9-10, centos75-76, coreos1855-2135)

osexp2003
fonte