ssh bien configuré et sécure
“Pentesting Guide
“In this guide, I will: Quickly introduce the SSH protocol and implementations.Expose some common configuration mistakes then showcase some attacks on the protocol & implementations.Present some SSH pentesting blue team tools.” https://community.turgensec.com/ssh-hacking-guide/
Pour provisioning et orchestration sans agent installé sur les serveurs cibles avec un lanage yaml
et Template Jinja, permet également de faire des migrations
Outil idempotence, si on lance deux fois le cahier de jeux :
Un module Ansible environ 15 lignes en python (snippets) qui sera installé à coté du playbook dans ./library
dans le cas de choes trop complexe avec ansible que l'on pourrait faire en python.
Dans Ansible :
ansible-galaxy init <mon_role_voulu>
crée le squelette, la structure du roleref : https://invidio.us/watch?v=jePp5ZP1n14&autoplay=0&continue=0&dark_mode=true&listen=0&local=1&loop=0&nojs=0&player_style=youtube&quality=dash&thin_mode=false à partir de 29 min 30 sec
requirements.yml
puis faire un commande pour rendre disponible et in installer tous ces roles d'un coup ansible-galaxy install -r requirements.yml
Depuis un dossier, par exemple, host
puis les rôles, avec des sous-dossiers, créés avec ansible galaxy
pour chaque rôle
playbook
est le fichier passé en paramètre pour point d'entrée pour apllique l'ensemble de la recette, ici pour exmple avec 2 types de recettes
ssh
root
web
et common
database
root
common
et database
yaml
Notification possible de la mise en application d'une recette via irc, mail, jabber…
Pour concevoir une tache à l'inétrieur d'un rôle, oou plusieurs taches
vim
vim
est ici apt
latest
, dernière versionupdate case
, précision avant d'installer, faire un apt-get update
pour mise à jourgit
qui ne nécessite plus update
puisqu'il a été réalisé à la tâche précédenteDans le cas d'installer beaucoup de package on peut utiliser un boucle pour alléger le nombre de taches
Il s'agit de passer un liste de packages à installer avec état latest
et update
avant d'installer
Pour le boucle, par exemple ici pour installation, depuis un with_item.yml
- name : Installation de logiciels pour communs apt: name={{ item }} state=latest update-case=yes with_items: - vim - git
ou
- name : Installation de logiciels pour communs apt: name="{{ item }}" state=latest update-case=yes with_items: - vim - git
En gros, objet ou strings
Ou alors j'ai fait un erreur 🤔
Il y a name: "{{ item.name }}"
dans la doc https://docs.ansible.com/ansible/latest/user_guide/playbooks_loops.html?highlight=loop#standard-loops
{{ }}
entre quotes. Même si à l'intérieur c'est un objet qui sera dépilé par ansible automatiquement lors de la phase du parsing
“Strings (scalars) are ordinarily unquoted, but may be enclosed in double-quotes (”), or single-quotes (').” https://en.wikipedia.org/wiki/YAML
C'est parce que les {{ }}
sont interpretées en yaml qu'il faut les quoter pour qu'ansible puisse les parser
En yaml on utilise :
tout le temps. Les =
peuvent servir pour tout mettre sur une seule ligne, déconsiellé car assez crade.
Merci <3 Inso pour ton aide
Dérivé de la question ci-dessus,
state=present
semble plus dans la
logique d'idempotence que state=latest
, et, de plus, si on veut assurer que
le systeme soit à jour il faut l'assurer par un autre mecanisme
(typiquement unattended-upgrades dans le monde APT)
Une discussion en cours apparait mener à des distinctions plus claires entre latest
et present
https://github.com/ansible/ansible-lint/pull/568
Merci Samuel pour ton aide
La première configuration qu'ansible met en œuvre désactive l'authentification SSH par mot de passe
Depuis le système de contrôle (depuis lequel on lance ansible) ssh-keygen -o && scp ~/.ssh/id_rsa.pub user@mamachine_cible:~/.ssh/authorized_keys
avec l'IP de la machine plutôt que son nom
sécu des clés, en gros le choix des 'Digital Signature Algorithm' et compatibilité (je dois regarder du coup ecdsa et ansible https://docs.ansible.com/ansible/latest/modules/openssh_keypair_module.html)
il faudra vérifier que cela ne casse pas des compatibilités (https://tools.ietf.org/html/rfc4251) entre différents systèmes et aussi des raisonnements sur la robustesse https://www.ssh.com/ssh/keygen