ahuffman.sudoers
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
- Spis treści
- Wskazówki
- Zmienne roli
- Pola słownika sudoers_files
- Automatyczne generowanie danych plików sudoers z istniejącej konfiguracji
- Przykłady playbooków
- Licencja
- 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
Informacje o autorze
Controls the configuration of the default /etc/sudoers file and included files/directories
ansible-galaxy install ahuffman.sudoers