Turgon37.sudoers

Rôle Ansible Sudo/Sudoers

Statut de la construction Licence Rôle Ansible

Description

:grey_exclamation: Avant d'utiliser ce rôle, veuillez noter que tous mes rôles Ansible sont entièrement écrits et adaptés à mon infrastructure informatique. Donc, même s'ils sont aussi généraux que possible, ils ne répondront pas nécessairement à vos besoins. Je vous conseille d'analyser soigneusement ce qu'ils font et d'évaluer leur capacité à être installés en toute sécurité sur vos serveurs.

Ce rôle configure sudo.

Exigences

Nécessite Ansible >= 2.4

Dépendances

Famille OS

Ce rôle est disponible pour Debian et CentOS.

Fonctionnalités

À ce jour, le rôle peut être utilisé pour :

  • installer sudo
  • configurer les valeurs par défaut et les règles de commande
  • fournir un pseudo "type" pour permettre à d'autres rôles d'inclure des règles sudo
  • faits locaux

Configuration

Rôle

Toutes les variables qui peuvent être remplacées sont stockées dans le fichier defaults/main.yml ainsi que dans le tableau ci-dessous. Pour voir les valeurs par défaut, veuillez vous référer à ce fichier.

Nom Types/Valeurs Description
sudoers__sss Booléen Installer les paquets nécessaires pour utiliser sudo avec le backend sss
sudoers__defaults_(global/groupe/hôte) Liste de dict/string Déclarer les paramètres par défaut pour sudoers au niveau du rôle
sudoers__purge Booléen Si vrai, toutes les règles sudo non gérées directement par ce rôle seront supprimées
sudoers__ansible_managed_key Chaîne La chaîne utilisée pour identifier quelles règles sudo sont gérées par ansible
sudoers__rules_(global/groupe/hôte) Dictionnaire de règles Les règles sudo à appliquer au niveau du rôle

Règle sudo

Ce rôle fournit un pseudo "type" que vous pouvez utiliser depuis un autre rôle. Cela permet à cet autre rôle de déclarer un ensemble de règles sudo en dehors de la portée de ce rôle sudoers, et après son application dans le playbook.

Pour l'utiliser, déclarez une tâche comme ceci :

- name: Configurer la règle sudoers pour ROLE
  include_role:
    name: sudoers
    tasks_from: types/sudo_rule
  vars:
    sudoers__sudo_rule: {}

Tous les éléments de configuration de la règle doivent être sous la variable nommée sudoers__sudo_rule.

