ahuffman.sudoers

Rola Ansible

ahuffman.sudoers

Kontroluje konfigurację domyślnego pliku /etc/sudoers oraz uwzględnionych plików i katalogów.


Proszę pamiętać, że wersja 2.0.0+ jest głównym przepisaniem tej roli. Proszę przeczytać dokumentację, aby zrozumieć zmiany przed instalacją i używaniem, jeśli przechodzisz z wcześniejszych wersji.


Spis treści

  1. Spis treści
  2. Wskazówki
  3. Zmienne roli
  4. Pola słownika sudoers_files
    1. Pola słownika sudoers_files.aliases
      1. Pola słownika cmnd_alias
      2. Pola słownika host_alias
      3. Pola słownika runas_alias
      4. Pola słownika user_alias
    2. Pola słownika user_specifications
      1. Standardowe user_specifications
      2. Domyślny nadpis użytkownika specifications
  5. Automatyczne generowanie danych plików sudoers z istniejącej konfiguracji
  6. Przykłady playbooków
    1. Domyślna konfiguracja sudoers RHEL7.6
      1. Wyniki: /etc/sudoers
    2. Konfiguracja sudoers (wiele plików)
      1. Wyniki: /etc/sudoers
      2. Wyniki: /etc/sudoers.d/pingers
      3. Wyniki: /etc/sudoers.d/root
    3. Migracja działającej konfiguracji sudoers na inny host
  7. Licencja
  8. Informacje o autorze

Wskazówki

Wskazówka: Oto kilka doskonałych zasobów dotyczących konfiguracji sudoers:
Zacznij tutaj - Świetne wprowadzenie do podstawowych konfiguracji plików sudoers oraz terminologii
Podręcznik sudoers - Jeśli chcesz poznać wszystkie szczegóły, to jest dla Ciebie.

Zmienne roli

Domyślne wartości zdefiniowane dla tej roli są oparte na domyślnej konfiguracji /etc/sudoers RHEL7.6. Proszę sprawdzić domyślne wartości w defaults/main.yml przed uruchomieniem, aby zapewnić zgodność z systemem operacyjnym.

Nazwa zmiennej Opis Wartość domyślna Typ zmiennej
sudoers_rewrite_default_sudoers_file Użyj domyślnych wartości roli lub zdefiniowanych przez użytkownika definicji sudoers_files, zastępując dostarczony przez dystrybucję plik /etc/sudoers. Może być użyteczne przy wdrażaniu nowych plików konfiguracyjnych do include_directories bez modyfikowania pliku /etc/sudoers. True boolean
sudoers_remove_unauthorized_included_files Bardzo niebezpieczne! Każdy istniejący plik sudoer w słowniku include_directories, który nie został zdefiniowany w sudoers_files, zostanie usunięty. Pozwala to na wymuszenie pożądanego stanu. False boolean
sudoers_backup Czy utworzyć kopię zapasową aktualnego stanu istniejącego pliku /etc/sudoers oraz wszelkich plików zdefiniowanych w sudoers_files. Pliki są kopiowane do węzła kontrolnego Ansible (serwer, z którego wykonujesz Ansible) i zapobiega to przypadkowemu pozostawieniu plików w include_directories, które mogą być oceniane przez konfigurację sudoers. True boolean
sudoers_backup_path Ścieżka względem lokalizacji, w której wykonujesz swój playbook, aby skopiować zdalne kopie zdefiniowanych sudoers_files. "sudoers_backups" string
sudoers_backup_become Czy używać sudo podczas tworzenia lokalnego katalogu kopii zapasowej sudoers oraz kopii zapasowych plików sudoers. True boolean
sudoers_visudo_path Pełna ścieżka do binarnego pliku visudo, wymagana do walidacji zmian konfiguracji sudoers. Dodane dla zgodności z systemem operacyjnym. "/usr/sbin/visudo" string
sudoers_files Definicja wszystkich konfiguracji sudoers. zobacz defaults/main.yml lista słowników

Pola słownika sudoers_files

