Chan­ger ses mots de passe rapi­de­ment avec Salt

Préam­bule

Salt est un logi­ciel de gestion de confi­gu­ra­tion comme Puppet ou Ansible.

Je l’uti­lise chez Frama­soft et sur mon infra person­nelle parce que je l’aime bien :

  • rapide ;
  • très bien docu­menté ;
  • syntaxe claire, acces­sible mais néan­moins flexible et puis­sante.

Je change mes mots de passe régu­liè­re­ment (une fois par an envi­ron). C’est toujours galère à faire quand on gère une tripo­tée de serveurs (entre les serveurs physiques et les VMs, on en est à 80 serveurs chez Frama­soft).

Avant, je faisais ça à la main : je lançais mssh sur 4, 6 ou 8 serveurs à la fois, et je modi­fiais mon mot de passe à la main. Mais ça, c’était avant.

Salt à la rescousse

Pour chan­ger le mot de passe de l’uti­li­sa­teur bar sur le serveur foo avec salt, on fait :

salt foo shadow.set_password bar "$6$saltSALT$HASHEDPASSWORD"

$6$saltSALT$HASHEDPASSWORD corres­pond à votre mot de passe salé et hashé. Vous retrou­vez un brol du genre dans votre /etc/shadow (Oh ! Vous avez remarqué ? C’est le nom du module salt qui permet de modi­fier votre mot de passe ! C’est bien fait quand même 😁)

Pour créer un sel (le saltSALT, rien à voir avec le logi­ciel), j’uti­lise mkpasswd.pl, fourni par le paquet Debian libstring-mkpasswd-perl :

mkpasswd.pl -l 8 -s 0

Pour créer l’en­semble $6$saltSALT$HASHEDPASSWORD, vous pouvez utili­ser python :

python3 -c "import crypt; print(crypt.crypt('PASSWORD', '\$6\$saltSALT'))"

Bon, on sait comment faire, mais on ne va pas s’amu­ser à taper 80 fois ces commandes !

Salt permet de véri­fier que les minions (les agents Salt) répondent bien avec cette commande :

salt foo test.ping

Ce qui donne :

foo:
    True

On va chan­ger le format de sortie :

salt foo --out text test.ping

Ce qui nous donne :

foo: True

Bien ! On peut pinguer d’un coup tous les minions avec :

salt \* --out text test.ping

On a donc la liste des minions, la commande pour chan­ger le mot de passe… on va mixer tout ça :

salt \* --out text test.ping | \
 sed -e "s@\([^:]*\):.*@echo salt \1 shadow.set_password bar \\\\\"\$(python3 -c \"import crypt; print(crypt.crypt('PASSWORD', '\\\\\$6\\\\$\$(mkpasswd.pl -l 8 -s 0)'))\")\\\\\"@"

1ère regex : on dégage les : True, et la deuxième, on enrobe le nom du minion pour que ça nous donne un truc comme :

echo salt foo shadow.set_password bar \"$(python 3-c "import crypt; print(crypt.crypt('PASSWORD', '\$6\$$(mkpasswd.pl -l 8 -s 0)'))")\"

Quand on exécute ça, ça donne un truc genre :

salt foo shadow.set_password bar "$6$8qJhzAi6$.O8bOisJaM9fH05aXx7xnKXOVFoI9CRzjORFWDqoPR/TBOiYVZUEJKtUKirNMyaZJvJMYPVUMhnNry9QPJgHK/"

Bien évidem­ment, on va mettre ça dans un fichier qu’on va éditer pour modi­fier le mot de passe (bah oui, on va quand même pas mettre le même mot de passe sur tous les serveurs).

salt \* --out text test.ping | \
 sed -e "s@\([^:]*\):.*@echo salt \1 shadow.set_password bar \\\\\"\$(python3 -c \"import crypt; print(crypt.crypt('PASSWORD', '\\\\\$6\\\\$\$(mkpasswd.pl -l 8 -s 0)'))\")\\\\\"@" > /tmp/chpasswd.txt

On édite /tmp/chpasswd.txt pour mettre ses mots de passe bien comme il faut puis :

bash /tmp/chpasswd.txt | sed -e "s@[$]@\\\\\$@g" | bash

Le echo va nous sortir la commande kiva­bien qui sera inter­pré­tée par bash. Le $(mkpasswd.pl -l 8 -s 0)') sera remplacé par un sel diffé­rent à chaque fois et le bout de python trans­for­mera le sel et le mot de passe en hash dans le format kiva­bien pour le fichier /etc/shadow, les $ seront échap­pés (\$) grâce à sed et la commande salt sera lancée sur chaque minion.

Et voilà 🙂

Crédits : photo par Nikita Andreev

Double merci à mes tipeurs :-)

