Ansible préparation d'un systeme

Le besoin est de pouvoir standardiser la sécurité et la personnalisation des serveurs. Mon objectif est ici définir un “kit” permettant de préparer un environnement linux (Debian) à l’automatisation via ansible.

La première étape est de configurer un compte dédié à l’automatisation qui pourra réaliser une escalade de privilège via sudo.

Pour l’exemple, j’appliquerai cette automatisation à un serveur hébergé chez Scaleway.

Source disponible sur : https://github.com/dakiri/init_system

Création des tâches

  1. Installation de sudo
  2. Création d’un nouveau compte
  3. Affectation d’une clé ssh de connexion
  4. Affectation des droits sudo

(l’arborescence aura été préparé via ``` ansible-galaxy init init_system

Création d’un compte ansible avec les droits sudo :

tasks/main.yml
  • name: install sudo apt: name: “sudo” state: latest become: yes become_method: su

  • name: Set includedir in sudoers lineinfile: dest: /etc/sudoers line: “#includedir /etc/sudoers.d” state: present become: yes become_method: su

  • name: create user-ansible user: name: user-ansible comment: For automation groups: sudo shell: /bin/bash append: yes become: yes become_method: su

  • name: Add user “user-ansible” to sudo lineinfile: path: /etc/sudoers.d/user-ansible line: ‘user-ansible ALL=(ALL) NOPASSWD: ALL’ state: present mode: 0440 create: yes become: yes become_method: su

  • name: Set up multiple authorized keys authorized_key: user: user-ansible state: present key: “{{ item }}” key_options: “no-port-forwarding” with_file:

    • ~/.ssh/id_ecdsa.pub become: yes become_method: su

      ## Création de la recette
      
      init_system/playbook.yml
  • name: “Install sudo & ansible user” hosts: all

roles: - “init_system”

# Application chez Scaleway

Je travaille sur un serveur debian fraichement provisionné. La première connexion à distance est réalisée via une authentification par clé sur le compte root.


## Génération de la clé

$ ssh-keygen -f ~/.ssh/id_initialLogin -t ed25519

Generating public/private ed25519 key pair. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/eric/.ssh/id_initialLogin. Your public key has been saved in /home/eric/.ssh/id_initialLogin.pub.

Limitation des droits d'accès aux clés :

chmod 600 /home/eric/.ssh/id_initialLogin*

## Déclaration de la clé sur le serveur

On utilise la console scaleway :







  
  











Redemarrer le serveur pour la prise en compte (ou se connecter via la console web et executer la commande scw-fetch-ssh-keys --upgrade ## Création d’un inventaire

myhosts:

hosts: host1: ansible_ssh_private_key_file: “~/.ssh/id_initialLogin”

## Validation de la connexion 

$ ansible -i inventory_redteams.yml -m ping all –user root

Enter passphrase for key ‘/home/eric/.ssh/id_initialLogin’: [WARNING]: Platform linux on host host1 is using the discovered Python interpreter at /usr/bin/python, but future installation of another Python interpreter could change this. See https://docs.ansible.com/ansible/2.9/reference_appendices/interpreter_discovery.html for more information.

host1 | SUCCESS => { “ansible_facts”: { “discovered_interpreter_python”: “/usr/bin/python” }, “changed”: false, “ping”:

<div class="alert alert-note">
  <div>
    <p>Il est possible d’utiliser ssh agent pour mémoriser la clé :</p>
<pre tabindex="0"><code>eval &quot;$(ssh-agent -s)&quot;

ssh-add ~/.ssh/id_initialLogin

Enter passphrase for /home/eric/.ssh/id_initialLogin: 
Identity added: /home/eric/.ssh/id_initialLogin (eric@DESKTOP-JS69KRL)
</code></pre>
  </div>
</div>



## Création de la clé pour l'utilisateur

$ ssh-keygen -f ~/.ssh/id_ansible -t ed25519

## Préparation de l'inventaire 

myhosts:

hosts: host1: ansible_ssh_private_key_file: “~/.ssh/id_initialLogin” ansible_user: “root”

vars:

 system:
    ansible_user: "user-ansible"
    ansible_pub_key: "~/.ssh/id_ansible"

```

Related