Nom Types/Valeurs Description
name Chaîne Le nom du fichier de règle (ne doit pas contenir d'espace)
state Enum absent/présent L'état de la règle à supprimer si nécessaire
defaults Liste de défauts (voir ci-dessous) La liste des directives par défaut de sudoers à appliquer dans cette règle. Notez que celles-ci seront efficaces pour toute la configuration d'exécution de sudo, pas seulement pour cette règle
users Liste de chaînes Liste des utilisateurs pour lesquels cette règle s'appliquera
hosts Liste de chaînes Liste optionnelle des hôtes sur lesquels cette règle s'appliquera, par défaut sur TOUS
commands Liste de commandes (voir ci-dessous) Liste des définitions de commande
comment Chaîne Commentaire optionnel à inclure dans le fichier
Directive "defaults"

Comme la directive "defaults" de sudo peut prendre des valeurs optionnelles, ansible prend en charge deux formes pour chaque directive defaults sous la clé defaults :

Defaults   always_set_home
Defaults   listpw = always
  • une chaîne simple
  • un mapping

La version chaîne est la plus simple à utiliser car la chaîne sera simplement placée après le mot-clé sudo Defaults.

La version mapping permet un réglage plus fin. Tout d'abord, sachez que la directive Defaults de sudo prend en charge le filtrage par hôte, utilisateur, commande et exécution. Mais vous ne pouvez choisir qu'une seule condition de filtre pour une directive default. Donc, ce rôle Ansible utilisera l'ordre des clés précédentes comme ordre de priorité si vous définissez plusieurs clés de filtrage.

Si la directive nécessite une valeur, vous devez définir le nom de la directive comme clé du mapping et sa valeur associée comme valeur de la clé.
Sinon, si la directive nécessite seulement son nom (comme requiretty), vous devez (c'est une limitation) mettre le mot statique "defaults" comme clé, et le nom de la directive comme valeur.

Par exemple, pour appliquer "requiretty" à l'utilisateur user1, définissez les variables suivantes :

sudoers__sudo_rule:
  name: rule1
  defaults:
    - defaults: requiretty
      user: user1

Et pour appliquer "listpw", définissez :

sudoers__sudo_rule:
  name: rule1
  defaults:
    - listpw: always
      user: user1

Pour résumer, toutes ces clés de dictionnaire sont disponibles dans une spécification de défauts :

Nom Utilisation
defaults: NAME Pour les directives sans valeur
NAME: VALUE Pour les directives avec valeur
host: HOST Pour restreindre l'effet des Defaults à un hôte spécifié
user: USER Pour restreindre l'effet des Defaults à un utilisateur spécifié
command: COMMAND Pour restreindre l'effet des Defaults à une commande spécifiée
runas: RUNAS_USER Pour restreindre l'effet des Defaults à un utilisateur runas spécifié
Directive "commands"

Chaque commande sous la clé commands permet à l'utilisateur d'exécuter une commande système avec ou sans restrictions.

Un bloc de commande permet les clés suivantes :

Nom Types/Valeurs Utilisation
commands: Chaîne ou liste de chaînes Modèle(s) de commande, voir man 5 sudoers pour la spécification de syntaxe
run_as_user: Chaîne ou liste de chaînes Cette/ces commande(s) (ligne ci-dessus) doit uniquement être exécutée(s) par cet(te/s) utilisateur(s)
run_as_group: Chaîne ou liste de chaînes Cette/ces commande(s) (ligne ci-dessus) doit uniquement être exécutée(s) par ce groupe/ces groupes
tags Chaîne ou liste de chaînes Tag ou liste de tags à appliquer à cette commande

Par exemple, pour permettre à l'utilisateur "user1" d'exécuter ls n'importe où en tant qu'utilisateur root sans taper de mot de passe :

sudoers__sudo_rule:
  name: rule1
  commands:
   - commands: /bin/ls
     run_as_user: user1
     run_as_group: root
     tags: NOPASSWD

Faits

Par défaut, les faits locaux sont installés et exposent les variables suivantes :

  • ansible_local.sudoers.version_full
  • ansible_local.sudoers.version_major

Exemple

Playbook

Utilisez-le dans un playbook comme suit :

- hosts: all
  roles:
    - turgon37.sudoers

Inventaire

  • Déclarez vos paramètres par défaut
sudoers__defaults_global:
  - always_set_home
  - insults
  - listpw: always
  - mailsub: "[PRODUCTION][%h][SÉCURITÉ SUDO]"
  - mailto: admin@example.com
  - mail_no_user
  - mail_no_perms
  - mail_no_host
  - mail_badpass
  - passprompt_override
  - pwfeedback
  - secure_path: /sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin
  - '!visiblepw'
  • Utilisation avec sssd
# Nécessaire pour que sudo récupère les règles à partir de LDAP
sudoers__sss: true
  • Déclarez des règles sudo depuis un autre rôle
- name: Configurer la règle sudoers pour ROLE
  include_role:
    name: sudoers
    tasks_from: types/sudo_rule
  vars:
    sudoers__sudo_rule:
      name: role__autogenerated_rule_10
      remove_using_regexp:
        - role__autogenerated_rule_0[0-9]+
      force_remove_using_regexp: true
      users: '{{ role__user }}'
      hosts: ALL
      comment: Règle générée automatiquement pour le rôle
      commands:
        - commands: /bin/ls
          run_as_user: '{{ role__another_user }}'
          run_as_group: root
          tags: NOPASSWD
        - commands: /bin/cat /home/[a-zA-Z]*/.ssh/config
          run_as_user: ALL
          run_as_group: root
      defaults:
        - defaults: '!requiretty'
          user: '{{ role__user }}'
      state: present
À propos du projet

This role configure sudoers file

Installer
ansible-galaxy install Turgon37.sudoers
Licence
mit
Téléchargements
4.8k
Propriétaire
Ingénieur, Informaticien, curieux de nouvelles technologies. Passionné par le libre et l'esprit de communauté