GNU/Linux >> Tutoriels Linux >  >> Linux

Utilisation de la commande passwd à partir d'un script shell

La seule solution fonctionne sur Ubuntu 12.04 :

echo -e "new_password\nnew_password" | (passwd user)

Mais la deuxième option ne fonctionne que lorsque je change de :

echo "password:name" | chpasswd

À :

echo "user:password" | chpasswd

Voir les explications dans le post d'origine :Changer le mot de passe via un script


Lisez les sages paroles de :

  • http://mywiki.wooledge.org/BashFAQ/078

Je cite :

Rien de ce que vous pouvez faire dans bash ne peut fonctionner. passwd(1) ne lit pas à partir de l'entrée standard. C'est intentionnel. C'est pour votre protection. Les mots de passe n'ont jamais été destinés à être placés dans des programmes ou générés par des programmes. Ils étaient destinés à être entrés uniquement par les doigts d'un être humain réel, avec un cerveau fonctionnel, et jamais, jamais écrits nulle part.

Néanmoins, nous recevons des hordes d'utilisateurs demandant comment ils peuvent contourner 35 ans de sécurité Unix.

Il explique ensuite comment vous pouvez définir votre shadow(5) mot de passe correctement, et vous montre le GNU-I-only-care-about-security-if-it-doesn't-make-me-think-too-much -façon d'abuser passwd(1) .

Enfin, si vous allez utiliser l'extension stupide GNU passwd(1) --stdin , ne pas passez le mot de passe en le mettant sur la ligne de commande.

echo $mypassword | passwd --stdin # Eternal Sin.
echo "$mypassword" | passwd --stdin # Eternal Sin, but at least you remembered to quote your PE.
passwd --stdin <<< "$mypassword" # A little less insecure, still pretty insecure, though.
passwd --stdin < "passwordfile" # With a password file that was created with a secure `umask(1)`, a little bit secure.

Le dernier est le mieux que vous puissiez faire avec GNU passwd . Même si je ne le recommanderais toujours pas.

Mettre le mot de passe sur la ligne de commande signifie que n'importe qui avec le moindre indice d'accès à la boîte peut surveiller ps ou tel et voler le mot de passe. Même si vous pensez que votre box est en sécurité; c'est quelque chose que vous devriez vraiment prenez l'habitude d'éviter à tout prix (oui, même le coût de faire un peu plus de mal à faire le travail).


de "man 1 passwd " :

   --stdin
          This option is used to indicate that passwd should read the new
          password from standard input, which can be a pipe.

Donc dans votre cas

adduser "$1"
echo "$2" | passwd "$1" --stdin

[Mettre à jour ] quelques problèmes ont été soulevés dans les commentaires :

Votre passwd la commande peut ne pas avoir de --stdin option :utilisez le chpasswd utilitaire à la place, comme suggéré par ashawley.

Si vous utilisez un shell autre que bash, "echo" n'est peut-être pas une commande intégrée et le shell appellera /bin/echo . Ceci n'est pas sécurisé car le mot de passe apparaîtra dans la table de processus et peut être vu avec des outils comme ps .

Dans ce cas, vous devez utiliser un autre langage de script. Voici un exemple en Perl :

#!/usr/bin/perl -w
open my $pipe, '|chpasswd' or die "can't open pipe: $!";
print {$pipe} "$username:$password";
close $pipe

De nos jours, vous pouvez utiliser cette commande :

echo "user:pass" | chpasswd

Linux
  1. Gestion des utilisateurs Linux avec la commande passwd

  2. Envoyer un e-mail à partir d'un terminal Linux ou d'un script à l'aide de la commande mail

  3. Comment la commande Su masque-t-elle/protége-t-elle l'affichage du mot de passe à l'écran ? ?

  4. La signification de $ ? Dans un script shell ?

  5. passwd Exemples de commandes sous Linux

Utilisation de Stratis pour gérer le stockage Linux à partir de la ligne de commande

Comment utiliser la commande Passwd sous Linux

Comprendre facilement les commandes Shell à l'aide du script "Explain Shell" sous Linux

10 exemples de commandes passwd sous Linux

Comment exécuter une commande dans un script shell ?

Contourner la commande/le script spécifié dans /etc/passwd