ahuffman.sudoers

Ansible-Rolle

ahuffman.sudoers

Steuert die Konfiguration der standardmäßigen Datei /etc/sudoers sowie enthaltene Dateien und Verzeichnisse.


Bitte beachten: Version 2.0.0+ ist eine umfassende Neugestaltung der Rolle. Lesen Sie die Dokumentation, um sicherzustellen, dass Sie die Änderungen vor der Installation und Nutzung verstehen, insbesondere wenn Sie von vorherigen Versionen kommen.


Inhaltsverzeichnis

  1. Inhaltsverzeichnis
  2. Tipps
  3. Rollenvariablen
  4. Felder des sudoers_files-Dictionaries
    1. Felder des sudoers_files.aliases-Dictionaries
    2. Felder des user_specifications-Dictionaries
  5. Automatisches Generieren der Sudoers-Dateien aus einer bestehenden Konfiguration
  6. Beispiel-Playbooks
  7. Lizenz
  8. Autoreninformation

Tipps

Tipp: Hier sind einige hervorragende Ressourcen zur Konfiguration von sudoers:
Hier starten - Bietet eine großartige Übersicht über grundlegende Konfigurationen und Begriffe zu sudoers.
Sudoers-Handbuch - Wenn Sie alle Details wissen möchten, ist das für Sie.

Rollenvariablen

Die Standardwerte für diese Rolle basieren auf einer Standard-RHEL7.6-Konfiguration der Datei /etc/sudoers. Bitte überprüfen Sie die Standardwerte in defaults/main.yml, bevor Sie sie für die Betriebssystemkompatibilität ausführen.

Variablenname Beschreibung Standardwert Variablentyp
sudoers_rewrite_default_sudoers_file Verwenden Sie die standardmäßigen oder benutzerdefinierten Definitionen für sudoers_files, um Ihre gelieferte /etc/sudoers-Datei zu ersetzen. Nützlich, wenn Sie neue Konfigurationsdateien in die include_directories bereitstellen möchten, ohne die Datei /etc/sudoers zu ändern. True boolean
sudoers_remove_unauthorized_included_files Sehr gefährlich! Jede vorhandene sudoer-Datei in dem include_directories-Dictionary, die nicht in den sudoers_files definiert ist, wird entfernt. Dies ermöglicht die Durchsetzung eines gewünschten Zustands. False boolean
sudoers_backup Ob eine Sicherung des aktuellen Zustands der bestehenden Datei /etc/sudoers sowie von in sudoers_files definierten Dateien erstellt werden soll. Die Dateien werden auf dem Ansible-Steuerknoten (Server, von dem Sie Ansible ausführen) gesichert, um zu vermeiden, dass versehentlich Dateien in Ihren include_directories zurückgelassen werden, die von den sudoers-Konfiguration(en) ausgewertet werden können. True boolean
sudoers_backup_path Pfad relativ zu dem Ort, an dem Sie Ihr Playbook ausführen, um die Remote-Kopien der definierten sudoers_files zu sichern. "sudoers_backups" string
sudoers_backup_become Ob sudo verwendet werden soll, wenn das lokale Verzeichnis für Backups von sudoers und die Backups der sudoers-Dateien erstellt werden. True boolean
sudoers_visudo_path Vollständiger Pfad zur visudo-Binärdatei, die für die Validierung von Änderungen in der sudoers-Konfiguration erforderlich ist. Hinzugefügt für die Betriebssystemkompatibilität. "/usr/sbin/visudo" string
sudoers_files Definition aller Ihrer sudoers-Konfigurationen siehe defaults/main.yml Liste von Dictionaries

Felder des sudoers_files-Dictionaries

Variablenname Beschreibung Variablentyp
path Wo die Konfigurationsdatei im Dateisystem bereitgestellt werden soll. string
aliases Optionale Definition von cmnd_alias, host_alias, runas_alias oder user_alias-Elementen. dictionary
defaults Ermöglicht Ihnen die Definition der Defaults Ihrer sudoers-Konfiguration. Standardüberschreibungen können über den user_specifications-Schlüssel erfolgen. Liste
include_files Optionale spezifische Dateien, die in Ihre Konfiguration einbezogen werden sollen. Dies ist eine Liste von vollständig qualifizierten Pfaden, die über die #include-Option einer sudoers-Konfiguration einbezogen werden. Liste
include_directories Optionale spezifische Verzeichnisse, die Sie in Ihre Konfiguration einbeziehen möchten. Dies ist eine Liste von vollständig qualifizierten Pfaden zu Verzeichnissen, die über die #includedir-Option einer sudoers-Konfiguration einbezogen werden. Liste
user_specifications Liste von Benutzerspezifikationen und Standardüberschreibungen, die auf eine sudoers-Dateikonfiguration anzuwenden sind. Liste