Le 14 juillet 2016, j’ai lancé mes pages Tipeee et Libe­ra­pay.

La récom­pense de base est l’ap­pa­ri­tion sur une page mensuelle de remer­cie­ments… voici celle de décembre et janvier !

Et oui, j’ai zappé la page de remer­cie­ments de décembre (je rappelle que je les publie au début du mois suivant). Je me suis laissé débordé.

Merci à :

Voici mon bilan de décembre :

  • Patch de MyPads pour fonc­tion­ner avec toutes les versions de NodeJS
  • J’ai fait un script pour faci­li­ter la créa­tion d’images ISO de Debian présee­dées : preseed_crea­tor.sh (présee­dées veut dire qu’on répond à l’avance aux ques­tions de l’ins­tal­leur Debian)
  • Last est passé en version 0.5.0
  • WemaWema est passé en version 26.0

Et pour les commits dédiés :

Passons à janvier :

  • J’ai fait une contri­bu­tion à Gitlab afin de pouvoir écrire un programme qui permet­tra de créer des certi­fi­cats Let’s Encrypt pour tous les domaines person­nels ajou­tés aux Gitlab Pages
  • J’ai écrit un bot Masto­don qui poste des images tirées aléa­toi­re­ment d’Unsplash : Unsplash masto­bot
  • J’ai bossé sur Lutim
    • quelques bugfixs
    • utili­sa­tion de mon plugin StaticCache
    • modi­fi­ca­tion du thème par défaut
    • utili­sa­tion de PhotoS­wipe pour la gale­rie
  • Encore du boulot sur MyPads

Les commits dédiés :


Et vous pouvez toujours me soute­nir via Duni­ter !

Je remets ici mon expli­ca­tion du mois d’août.

Disclai­mer : je vais peut-être dire des sottises parce que j’ai pas tout compris mais je m’en fous, j’aime bien l’idée

Duni­ter est un projet de crypto-monnaie mais contrai­re­ment au bitcoin où c’est la course à la puis­sance de calcul pour géné­rer la monnaie et deve­nir riche, le but est de créer une monnaie libre (le Ğ1, prononcé comme june en anglais), basée sur une toile de confiance (il faut rece­voir 5 certi­fi­ca­tions pour être membre) et où chacun des membres reçoit tous les jours un divi­dende univer­sel. Je dois dire que je suis assez curieux de ce qu’on peut faire avec un système ressem­blant forte­ment au salaire à vie 🙂

C’est pourquoi j’ai créé mon compte et ait fait ce qu’il fallait pour rece­voir mes certi­fi­ca­tions (rencon­trer des gens, tous­sa…). Ma clé publique est :

 2t6NP6Fvvuok2iRWA188C6pGokWAB5Kpf1S1iGtkN9tg

Et comme un projet n’est utile que si on s’en sert, je vous propose de me soute­nir en Ğ1 tout en béné­fi­ciant des mêmes récom­penses que celles présentes sur ma page Tipeee (j’ai arbi­trai­re­ment choisi une parité euro/Ğ1 car je n’ai pas vrai­ment trouvé de page expliquant comment évaluer le cours du Ğ1 en euros, et au final, est-ce vrai­ment néces­saire ? À nous de choi­sir quelle valeur a cette nouvelle monnaie 🙂. Et puis ça me simpli­fie la vie).

Voici donc les diffé­rentes contre­par­ties et leur prix (chaque contre­par­tie comprend celles de tarif infé­rieur) :

  • 1 Ğ1 : vous appa­raî­trez sur la page mensuelle des remer­cie­ments
  • 2 Ğ1 : vous rece­vrez une photo dédi­ca­cée de mon chat
  • 3 Ğ1 : vous rece­vrez 3 stickers repre­nant les logos de Lstu, Lutim et Lufi. De quoi déco­rer son ordi et se la péter en société 😁
  • 5 Ğ1 : un commit vous sera dédié chaque mois (si je déve­loppe suffi­sam­ment pour le nombre de personnes à ce niveau)
  • 15 Ğ1 : vous pouvez me deman­der de bosser en prio­rité sur un bug ou une demande de fonc­tion­na­lité d’un de mes logi­ciels (dans la mesure du faisable, hein).
  • 100 Ğ1 : quand j’au­rais un nouveau projet, vous pour­rez en choi­sir le nom et le logo

Pour en savoir plus sur Duni­ter et Ğ1, je vous propose d’al­ler voir cet article de cgeek : https://blog.cgeek.fr/de-linte­ret-dune-monnaie-libre.html ainsi que la théo­rie rela­tive de la monnaie pour les enfants.

PS : j’ai aussi une adresse bitcoin si vous souhai­tez me soute­nir par ce biais

Crédits : Photo par Craig White­head sur Unsplash