Changer le mot de passe par programme

11

Dans la version actuelle de Raspian, je sais qu'il est possible de changer le mot de passe de l'utilisateur actuellement connecté à partir de la ligne de commande comme suit:

sudo passwd

qui invitera alors l'utilisateur à entrer un nouveau mot de passe deux fois. Cela produira une sortie comme ceci:

Changing password for pi.
(current) UNIX password:
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully

Je me demandais s'il y avait un moyen possible de changer un mot de passe par programme, comme à partir d'un script shell.

J'essaie de créer un script de configuration à déployer sur mon Raspberry Pis et je ne veux pas avoir à taper manuellement de nouveaux mots de passe pour eux.

James Taylor
la source
1
Pour modifier le mot de passe de l'utilisateur actuel, vous n'avez pas besoin de préfixer avec sudo. Si vous utilisez, sudovous pouvez forcer un nouveau mot de passe pour n'importe quel utilisateur sans avoir besoin de connaître le mot de passe actuel de cet utilisateur.
roaima
expect(1)pourrait aussi aider.
SailorCire
Assurez-vous de prendre en compte les implications de sécurité lors du changement de mot de passe par programme.
Josh Habdas

Réponses:

18

Vous recherchez la chpasswdcommande. Vous feriez quelque chose comme ça:

echo 'pi:newpassword' | chpasswd # change user pi password to newpassword

Notez qu'il doit être exécuté en tant que root, au moins avec la configuration PAM par défaut. Mais il est probable que l'exécution en tant que root n'est pas un problème pour un script de déploiement système.

En outre, vous pouvez faire plusieurs utilisateurs à la fois en lui fournissant plusieurs lignes d'entrée.

derobert
la source
9

Une autre alternative consiste à utiliser la yescommande dans votre script.

yes newpassword | passwd youruser

Cela enverra newpasswordà la passwdcommande pour youruser.

Il convient de mentionner que la définition / modification de mots de passe utilisateur via des scripts peut présenter des risques de sécurité et doit être évitée autant que possible.

ÉDITER:

Cette réponse nécessite un accès root. Toutes mes excuses pour ne pas l'avoir mentionné précédemment. C'est une méthode que j'utilise lors de l'exécution de tâches d'administration qui nécessitent un accès root.

Timothy Martin
la source
Avez-vous essayé cela?
roaima
Oui. J'utilise cette méthode depuis des années. Je l'ai testé avant de poster ma réponse et encore une fois.
Timothy Martin
Même en supposant que la passwdlecture s'effectue depuis stdinplutôt qu'un terminal (clavier), comment cela peut-il fonctionner lorsque vous passwddemandez d'abord l'ancien mot de passe d'un utilisateur, puis le nouveau?
roaima
@roaima peut-être que Timothy l'exécute en tant que root (ce qui expliquerait pourquoi il a besoin youruserà la fin). Cela pourrait fonctionner quelque part ...
derobert
1
@roaima La passwdcommande des utilitaires cachés de Linux accepte les entrées redirigées (contrairement par exemple à OpenSSH ssh). L'utilisation yesn'est cependant pas une bonne idée: elle expose le mot de passe aux espions qui consultent la liste des processus au mauvais moment. L'utilisation echon'aurait pas ce défaut car c'est un shell intégré.
Gilles 'SO- arrête d'être méchant'