Archives du mot-clé Sécurité

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 :

python -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 \\\\\"\$(python -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 -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 \\\\\"\$(python -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 | 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, et la commande salt sera lancée sur chaque minion.

Et voilà 🙂

Crédits : photo par Nikita Andreev

Me soutenir sur Tipeee Me soutenir sur Liberapay

Encore un bon petit logi­ciel

Les sauve­gardes, c’est bien, les sauve­gardes auto­ma­tiques, c’est mieux !

OVH m’offre avec mon serveur dédié un espace de stockage en ftp me permet­tant de faire des sauve­gardes. C’est sympa, mais rsync ne sait pas faire son travail en ftp… :(
Qu’à cela ne tienne, j’ai parcouru le web et les dépôts Debian pour cher­cher mon bonheur et je l’ai trouvé ! Il s’agit de backup-mana­ger.

À partir d’un fichier de confi­gu­ra­tion très simple et très docu­menté, backup-mana­ger sera capable de faire des archives – incré­men­tales ou pas – des diffé­rents réper­toires choi­sis, en excluant ce qu’on lui demande d’ex­clure et d’en­voyer tout ça vers un serveur ftp, une machine distante acces­sible par ssh, un réper­toire ou une machine distante acces­sible vie rsync ou encore vers le cloud d’ama­zon.

On peut aussi deman­der à backup-mana­ger de sauve­gar­der une base mysql (ou toutes les bases que l’on possède) et ce, même à distance.

Enfin, backup-mana­ger effec­tue lui-même la rota­tion des archives.

Bref, à la fin de ma confi­gu­ra­tion, je n’ai eu qu’à mettre backup-mana­ger dans un cron kiva­bien et roulez jeunesse !

Comparé à d’autres solu­tions comme la créa­tion d’un miroir sur le serveur ftp (avec ncftp ou lftp par exemple) ou faire soi-même un script rsync qui va balan­cer le résul­tat de la synchro­ni­sa­tion sur le serveur ftp, backup-mana­ger est vrai­ment ce que j’ai trouvé de plus simple à confi­gu­rer et mettre en œuvre.

Comme d’ha­bi­tude :

# apt-get install backup-manager

EDIT : J’ai oublié de le dire, mais backup-mana­ger permet de cryp­ter les archives, pour plus de sécu­rité. C’est-y pas beau ça ?

Me soutenir sur Tipeee Me soutenir sur Liberapay