Felder des sudoers_files.aliases-Dictionaries

Variablenname Beschreibung Variablentyp
cmnd_alias Liste der Definitionen für Befehlsalias. Liste von Dictionaries
host_alias Liste der Definitionen für Hostalias Liste von Dictionaries
runas_alias Liste der Definitionen für den Benutzer, unter dem ausgeführt werden soll Liste von Dictionaries
user_alias Liste der Definitionen für Benutzeralias Liste von Dictionaries

Felder des cmnd_alias-Dictionaries

Variablenname Beschreibung Variablentyp
name Name des Befehlsalias. string
commands Liste der Befehle, die auf das Alias angewendet werden sollen Liste

Felder des host_alias-Dictionaries

Variablenname Beschreibung Variablentyp
name Name des Hostalias. string
hosts Liste der Hosts, die auf das Alias angewendet werden sollen Liste

Felder des runas_alias-Dictionaries

Variablenname Beschreibung Variablentyp
name Name des runas-Alias string
users Liste der Benutzer, die auf das Alias angewendet werden sollen Liste

Felder des user_alias-Dictionaries

Variablenname Beschreibung Variablentyp
name Name des user_alias string
users Liste der Benutzer, die auf das Alias angewendet werden sollen Liste

Felder des user_specifications-Dictionaries

Dieses Dictionary kann verwendet werden, um entweder Benutzerspezifikationen oder Standardüberschreibungen zuzuweisen.

Standard-Benutzerspezifikationen

Variablenname Beschreibung Variablentyp
users Liste der Benutzer, auf die die Spezifikation angewendet werden soll. Sie können sowohl einen user_alias-Namen als auch Benutzernamen verwenden. Liste
hosts Liste der Hosts, auf die die Spezifikation angewendet werden soll. Sie können sowohl einen definierten host_alias-Namen als auch Hostnamen verwenden. Liste
operators Liste der Operatoren, auf die die Spezifikation angewendet werden soll. Sie können sowohl einen definierten runas_alias-Namen als auch Benutzernamen verwenden. Liste
selinux_role Optionale SELinux-Rolle, die auf die Spezifikation angewendet werden soll Liste
selinux_type Optionaler SELinux-Typ, der auf die Spezifikation angewendet werden soll Liste
solaris_privs Optionale Solaris-Privilegien, die auf die Spezifikation angewendet werden sollen Liste
solaris_limitprivs Optionale Solaris-Privilegien, die auf die Spezifikation angewendet werden sollen Liste
tags Optionale Liste von Tags, die auf die Spezifikation angewendet werden sollen. Liste
commands Liste der Befehle, auf die die Spezifikation angewendet werden soll. Sie können sowohl einen definierten cmnd_alias-Namen als auch Befehle verwenden. Liste

Standardüberschreibung von Benutzerspezifikationen

Variablenname Beschreibung Variablentyp
defaults Liste der Standards, die aus der Hauptkonfiguration überschrieben werden sollen Liste
type Typ des zu überschreibenden Standards, dies beeinflusst den Operator in der Konfiguration (host -> @, user -> :, command -> !, und runas -> >). Das Typ-Feld kann einen der folgenden Werte haben: command, host, runas oder user. string
commands Verwenden Sie, wenn type: "command". Liste von cmnd_alias-Namen sowie Befehlen zur Überschreibung bestimmter Standardwerte. Liste
hosts Verwenden Sie, wenn type: "host". Liste von host_alias-Namen sowie einzelnen Hostnamen zur Überschreibung bestimmter Standardwerte. Liste
operators Verwenden Sie, wenn type: "runas". Liste von runas_alias-Namen sowie einzelnen Benutzernamen zur Überschreibung bestimmter Standardwerte. Liste
users Verwenden Sie, wenn type: "user". Liste von user_alias-Namen sowie einzelnen Benutzernamen zur Überschreibung bestimmter Standardwerte. Liste

Automatisches Generieren der Sudoers-Dateien aus einer bestehenden Konfiguration

