Turgon37.sudoers
Ansible Rola Sudo/Sudoers
Opis
:grey_exclamation: Przed użyciem tej roli, pamiętaj, że wszystkie moje role Ansible są napisane i dostosowane do mojej infrastruktury IT. Choć są jak najbardziej ogólne, niekoniecznie spełnią Twoje potrzeby. Zalecam dokładną analizę ich działania i ocenę możliwości ich bezpiecznej instalacji na Twoich serwerach.
Ta rola konfiguruje sudo.
Wymagania
Wymaga Ansible >= 2.4
Zależności
Rodzina systemów operacyjnych
Ta rola jest dostępna dla Debian i CentOS.
Funkcje
Obecnie rola może być używana do:
- instalacji sudo
- konfigurowania domyślnych ustawień i zasad
- udostępnienia pseudo " typu", aby umożliwić innym rolom dodawanie zasad sudo
- lokalne fakty
Konfiguracja
Rola
Wszystkie zmienne, które można nadpisywać, są przechowywane w pliku defaults/main.yml oraz w tabeli poniżej. Aby zobaczyć wartości domyślne, sprawdź ten plik.
Nazwa | Typy/Wartości | Opis |
---|---|---|
sudoers__sss |
Boolean | Instalacja pakietów niezbędnych do używania sudo z backendem sss |
sudoers__defaults_(global/group/host) |
Lista dict/string | Deklaracja domyślnych ustawień dla sudoers na poziomie roli |
sudoers__purge |
Boolean | Jeśli prawda, wszystkie zasady sudo, które nie są bezpośrednio obsługiwane przez tę rolę, zostaną usunięte |
sudoers__ansible_managed_key |
String | Ciąg używany do identyfikacji, które zasady sudo są zarządzane przez ansible |
sudoers__rules_(global/group/host) |
Dict zasad (zobacz poniżej) | Zasady sudo do zastosowania na poziomie roli |
Zasada sudo
Ta rola udostępnia pseudo "typ", którego możesz używać z innej roli. Pozwala to innej roli na deklarację zestawu zasad sudo niezależnie od zakresu tej roli sudoers i ich użycie w playbooku.
Aby to wykorzystać, wystarczy zadeklarować zadanie w ten sposób:
- name: Skonfiguruj zasady sudoers dla ROLE
include_role:
name: sudoers
tasks_from: types/sudo_rule
vars:
sudoers__sudo_rule: {}
Cała konfiguracja zasad musi być pod zmienną o nazwie sudoers__sudo_rule
.
Nazwa | Typy/Wartości | Opis |
---|---|---|
name |
String | Nazwa pliku zasady (nie może zawierać spacji) |
state |
Enum absent/present | Stan zasady do usunięcia, jeśli to konieczne |
defaults |
Lista domyślnych (zobacz poniżej) | Lista dyrektyw 'defaults' sudoers do zastosowania w tej zasadzie. Należy pamiętać, że będą one miały wpływ na całą konfigurację uruchomienia sudo, a nie tylko na tę zasadę |
users |
Lista stringów | Lista użytkowników, dla których ta zasada będzie miała zastosowanie |
hosts |
Lista stringów | Opcjonalna lista hostów, na których ta zasada będzie miała zastosowanie, domyślnie to WSZYSTKIE |
commands |
Lista poleceń (zobacz poniżej) | Lista definicji poleceń |
comment |
String | Opcjonalny komentarz do dodania do pliku |
Dyrektywa "defaults"
Ponieważ dyrektywa "defaults" dla sudo może przyjmować opcjonalne wartości, Ansible wspiera dwie formy dla każdej dyrektywy defaults pod kluczem defaults:
Defaults always_set_home
Defaults listpw = always
- prosta ciąg
- mapowanie
Wersja z ciągiem jest najłatwiejsza w użyciu, ponieważ ciąg będzie po prostu umieszczony po słowie kluczowym sudo Defaults.
Wersja mapowania pozwala na bardziej precyzyjną konfigurację. Należy pamiętać, że dyrektywa sudo Defaults obsługuje filtrowanie na podstawie hosta, użytkownika, polecenia i runas. Możesz jednak wybrać tylko jeden warunek filtrujący dla dyrektywy defaults. Dlatego ta rola Ansible będzie używać wcześniejszej kolejności kluczy jako kolejności priorytetów, jeśli ustawisz wiele kluczy filtrujących.
Jeśli dyrektywa wymaga wartości, musisz ustawić nazwę dyrektywy jako klucz mapowania, a jego wartość jako wartość klucza.
Jeśli dyrektywa wymaga tylko swojej nazwy (jak requiretty), musisz (to ograniczenie) ustawić statyczne słowo "defaults" jako klucz i nazwę dyrektywy jako wartość.
Na przykład, aby zastosować "requiretty" dla użytkownika "user1", ustaw następujące zmienne:
sudoers__sudo_rule:
name: rule1
defaults:
- defaults: requiretty
user: user1
Aby zastosować "listpw", ustaw:
sudoers__sudo_rule:
name: rule1
defaults:
- listpw: always
user: user1
Podsumowując, wszystkie te klucze dict są dostępne wewnątrz specyfikacji defaults:
Nazwa | Zastosowanie |
---|---|
defaults: NAME |
Dla dyrektyw bez wartości |
NAME: VALUE |
Dla dyrektywy z wartościami |
host: HOST |
Aby ograniczyć wpływ Defaults na określony host |
user: USER |
Aby ograniczyć wpływ Defaults na określonego użytkownika |
command: COMMAND |
Aby ograniczyć wpływ Defaults na określone polecenie |
runas: RUNAS_USER |
Aby ograniczyć wpływ Defaults na określonego użytkownika runas |
Dyrektywa "commands"
Każde polecenie pod kluczem commands pozwala użytkownikowi na uruchomienie polecenia systemowego z lub bez ograniczeń.
Blok polecenia pozwala na następujące klucze:
Nazwa | Typy/Wartości | Zastosowanie |
---|---|---|
commands: |
String lub lista stringów | Wzór polecenia (lub polecenia), zobacz man 5 sudoers dla specyfikacji składni |
run_as_user: |
String lub lista stringów | To/to polecenia (powyżej) muszą być uruchamiane tylko jako ten/te użytkownik(e) |
run_as_group: |
String lub lista stringów | To/to polecenia (powyżej) muszą być uruchamiane tylko jako ta/te grupa/y |
tags |
String lub lista stringów | Tag lub lista tagów do zastosowania dla tego polecenia |
Na przykład, aby zezwolić użytkownikowi "user1" na uruchomienie polecenia ls wszędzie jako użytkownik root bez wprowadzania hasła:
sudoers__sudo_rule:
name: rule1
commands:
- commands: /bin/ls
run_as_user: user1
run_as_group: root
tags: NOPASSWD
Fakty
Domyślnie lokalne fakty są instalowane i udostępniają następujące zmienne:
ansible_local.sudoers.version_full
ansible_local.sudoers.version_major
Przykład
Playbook
Użyj go w playbooku w następujący sposób:
- hosts: all
roles:
- turgon37.sudoers
Inwentarz
- Deklaracja Twoich ustawień domyślnych
sudoers__defaults_global:
- always_set_home
- insults
- listpw: always
- mailsub: "[PRODUKCJA][%h][BEZPIECZEŃSTWO SUDO]"
- mailto: [email protected]
- 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'
- Użycie z sssd
# Wymaga, aby sudo pobierał zasady z LDAP
sudoers__sss: true
- Deklaracja zasad sudo z innej roli
- name: Skonfiguruj zasady sudoers dla 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: Autogenerowana zasada dla roli
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
ansible-galaxy install Turgon37.sudoers