web-dev-qa-db-fra.com

Générer manuellement un mot de passe pour / etc / shadow

Je dois modifier manuellement /etc/shadow pour changer le mot de passe root à l'intérieur d'une image de machine virtuelle.

Existe-t-il un outil en ligne de commande qui prend un mot de passe et génère un /etc/shadow hachage de mot de passe compatible sur sortie standard?

115
Lorin Hochstein

Vous pouvez utiliser les commandes suivantes pour les mêmes:

Méthode 1 (md5, sha256, sha512)

openssl passwd -6 -salt xyz  yourpass

Remarque: en passant -1 générera un mot de passe MD5, -5 un SHA256 et -6 SHA512 (recommandé)

Méthode 2 (md5, sha256, sha512)

mkpasswd --method=SHA-512 --stdin

Les méthodes acceptent md5, sha-256 et sha-512

Méthode 3 (des, md5, sha256, sha512)

Comme l'a suggéré @tink, nous pouvons mettre à jour le mot de passe en utilisant chpasswd en utilisant:

echo "username:password" | chpasswd 

Ou vous pouvez utiliser un mot de passe chiffré avec chpasswd. Générez-le d'abord en utilisant ceci:

Perl -e 'print crypt("YourPasswd", "salt", "sha512"),"\n"'

Ensuite, vous pouvez utiliser le mot de passe généré pour mettre à jour:

echo "username:encryptedPassWd"  | chpasswd -e

Ce mot de passe crypté que nous pouvons utiliser pour créer un nouvel utilisateur avec mot de passe, par exemple:

useradd -p 'encryptedPassWd'  username
133
Rahul Patil

Sur Ubuntu 12.04, il y a mkpasswd (à partir du paquet whois): frontal surpuissant à crypt (3)

mkpasswd  -m sha-512 -S saltsalt -s <<< YourPass

Où:

  • -m = Calculez le mot de passe à l'aide de la méthode TYPE. Si TYPE est une aide, les méthodes disponibles sont imprimées.
  • -S = sel utilisé.

Par exemple.

$ mkpasswd -m help

-s = Read password from stdin
37
user3183018

Cette solution présente les avantages suivants:

  • Rien de plus à installer
  • Ne stocke pas le mot de passe dans votre historique Shell
  • Génère un sel aléatoire pour vous
  • Utilise un algorithme de hachage fort et moderne, SHA-512
  • Re-invite le mot de passe pour éviter les erreurs.

    $ python3 -c "from getpass import getpass; from crypt import *; \
        p=getpass(); print('\n'+crypt(p, METHOD_SHA512)) \
        if p==getpass('Please repeat: ') else print('\nFailed repeating.')"
    

Références

17
u150825

Aucune des méthodes actuelles n'est acceptable pour moi - Soit ils passent le mot de passe sur la ligne de commande (qui finit dans l'historique de mon Shell), nécessitent l'installation d'utilitaires supplémentaires (python3, makepasswd), utilisez des sels codés en dur ou utilisez d'anciennes techniques de hachage.

Cette méthode générerait des hachages SHA-512 après avoir demandé le mot de passe et utiliserait un sel aléatoire.

Une méthode utilisant Python 2 sans bibliothèques non standard:

python2 -c 'import crypt, getpass,os,base64; print crypt.crypt(getpass.getpass(), "$6$"+base64.b64encode(os.urandom(16))+"$")'

Pour le faire sans invite: (Cela laissera votre mot de passe dans l'historique des commandes)

python2 -c 'import crypt, os,base64; print crypt.crypt("MyPassword", "$6$"+base64.b64encode(os.urandom(16))+"$")'
3
Gert van den Berg

Pour ceux sans systèmes basés sur Debian. Python3 fonctionne aussi bien.

python3 -c 'import crypt; print(crypt.crypt("test"))'

REMARQUE: La chaîne "test" est le mot de passe que nous générons sous forme de chaîne cryptée.

3
Greg

Les openssl et chpasswd -e la paire n'a pas fonctionné dans mon cas dans RHEL6. Combiner openssl passwd et usermod -p la commande a fait le travail.

Générez la valeur de hachage du mot de passe avec la valeur de sel:

$ openssl passwd -1  -salt 5RPVAd clear-text-passwd43

$1$5RPVAd$vgsoSANybLDepv2ETcUH7.

Ensuite, copiez la chaîne chiffrée dans usermod. Assurez-vous de l'envelopper avec des guillemets simples.

$ usermod -p '$1$5RPVAd$vgsoSANybLDepv2ETcUH7.' root

Vérifiez-le dans le fichier shadow.

$ grep root /etc/shadow

root:$1$5RPVAd$vgsoSANybLDepv2ETcUH7.:17774:0:99999:7:::
2
Joon Byun

Encore une autre méthode pour générer des mots de passe, utilise l'outil openssl.

Générer des mots de passe MD5

openssl passwd -1 -salt SaltSalt SecretPassword
# output: $1$SaltSalt$FSYmvnuDuSP883uWgYBXW/

Générer DES mots de passe

openssl passwd -crypt -salt XR SuprScrt
# output: XR1dOp2EVMph2
2
Evgeny

En développant un peu les critiques de u150825 et de Gert van den Berg, je me suis retrouvé à avoir besoin de quelque chose de relativement flexible pour différentes situations avec différents systèmes d'automatisation. J'ai décidé d'ajouter à ma propre petite bibliothèque de scripts utiles et d'écrire ceci. Il utilise uniquement des bibliothèques natives de python 2.7+, et fonctionne également sur python3.

Vous pouvez le récupérer ici si vous le souhaitez. Il est tout aussi facile de le déposer dans votre environnement si vous avez besoin de l'utiliser beaucoup, hébergé http ou autre, et vous pouvez l'exécuter sur n'importe quelle plate-forme en utilisant le interpréteur par défaut python vous 'ai mis à votre disposition est, en comptant assez fiable sur son fonctionnement.

Par défaut, il invite à utiliser getpass avec des invites sur stderr (permettant une capture facile de stdout), mais si vous lui redirigez une chaîne, elle sera simplement récupérée à partir de stdin. Selon la façon dont vous vous y prenez, il se peut que cela n'apparaisse pas non plus dans l'historique des commandes, alors sachez simplement avec quoi vous travaillez. J'aime avoir un outil flexible qui se comportera de la manière attendue, plutôt que de devoir compter sur des packages ou python une seule ligne pour gagner 10 façons différentes).

1
James Harmison