Klingt das alles viel zu kompliziert, um es aus der Dokumentation zu konfigurieren? Bitte probieren Sie ahuffman.scan_sudoers aus, um eine Rolle zu finden, die die richtige Datenstruktur für Sie automatisch generieren kann. Mit der Rolle ahuffman.scan_sudoers können Sie eine laufende Konfiguration in einem Play erfassen und in einem anderen mit der Rolle ahuffman.sudoers (Version 2.0.0+) anwenden. Sie können auch die gesammelten Daten in eine Quelle der Wahrheit wie eine CMDB oder ein Repository via Automatisierung einpflegen. Die gesammelten Daten, die von ahuffman.scan_sudoers erzeugt werden, können von ahuffman.sudoers konsumiert werden: {{ ansible_facts['sudoers'].sudoers_files }}.

Dies sollte helfen, einige der Komplikationen bei der manuellen Definition der sudoers-Konfigurationen als Code zu verringern und Sie viel schneller in Betrieb zu nehmen.

Siehe das Beispiel-Playbook unten.

Beispiel-Playbooks

RHEL7.6 Standard-Sudoers-Konfiguration

- name: "RHEL7.6 Standard /etc/sudoers-Konfiguration anwenden"
  hosts: "alle"
  roles:
    - role: "ahuffman.sudoers"

...oder mit moderner Syntax:

- name: "RHEL7.6 Standard /etc/sudoers-Konfiguration anwenden"
  hosts: "alle"
  tasks:
    - name: "Konfigurieren von /etc/sudoers"
      include_role:
        name: "ahuffman.sudoers"

Ergebnisse: /etc/sudoers

Die obigen beiden Beispiele, die die Standardwerte der Rolle verwenden, erzeugen eine Konfigurationsdatei /etc/sudoers, die folgendermaßen aussieht:

# Von Ansible verwaltet

# Standard-Spezifikationen
Defaults    !visiblepw
Defaults    always_set_home
Defaults    match_group_by_gid
Defaults    always_query_group_plugin
Defaults    env_reset
Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin
Defaults    env_keep = "COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR"
Defaults    env_keep += "LS_COLORS MAIL PS1 PS2 QTDIR"
Defaults    env_keep += "USERNAME LANG LC_ADDRESS LC_CTYPE LC_COLLATE"
Defaults    env_keep += "LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME"
Defaults    env_keep += "LC_NUMERIC LC_PAPER LC_TELEPHONE LC_TIME LC_ALL"
Defaults    env_keep += "LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY"

# Benutzerspezifikationen
root ALL=(ALL) ALL
%wheel ALL=(ALL) ALL

# Includes
## Include-Verzeichnisse
#includedir /etc/sudoers.d

Sudoers-Konfiguration (mehrere Dateien)

- name: "Mehrfache Sudoers-Konfiguration anwenden"
  hosts: "alle"
  tasks:
    - name: "Konfigurieren von /etc/sudoers und enthaltenen Dateien"
      include_role:
        name: "ahuffman.sudoers"
      vars:
        sudoers_rewrite_default_sudoers_file: True
        sudoers_remove_unauthorized_included_files: True
        sudoers_backup: True
        sudoers_backup_path: "sudoers-backups"
        sudoers_files:
          - path: "/etc/sudoers"
            defaults:
              - "!visiblepw"
              - "always_set_home"
              - "match_group_by_gid"
              - "always_query_group_plugin" # bewahrt das Verhalten der Gruppen von sudo vor Version 1.8.15
              - "env_reset"
              - secure_path:
                  - "/sbin"
                  - "/bin"
                  - "/usr/sbin"
                  - "/usr/bin"
              - env_keep:
                  - "COLORS"
                  - "DISPLAY"
                  - "HOSTNAME"
                  - "HISTSIZE"
                  - "KDEDIR"
                  - "LS_COLORS"
                  - "MAIL"
                  - "PS1"
                  - "PS2"
                  - "QTDIR"
                  - "USERNAME"
                  - "LANG"
                  - "LC_ADDRESS"
                  - "LC_CTYPE"
                  - "LC_COLLATE"
                  - "LC_IDENTIFICATION"
                  - "LC_MEASUREMENT"
                  - "LC_MESSAGES"
                  - "LC_MONETARY"
                  - "LC_NAME"
                  - "LC_NUMERIC"
                  - "LC_PAPER"
                  - "LC_TELEPHONE"
                  - "LC_TIME"
                  - "LC_ALL"
                  - "LANGUAGE"
                  - "LINGUAS"
                  - "_XKB_CHARSET"
                  - "XAUTHORITY"
            user_specifications:
              - users:
                  - "root"
                hosts:
                  - "ALL"
                operators:
                  - "ALL"
                commands:
                  - "ALL"
              - users:
                  - "%wheel"
                hosts:
                  - "ALL"
                operators:
                  - "ALL"
                commands:
                  - "ALL"
            include_directories:
              - "/etc/sudoers.d"
            aliases:
              cmnd_alias:
                - name: "PING"
                  commands:
                    - "/bin/ping"
              user_alias:
                - name: "PINGERS"
                  users:
                    - "ahuffman"
          - path: "/etc/sudoers.d/pingers"
            user_specifications:
              - type: "user"
                defaults:
                  - "!requiretty"
                users:
                  - "PINGERS"
          - path: "/etc/sudoers.d/root"
            defaults:
              - "syslog=auth"
            user_specifications:
              - type: "runas"
                defaults:
                  - "!set_logname"
                operators:
                  - "root"