Nazwa zmiennej Opis Typ zmiennej
path Miejsce wdrożenia pliku konfiguracyjnego w systemie plików. string
aliases Opcjonalna definicja elementów cmnd_alias, host_alias, runas_alias lub user_alias. słownik
defaults Pozwala na zdefiniowanie domyślnych ustawień dla konfiguracji sudoers. Domyślne nadpisania można wykonać przy użyciu klucza user_specifications. lista
include_files Opcjonalne specyficzne pliki, które chciałbyś, aby twoja konfiguracja zawierała. Jest to lista w pełni kwalifikowanych ścieżek do uwzględnienia za pomocą opcji #include w konfiguracji sudoers. lista
include_directories Opcjonalne specyficzne katalogi, które chciałbyś, aby twoje konfiguracje zawierały. Jest to lista w pełni kwalifikowanych ścieżek do katalogów do uwzględnienia za pomocą opcji #includedir w konfiguracji sudoers. lista
user_specifications Lista specyfikacji użytkowników oraz domyślnych nadpisów stosowanych do konfiguracji pliku sudoers. lista

Pola słownika sudoers_files.aliases

Nazwa zmiennej Opis Typ zmiennej
cmnd_alias Lista definicji aliasów komend. lista słowników
host_alias Lista definicji aliasów hostów. lista słowników
runas_alias Lista definicji aliasów runas. lista słowników
user_alias Lista definicji aliasów użytkowników. lista słowników

Pola słownika cmnd_alias

Nazwa zmiennej Opis Typ zmiennej
name Nazwa aliasu komendy. string
commands Lista komend do zastosowania w aliasie. lista

Pola słownika host_alias

Nazwa zmiennej Opis Typ zmiennej
name Nazwa aliasu hosta. string
hosts Lista hostów do zastosowania w aliasie. lista

Pola słownika runas_alias

Nazwa zmiennej Opis Typ zmiennej
name Nazwa aliasu runas. string
users Lista użytkowników do zastosowania w aliasie. lista

Pola słownika user_alias

Nazwa zmiennej Opis Typ zmiennej
name Nazwa aliasu użytkownika. string
users Lista użytkowników do zastosowania w aliasie. lista

Pola słownika user_specifications

Ten słownik może być użyty do przypisania specyfikacji użytkowników lub domyślnych nadpisów.

Standardowe user_specifications

Nazwa zmiennej Opis Typ zmiennej
users Lista użytkowników do zastosowania do specyfikacji. Możesz użyć nazwy user_alias oraz nazw użytkowników. lista
hosts Lista hostów do zastosowania do specyfikacji. Możesz użyć zdefiniowanej nazwy host_alias oraz nazw hostów. lista
operators Lista operatorów do zastosowania do specyfikacji. Możesz użyć zdefiniowanej nazwy runas_alias oraz nazw użytkowników. lista
selinux_role Opcjonalna rola selinux do zastosowania do specyfikacji. lista
selinux_type Opcjonalny typ selinux do zastosowania do specyfikacji. lista
solaris_privs Opcjonalny zbiór uprawnień Solaris do zastosowania do specyfikacji. lista
solaris_limitprivs Opcjonalny zbiór limitów Solaris do zastosowania do specyfikacji. lista
tags Opcjonalna lista tagów do zastosowania do specyfikacji. lista
commands Lista komend do zastosowania w specyfikacji. Możesz użyć zdefiniowanej nazwy cmnd_alias oraz komend. lista

Domyślny nadpis użytkownika specifications

Nazwa zmiennej Opis Typ zmiennej
defaults Lista domyślnych ustawień do nadpisania z głównej konfiguracji. lista
type Typ domyślnego nadpisania, który wpływa na operatora w konfiguracji (host -> @, user -> :, command -> !, runas -> >). Pole typu może mieć jedną z następujących wartości: command, host, runas lub user. string
commands Użyj podczas type: "command". Lista nazw cmnd_alias oraz komend do nadpisania konkretnych wartości domyślnych. lista
hosts Użyj podczas type: "host". Lista nazw host_alias oraz indywidualnych nazw hostów do nadpisania konkretnych wartości domyślnych. lista
operators Użyj podczas type: "runas". Lista nazw runas_alias oraz indywidualnych nazw użytkowników do nadpisania konkretnych wartości domyślnych. lista
users Użyj podczas type: "user". Lista nazw user_alias oraz indywidualnych nazw użytkowników do nadpisania konkretnych wartości domyślnych. lista

Automatyczne generowanie danych plików sudoers z istniejącej konfiguracji

