View previous topic :: View next topic |
Author |
Message |
anigel Bodhisattva
Joined: 14 Apr 2003 Posts: 1894 Location: Un petit bled pas loin de Limoges ;-)
|
Posted: Tue Oct 04, 2005 4:53 pm Post subject: [TIP] Génération aléatoire de mots de passe |
|
|
Bonsoir,
Ceux d'entre vous qui utilisent des serveurs Linux avec plusieurs utilisateurs ont probablement déjà été confronté au problème de la génération aléatoire de mots de passe. Il existe pas mal de solutions, plus ou moins pratiques, mais aucune n'avait répondu à mon "cahier des charges" :
- générer des trucs d'une longueur raisonnable (le plus souvent, c'est paramétrable) : ni trop, ni trop peu.
- comporter des caractères vraiment aléatoires, et pas un simple random sur l'alphabet français.
- assez rapide pour générer 1000 mots de passe en moins de 30 minutes (là, j'ai perdu apg, que j'utilisais jusque-là).
- et surtout, être capable de me générer la version "en clair", mais aussi la version "cryptée" du mot de passe (là, j'en ai pas encore trouvé un seul).
Alors je me suis mis à réfléchir, et me suis penché sur la suite openssl. C'est installé de base sur n'importe quel linux, donc pas de souci à ce niveau-là. Et il se trouve que cela a parfaitement répondu à mes attentes ! Voici donc les 2 lignes de commandes magiques à employer dans vos scripts bash / perl / tricot_jersey .
Code: | MY_PASSWORD=`openssl rand -base64 6`
MY_CRYPTED_PASSWORD=`echo $MY_PASSWORD | openssl passwd -stdin` |
Ces commandes magiques vont vous créer, à la vitesse de l'éclair, des couples password / crypted password, que vous pouvez directement réinjecter dans le système / l'utilisateur. Pour le système :
Code: | usermod -p $MY_CRYPTED_PASSWORD $USER |
Pour l'utilisateur : n'importe quel client e-mail, envoyez-lui son login, avec la valeur contenue dans $MY_PASSWORD .
Voilà, astuce courte, mais bien pratique. _________________ Il y a 10 sortes d'individus en ce bas-monde : ceux qui causent binaire, et les autres. |
|
Back to top |
|
|
voltairien Tux's lil' helper
Joined: 24 Apr 2004 Posts: 123
|
Posted: Tue Oct 04, 2005 8:24 pm Post subject: |
|
|
Et la commande crypt (du package app-crypt/cli-crypt) Elle irait pas encore plus rapidement ? :
Code: | MY_PASSWORD=`openssl rand -base64 6`
MY_CRYPTED_PASSWORD=`/usr/bin/crypt $MY_PASSWORD` |
_________________ [Les Mechants] Voltairien |
|
Back to top |
|
|
anigel Bodhisattva
Joined: 14 Apr 2003 Posts: 1894 Location: Un petit bled pas loin de Limoges ;-)
|
Posted: Tue Oct 04, 2005 9:50 pm Post subject: |
|
|
Oui et non. D'une part, crypt ne comporte pas de fonction de génération de mot de passe aléatoire (il faut donc malgré tout avoir recours à un logiciel tiers), et d'autre part openssl dispose de tout un tas d'algos de cryptage (la série des MD, DES, et j'en passe).
Ca peut donc être facilement adapté pour une base MySQL par exemple, avec cryptage MD5. _________________ Il y a 10 sortes d'individus en ce bas-monde : ceux qui causent binaire, et les autres. |
|
Back to top |
|
|
voltairien Tux's lil' helper
Joined: 24 Apr 2004 Posts: 123
|
Posted: Wed Oct 05, 2005 7:54 am Post subject: |
|
|
Tu as raison pour openssl, c'est grace à lui qu'on va générer le mot de passe.
Pour la rapidité d'exécution, par contre :
Code: | port-voltairien tmp # time for ((I=0;I<=10;I++)); do /tmp/crypt_anigel; done
SlhLeLHN
Lc2CQGOw3PQAw
5BNck4L1
3/Y8NAJvAnXZ.
UY6CsxX1
/d03Yk1BL0P62
ej7bYaga
7xk6hsO6Y2ic2
Jr2miXP/
lHHQvVGRCmyZo
TDEkbj3B
V5qTA8rDKuG7M
kjEyQ+/T
FHWxl8ndOZ9BA
aHRR8NzL
T96oi/TzuSVJQ
3J+GRmbK
zFJaUKPSj4J5E
d/8qOp3f
f2CTt.uJEaWOM
ghvHKNrJ
PVpxUoZJv5lcA
real 0m0.222s
user 0m0.116s
sys 0m0.025s
port-voltairien tmp # time for ((I=0;I<=10;I++)); do /tmp/crypt_voltairien; done
+ZmtJYOq
2F15Rkw5FlGTw
3dJ10YJN
8LEdWcfkQOdxA
4auJEv9P
jwHSjipueR/nk
KleLLjVM
Kn1oaKuxn7JHQ
RrSXQYK6
jgPf6ijdvJs8g
x5dUhlaT
hr8EeqaOEa0yw
kHLXX+u7
Av8FlD1Yqy6wQ
gH0OFdft
ekcMfS4..eO3k
Q0qnW/nd
JyYKx46TETA7A
fbECgxO8
eFhwdY8x.BiSc
W/4ljfr2
P4Fo.6UACaI2o
real 0m0.172s
user 0m0.069s
sys 0m0.022s
|
crypt est donc plus rapide....
Ca m'intéresse bien ces scripts aussi pour générer des comptes.
V. _________________ [Les Mechants] Voltairien |
|
Back to top |
|
|
anigel Bodhisattva
Joined: 14 Apr 2003 Posts: 1894 Location: Un petit bled pas loin de Limoges ;-)
|
Posted: Wed Oct 05, 2005 8:14 am Post subject: |
|
|
Je n'ai pas réellement fait de bench. La seule chose dont je sois certain, c'est que cette solution est beaucoup plus rapide que celle que j'utilisais auparavant (apg), en plus d'être plus souple. J'ai généré un peu plus de 2000 mots de passe en moins de 4 minutes ça me suffit .
Il faut noter aussi que les perfs d'openssl sont différentes selon les options compilées dans la noyau, nottament en ce qui concerne le support du hardware random number generation support. _________________ Il y a 10 sortes d'individus en ce bas-monde : ceux qui causent binaire, et les autres. |
|
Back to top |
|
|
scout Veteran
Joined: 08 Mar 2003 Posts: 1991 Location: France, Paris en Semaine / Metz le W-E
|
Posted: Wed Oct 05, 2005 7:07 pm Post subject: |
|
|
[mode pub pour ruby]
Voilà moi je vais vous générer 10**40 mots de passe en une seconde, le tout c'est d'envoyer les mails suffisament rapidement aux gens.
Bon déja il faut qu'on voit ce que openssl utilise comme caractères pour faire des mots de passe
Code: | ( repeat 100 openssl rand -base64 100 ) | ruby -e 'print $<.read.scan(/./m).uniq.sort; puts'
+/0123456789=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz |
bon donc ce sont les chiffres, l'alphabet, +, / et =
alors assez parlé, voilà du code:
Code: | #!/usr/bin/ruby -w
# 1er argument - par défaut 1 : nb de mot des passe à générer
# 2eme argument - par défaut 6 : longeur minimale des mots de passe
# 3eme argument - par défaut 8 : longeur maximale des mots de passe
LONGEURMIN=(ARGV[1] || 6).to_i
LONGEURMAX=(ARGV[2] || 8).to_i
srand((Time.now.to_f*10**5).to_i % 10**6)
base=["+","/","=","0".."9","a".."z","A".."Z"].collect do |range|
range.to_a
end.flatten
(ARGV[0] || 1).to_i.times do
#génération d'un mot de passe
(LONGEURMIN+rand(LONGEURMAX-LONGEURMIN+1)).times do
print base[rand(base.length)]
end
puts
end |
au départ j'avais même une version crade en une ligne ...
bon voilà:
Code: | time ruby ~/ruby/passgen.rb 10000 | openssl passwd -stdin >| /dev/null
ruby ~/ruby/passgen.rb 10000 0,20s user 0,00s system 30% cpu 0,669 total
openssl passwd -stdin >| /dev/null 0,22s user 0,03s system 36% cpu 0,688 total |
Bon, là j'écris le serveur de mail en C qui arrive à envoyer les mails à la même vitesse, à savoir les 10000 mails en 0.6 secondes.
[/mode pub pour ruby]
[EDIT]oui, je sais, j'ai complètement craqué
[EDIT2] Merci à anigel pour le howto _________________ http://petition.eurolinux.org/ - Petition against ePatents
L'essence de la finesse |
|
Back to top |
|
|
anigel Bodhisattva
Joined: 14 Apr 2003 Posts: 1894 Location: Un petit bled pas loin de Limoges ;-)
|
Posted: Wed Oct 05, 2005 7:32 pm Post subject: |
|
|
Lol, je ne pensais pas lancer un concours !
Qui s'y colle en java ? _________________ Il y a 10 sortes d'individus en ce bas-monde : ceux qui causent binaire, et les autres. |
|
Back to top |
|
|
boozo Advocate
Joined: 01 Jul 2004 Posts: 3193
|
Posted: Thu Oct 06, 2005 10:08 am Post subject: |
|
|
'alute
ce n'est pas stricto sensus réellement aléatoire ni ultra sécurisé mais j'avais trouvé ce tip sympatoche dans une news gentoo de 2003 et qui pourrait-être utile à d'autres
Quote: | 9. Tips and Tricks
A Quick and Easy Password Generator
This week's tip shows you how to quickly generate a list of passwords using /dev/urandom, and uuencode.
Code Listing 9.1
Code: | % dd if=/dev/urandom count=1 2> /dev/null | uuencode -m - | head -n 2 | tail -n 1 | cut -c-8
v1/oVN+S |
The options for the cut command indicate the length of the password generated (in this case, 8 characters). This could easily be expanded to generate a whole list of passwords using the for command.
Code Listing 9.2
Code: | % for ((n=0;n<10;n++)); do dd if=/dev/urandom count=1 2> /dev/null | uuencode -m -| head -n 2 \ | tail -n 1 | cut -c-8; done
rSQpeNNr
PesAIgAb
GUEgoUwT
U3p+kfqa
WSgSwgq6
+9aGihvl
dYfcaV3b
guFtI7eZ
+kzKuW0f
jJpW/8yO |
To create a longer or shorter list, just change the limit in for (in this case 10).
If you want to generate WEP keys for wireless networking, you can use a similar procedure, replacing uuencode with md5sum:
Code Listing 9.3
Code: | % dd if=/dev/urandom count=1 2> /dev/null | md5sum | head -n 2 | tail -n 1 | cut -c-26
aaab69457c239ef1d52617d1fa |
|
Dans la même optique, il existe passook qui est un générateur de password human-readable vraiment simple d'utilisation dans portage... très commode pour les utilsateurs d'un réseau (login/mail/etc.) récalcitrant à l'utilisation de password efficaces
(qui à dit maman ? ) _________________ " Un psychotique, c'est quelqu'un qui croit dur comme fer que 2 et 2 font 5, et qui en est pleinement satisfait.
Un névrosé, c'est quelqu'un qui sait pertinemment que 2 et 2 font 4, et ça le rend malade ! " |
|
Back to top |
|
|
netfab Veteran
Joined: 03 Mar 2005 Posts: 1897 Location: 127.0.0.1
|
Posted: Thu Oct 06, 2005 10:31 am Post subject: |
|
|
Dans portage, il y a aussi :
Niveau aléatoire, je ne sais pas trop ce que çà donne, mais pour l'instant, çà me suffit.
Code: | $ time makepasswd --chars 10 --count 2000 > fich
real 0m0.217s
user 0m0.147s
sys 0m0.010s
|
|
|
Back to top |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|