Das obige Beispiel erzeugt die folgenden Konfigurationsdateien:

Ergebnisse: /etc/sudoers

# Von Ansible verwaltet

# Standard-Spezifikationen
Defaults    !visiblepw
Defaults    always_set_home
Defaults    match_group_by_gid
Defaults    always_query_group_plugin
Defaults    env_reset
Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin
Defaults    env_keep = "COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR"
Defaults    env_keep += "LS_COLORS MAIL PS1 PS2 QTDIR"
Defaults    env_keep += "USERNAME LANG LC_ADDRESS LC_CTYPE LC_COLLATE"
Defaults    env_keep += "LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME"
Defaults    env_keep += "LC_NUMERIC LC_PAPER LC_TELEPHONE LC_TIME LC_ALL"
Defaults    env_keep += "LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY"

# Alias-Spezifikationen
## Befehls-Alias
Cmnd_Alias    PING = /bin/ping

## Benutzer-Alias
User_Alias    PINGERS = ahuffman

# Benutzerspezifikationen
root ALL=(ALL) ALL
%wheel ALL=(ALL) ALL

# Includes
## Include-Verzeichnisse
#includedir /etc/sudoers.d

Ergebnisse: /etc/sudoers.d/pingers

# Von Ansible verwaltet

# Standardüberschreibungs-Spezifikationen
Defaults:PINGERS !requiretty

Ergebnisse: /etc/sudoers.d/root

# Von Ansible verwaltet

# Standard-Spezifikationen
Defaults    syslog=auth

# Standardüberschreibungs-Spezifikationen
Defaults>root !set_logname

Migrieren einer laufenden Sudoers-Konfiguration zu einem anderen Host

---
- name: "Existierende Sudoers-Fakten erfassen"
  hosts: "source-host"
  tasks:
    - name: "Laufende Sudoers-Konfiguration erfassen"
      include_role:
        name: "ahuffman.scan_sudoers"

    - name: "Gesammelte Sudoers-Fakten setzen"
      set_fact:
        sudoers_files: "{{ ansible_facts['sudoers'].sudoers_files }}"

    - name: "Gesammelte Sudoers-Konfigurationsfakten anzeigen"
      debug:
        var: "sudoers_files"
        verbosity: "1"

- name: "Laufende Konfiguration auf Ziel bereitstellen"
  hosts: "destination-host"
  tasks:
    - include_role:
        name: "ahuffman.sudoers"
      vars:
        sudoers_remove_unauthorized_included_files: True

Das obige Beispiel bietet eine Methode, um Infrastruktur als Code umzukehren, um eine bekannte Konfiguration in strukturierte Daten zu konvertieren, die zukünftige Automatisierungen steuern. Alternativ zur direkten Bereitstellung der gesammelten Konfiguration auf einem neuen Host könnten Sie die Daten in eine CMDB oder ein Repository zur künftigen Verwendung als Quelle der Wahrheit einpflegen.

Lizenz

MIT

Autoreninformation

Andrew J. Huffman
Tyler Cross

Über das Projekt

Controls the configuration of the default /etc/sudoers file and included files/directories

Installieren
ansible-galaxy install ahuffman.sudoers
Lizenz
mit
Downloads
34.8k