¿Cuál es la diferencia entre 'passwd' y 'chpasswd'?

14

Leí la descripción de estos comandos de un libro,
passwd:

Cambia la contraseña de un usuario existente.

chpasswd:

Lee un archivo de pares de nombre de usuario y contraseña y actualiza las contraseñas.

Parece que estos comandos hacen los mismos trabajos. ¿Hay alguna diferencia entre ellos?

EDITAR:

Quiero saber cuándo los usamos qué archivos cambian. ¿Cambian el mismo archivo o un archivo diferente? Si cambian diferentes archivos, ¿qué son?

metarose
fuente
2
/etc/passwordcontiene información de la cuenta del usuario. /etc/shadowcontiene contraseñas encriptadas. Creo que esos son los únicos archivos que son relevantes. Puede cambiar una contraseña editando manualmente esos archivos, pero sería muy incómodo.
SauceCode

Respuestas:

18

De man chpasswd:

'Este comando está destinado a ser utilizado en un entorno de sistema grande donde se crean muchas cuentas al mismo tiempo'.

passwd (en mi experiencia) se usa normalmente de forma interactiva para un solo usuario.

SauceCode
fuente
7

Consulte las páginas de manual para ambos:

NOMBRE

    chpasswd: actualiza las contraseñas en modo por lotes

SINOPSIS

    chpasswd [opciones]

DESCRIPCIÓN

    El chpasswdcomando lee una lista de pares de nombre de usuario y contraseña de la entrada estándar y utiliza esta información para actualizar un grupo de usuarios existentes. Cada línea tiene el formato:

       usuario Contraseña


NOMBRE

    passwd - cambia la contraseña de usuario

SINOPSIS

    passwd [opciones] [INICIAR SESIÓN]

DESCRIPCIÓN

    El passwdcomando cambia las contraseñas de las cuentas de usuario. Un usuario normal solo puede cambiar la contraseña de su propia cuenta, mientras que el superusuario puede cambiar la contraseña de cualquier cuenta.  passwdTambién cambia el período de validez de la cuenta o contraseña asociada.

MrRolling
fuente
7

En una palabra:

  • passwdcomprueba si el STDIN (descriptor de archivo 0) está conectado al terminal, utilizando isatty(0). Si no, passwdse rescataría, es decir, solo puede trabajar de forma passwdinteractiva

  • chpasswd, por otro lado, está diseñado para leer (nombre de usuario y) contraseña de STDIN, y se llama modo por lotes (crea / actualiza múltiples credenciales de usuario a la vez). Lee las contraseñas (en texto claro de forma predeterminada) y los nombres de usuario de STDIN, en el formato user_name:password, con una nueva línea que separa las entradas

heemayl
fuente
0

Encontré que aunque

echo user:password | chpasswd

funciona para algunos sistemas operativos, pero algunos sistemas operativos como debian9,10 mostrarán un error, can not connect to /var/run/nscd/socketya que usa /etc/nsswitch.conf para determinar dónde almacena la contraseña.

Por otro lado, passwdparece que el comando no necesita un shell interactivo,

(echo user; echo password) | passwd

funciona para mí tanto en host físico como en contenedor, para varios sistemas operativos (ubuntu xenial-bionic, debian9-10, centos75-76, coreos1855-2135)

osexp2003
fuente