Czy to wszystko brzmi zbyt skomplikowanie do skonfigurowania na podstawie dokumentacji? Proszę wypróbować ahuffman.scan_sudoers, aby znaleźć rolę, która może automatycznie wygenerować odpowiednią strukturę danych dla Ciebie. Dzięki roli ahuffman.scan_sudoers możesz w jednym playu przenieść działającą konfigurację i wdrożyć ją na innym z rolą ahuffman.sudoers (wersja 2.0.0+). Możesz także zdecydować się na przesłanie zebranych danych do źródła prawdy, takiego jak CMDB lub repozytorium, poprzez automatyzację. Zebrane dane wygenerowane przez ahuffman.scan_sudoers mogą być używane przez ahuffman.sudoers jako {{ ansible_facts['sudoers'].sudoers_files }}.

To powinno pomóc złagodzić część komplikacji związanych z ręcznym definiowaniem konfiguracji sudoers jako kodu i szybciej postawić Cię na nogi.

Zobacz Przykład Playbooka poniżej.

Przykłady playbooków

Domyślna konfiguracja sudoers RHEL7.6

- name: "Zastosuj domyślną konfigurację /etc/sudoers RHEL7.6"
  hosts: "all"
  roles:
    - role: "ahuffman.sudoers"

...lub z nowoczesną składnią:

- name: "Zastosuj domyślną konfigurację /etc/sudoers RHEL7.6"
  hosts: "all"
  tasks:
    - name: "Konfiguruj /etc/sudoers"
      include_role:
        name: "ahuffman.sudoers"

Wyniki: /etc/sudoers

Powyższe dwa przykłady używające domyślnych ustawień roli wygenerują plik konfiguracyjny /etc/sudoers, który wygląda następująco:

# Zarządzane przez Ansible

# Domyślne specyfikacje
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"

# Specyfikacje użytkowników
root ALL=(ALL) ALL
%wheel ALL=(ALL) ALL

# Uwzględnienia
## Uwzględnione katalogi
#includedir /etc/sudoers.d

Konfiguracja sudoers (wiele plików)

- name: "Zastosuj konfigurację sudoers z wielu plików"
  hosts: "all"
  tasks:
    - name: "Konfiguruj /etc/sudoers i uwzględnione pliki"
      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" # utrzymuje zachowanie grupy sudo przed wersją 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"

Powyższy przykład wygeneruje następujące pliki konfiguracyjne:

Wyniki: /etc/sudoers

# Zarządzane przez Ansible

# Domyślne specyfikacje
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"

# Specyfikacje aliasów
## Aliasy komend
Cmnd_Alias    PING = /bin/ping

## Aliasy użytkowników
User_Alias    PINGERS = ahuffman

# Specyfikacje użytkowników
root ALL=(ALL) ALL
%wheel ALL=(ALL) ALL

# Uwzględnienia
## Uwzględnione katalogi
#includedir /etc/sudoers.d

Wyniki: /etc/sudoers.d/pingers

# Zarządzane przez Ansible

# Domyślne nadpisania specyfikacji
Defaults:PINGERS !requiretty

Wyniki: /etc/sudoers.d/root

# Zarządzane przez Ansible

# Domyślne specyfikacje
Defaults    syslog=auth

# Domyślne nadpisania specyfikacji
Defaults>root !set_logname

Migracja działającej konfiguracji sudoers na inny host

---
- name: "Zbierz istniejące fakty sudoers"
  hosts: "source-host"
  tasks:
    - name: "Zbierz działającą konfigurację sudoers"
      include_role:
        name: "ahuffman.scan_sudoers"

    - name: "Ustaw zebrane fakty sudoers"
      set_fact:
        sudoers_files: "{{ ansible_facts['sudoers'].sudoers_files }}"

    - name: "Wyświetl zebrane fakty konfiguracji sudoers"
      debug:
        var: "sudoers_files"
        verbosity: "1"

- name: "Wdróż działającą konfigurację na docelowy host"
  hosts: "destination-host"
  tasks:
    - include_role:
        name: "ahuffman.sudoers"
      vars:
        sudoers_remove_unauthorized_included_files: True

Powyższy przykład pokazuje sposób użycia Infrastructure-as-Code w odwrotną stronę, aby wziąć znaną konfigurację, przekształconą w strukturalne dane, aby napędzać przyszłą automatyzację. Alternatywnie, zamiast bezpośrednio wdrażać zebraną konfigurację na nowym hoście, można przesłać dane do CMDB lub repozytorium do późniejszego użytku jako źródło prawdy.

Licencja

MIT

Informacje o autorze

Andrew J. Huffman
Tyler Cross

O projekcie

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

Zainstaluj
ansible-galaxy install ahuffman.sudoers
Licencja
mit
Pobrania
34.8k
Właściciel