Quelle est la différence entre «passwd» et «chpasswd»?

14

J'ai lu la description de ces commandes dans un livre,
passwd:

Modifie le mot de passe d'un utilisateur existant.

chpasswd:

Lit un fichier de paires nom d'utilisateur / mot de passe et met à jour les mots de passe.

Il semble que ces commandes fassent le même travail. Y a-t-il une différence entre eux?

ÉDITER:

Je veux savoir quand nous les utilisons quel (s) fichier (s) changer. Modifient-ils le même fichier ou un fichier différent? S'ils changent des fichiers différents, quels sont-ils?

métarose
la source
2
/etc/passwordcontient des informations sur le compte utilisateur. /etc/shadowcontient des mots de passe cryptés. Je pense que ce sont les seuls fichiers pertinents. Vous pouvez changer un mot de passe en modifiant manuellement ces fichiers, mais ce serait très gênant.
SauceCode

Réponses:

18

De man chpasswd:

«Cette commande est destinée à être utilisée dans un grand environnement système où de nombreux comptes sont créés en même temps.»

passwd est (selon mon expérience) normalement utilisé de manière interactive pour un seul utilisateur.

SauceCode
la source
7

Voir les pages de manuel pour les deux:

NOM

    chpasswd - met à jour les mots de passe en mode batch

SYNOPSIS

    chpasswd [options]

LA DESCRIPTION

    La chpasswdcommande lit une liste de paires nom d'utilisateur et mot de passe à partir de l'entrée standard et utilise ces informations pour mettre à jour un groupe d'utilisateurs existants. Chaque ligne est au format:

       Identifiant Mot de passe


NOM

    passwd - changer le mot de passe utilisateur

SYNOPSIS

    passwd [options] [CONNEXION]

LA DESCRIPTION

    La passwdcommande modifie les mots de passe des comptes d'utilisateurs. Un utilisateur normal peut uniquement modifier le mot de passe de son propre compte, tandis que le superutilisateur peut modifier le mot de passe de n'importe quel compte.  passwdmodifie également la période de validité du compte ou du mot de passe associé.

MrRolling
la source
7

En un mot:

  • passwdvérifie si le STDIN (descripteur de fichier 0) est attaché au terminal, en utilisant isatty(0). Dans le cas contraire, passwdrenflouerait -à- dire que vous ne pouvez travailler avec passwdinteractive

  • chpasswd, d'autre part, est conçu pour lire (nom d'utilisateur et) mot de passe depuis STDIN, et est appelé le mode batch (crée / met à jour plusieurs informations d'identification utilisateur à la fois). Il lit le (s) mot (s) de passe (en texte clair par défaut), et le (s) nom (s) d'utilisateur de STDIN, donnés dans le format user_name:password, avec une nouvelle ligne séparant les entrées

heemayl
la source
0

J'ai trouvé que même si

echo user:password | chpasswd

fonctionne pour certains systèmes d'exploitation, mais certains systèmes d'exploitation tels que debian9,10 afficheront une erreur can not connect to /var/run/nscd/socketcar ils utilisent /etc/nsswitch.conf pour déterminer où ils stockent le mot de passe.

D'un autre côté, la passwdcommande ne semble pas avoir besoin de shell interactif,

(echo user; echo password) | passwd

fonctionne pour moi à la fois dans l'hôte physique et le conteneur, pour divers systèmes d'exploitation (ubuntu xenial-bionic, debian9-10, centos75-76, coreos1855-2135)

osexp2003
la source