sudoers

Ansible Role

ahuffman.sudoers

Управляет конфигурацией файла /etc/sudoers и включенных файлов/каталогов.


Обратите внимание, что версия 2.0.0 и выше являетсяMajor перепиской роли. Пожалуйста, ознакомьтесь с документацией, чтобы понять изменения перед установкой и использованием, если вы переходите с предыдущих версий.


Содержание

  1. Содержание
  2. Советы
  3. Переменные роли
  4. Поля словаря sudoers_files
    1. Поля словаря sudoers_files.aliases
    2. Поля словаря user_specifications
  5. Автоматическая генерация данных файлов sudoers из существующей конфигурации
  6. Примеры плейбуков
    1. Конфигурация sudoers по умолчанию для RHEL7.6
    2. Конфигурация sudoers (несколько файлов)
    3. Миграция работающей конфигурации sudoers на другой хост
  7. Лицензия
  8. Информация об авторах

Советы

Совет: Вот несколько отличных ресурсов по конфигурации sudoers:
Начните здесь - Отражает базовую конфигурацию файлов sudoers и терминологию
Руководство по sudoers - Если вы хотите знать все детали, это для вас.

Переменные роли

По умолчанию, определенные для этой роли, основаны на настройках по умолчанию для RHEL7.6 в файле /etc/sudoers. Пожалуйста, проверьте настройки по умолчанию в defaults/main.yml перед запуском для совместимости с ОС.

Название переменной Описание Значение по умолчанию Тип переменной
sudoers_rewrite_default_sudoers_file Использовать настройки роли по умолчанию или пользовательские определения sudoers_files, заменяя файл /etc/sudoers, поставляемый с дистрибутивом. Полезно при попытке развернуть новые конфигурационные файлы в include_directories, если вы не хотите изменять файл /etc/sudoers. True boolean
sudoers_remove_unauthorized_included_files Очень опасно! Каждый существующий файл sudoer в словаре include_directories, который не определён в sudoers_files, будет удален. Это позволяет обеспечить желаемое состояние. False boolean
sudoers_backup Создавать ли резервную копию текущего состояния существующего файла /etc/sudoers и любых файлов, определенных в sudoers_files. Файлы сохраняются на узле управления Ansible (сервере, с которого вы запускаете Ansible) и предотвращают случайное оставление файлов в ваших include_directories, которые могут быть оценены конфигурациями sudoers. True boolean
sudoers_backup_path Путь относительно того, где вы выполняете свой плейбук для резервного копирования удаленных копий определенных sudoers_files. "sudoers_backups" string
sudoers_backup_become Использовать ли sudo при создании локального резервного каталога sudoers и резервного файла sudoers. True boolean
sudoers_visudo_path Полный путь к бинарному файлу visudo, необходимому для проверки изменений конфигурации sudoers. Добавлено для совместимости с операционной системой. "/usr/sbin/visudo" string
sudoers_files Определение всех ваших конфигураций sudoers см. defaults/main.yml список словарей

Поля словаря sudoers_files

Название переменной Описание Тип переменной
path Куда развернуть конфигурационный файл в файловой системе. строка
aliases Необязательное определение элементов cmnd_alias, host_alias, runas_alias или user_alias. словарь
defaults Позволяет вам определить настройки по умолчанию вашей конфигурации sudoers. Переопределения по умолчанию можно выполнять через ключ user_specifications. список
include_files Необязательные конкретные файлы, которые вы хотите, чтобы ваша конфигурация включала. Это список полных путей для включения через опцию #include конфигурации sudoers. список
include_directories Необязательные конкретные каталоги, которые вы хотите, чтобы ваши конфигурации включали. Это список полных путей к каталогам для включения через опцию #includedir конфигурации sudoers. список
user_specifications Список спецификаций пользователей и переопределений по умолчанию, которые необходимо применить к конфигурации файла sudoers. список

Поля словаря sudoers_files.aliases

Название переменной Описание Тип переменной
cmnd_alias Список определений командных алиасов. список словарей
host_alias Список определений алиасов хостов список словарей
runas_alias Список определений алиасов runas список словарей
user_alias Список определений алиасов пользователей список словарей

Поля словаря cmnd_alias

Название переменной Описание Тип переменной
name Имя командного алиаса. строка
commands Список команд, применяемых к алиасу список

Поля словаря host_alias

Название переменной Описание Тип переменной
name Имя алиаса хоста. строка
hosts Список хостов, применяемых к алиасу список

Поля словаря runas_alias

Название переменной Описание Тип переменной
name Имя алиаса runas строка
users Список пользователей, применяемых к алиасу список

Поля словаря user_alias

Название переменной Описание Тип переменной
name Имя user_alias строка
users Список пользователей, применяемых к алиасу список

Поля словаря user_specifications

Этот словарь можно использовать для назначения либо спецификаций пользователей, либо переопределений по умолчанию.

Стандартные user_specifications

Название переменной Описание Тип переменной
users Список пользователей, к которым нужно применить спецификацию. Вы можете использовать как имя user_alias, так и имена пользователей. список
hosts Список хостов, к которым нужно применить спецификацию. Вы можете использовать как определенное имя host_alias, так и имена хостов. список
operators Список операторов, к которым нужно применить спецификацию. Вы можете использовать как определенное имя runas_alias, так и имена пользователей. список
selinux_role Необольный selinux-ролей для применения к спецификации список
selinux_type Необязательный тип selinux для применения к спецификации список
solaris_privs Необольные привилегии Solaris для применения к спецификации список
solaris_limitprivs Необольные привилегии Solaris для применения к спецификации список
tags Необольный список тегов для применения к спецификации. список
commands Список команд, к которым нужно применить спецификацию. Вы можете использовать как определенное имя cmnd_alias, так и команды. список

Переопределения по умолчанию user_specifications

Название переменной Описание Тип переменной
defaults Список значений по умолчанию для переопределения из основной конфигурации список
type Тип переопределения по умолчанию, это влияет на оператор в конфигурации (хост -> @, пользователь -> :, команда -> !, а runas -> >). Поле типа может принимать одно из следующих значений: command, host, runas или user. строка
commands Используйте, когда type: "command". Список имен cmnd_alias, а также команд для переопределения конкретных значений по умолчанию. список
hosts Используйте, когда type: "host". Список имен host_alias, а также отдельных имен хостов, чтобы переопределить конкретные значения по умолчанию. список
operators Используйте, когда type: "runas". Список имен runas_alias, а также отдельных имен пользователей для переопределения конкретных значений по умолчанию. список
users Используйте, когда type: "user". Список имен user_alias, а также отдельных имен пользователей для переопределения конкретных значений по умолчанию. список

Автоматическая генерация данных файлов sudoers из существующей конфигурации

Сложно настроить конфигурацию, основываясь на документации? Пожалуйста, проверьте и попробуйте ahuffman.scan_sudoers для нахождения роли, которая может автоматически создать правильную структуру данных для вас. С помощью роли ahuffman.scan_sudoers вы можете взять работающую конфигурацию в одном плейбуке и развернуть ее на другом с помощью роли ahuffman.sudoers (версия 2.0.0+). Вы также можете взять собранные данные и перенести их в источник правды, такой как CMDB или репозиторий, с помощью автоматизации. Собранные данные, которые генерируются ahuffman.scan_sudoers и могут быть использованы ahuffman.sudoers, будут {{ ansible_facts['sudoers'].sudoers_files }}.

Это должно помочь облегчить задачу ручного определения конфигураций sudoers в виде кода и ускорить ваш запуск.

Смотрите Пример плейбука ниже.

Примеры плейбуков

Конфигурация sudoers по умолчанию для RHEL7.6

- name: "Применить конфигурацию по умолчанию /etc/sudoers для RHEL7.6"
  hosts: "all"
  roles:
    - role: "ahuffman.sudoers"

...или с современным синтаксисом:

- name: "Применить конфигурацию по умолчанию /etc/sudoers для RHEL7.6"
  hosts: "all"
  tasks:
    - name: "Настроить /etc/sudoers"
      include_role:
        name: "ahuffman.sudoers"

Результаты: /etc/sudoers

Вышеуказанные два примера с использованием значений по умолчанию роли создадут файл конфигурации /etc/sudoers, который будет выглядеть следующим образом:

# Управляется Ansible

# Спецификации по умолчанию
Defaults    !visiblepw
Defaults    всегда_устанавливать_home
Defaults    match_group_by_gid
Defaults    всегда_запрашивать_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"

# Спецификации пользователей
root ALL=(ALL) ALL
%wheel ALL=(ALL) ALL

# Включения
## Включить директории
#includedir /etc/sudoers.d

Конфигурация sudoers (несколько файлов)

- name: "Применить многофайловую конфигурацию sudoers"
  hosts: "all"
  tasks:
    - name: "Настроить /etc/sudoers и включенные файлы"
      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" # поддерживает поведение группы sudo до версии 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"

Пример выше создаст следующие конфигурационные файлы:

Результаты: /etc/sudoers

# Управляется Ansible

# Спецификации по умолчанию
Defaults    !visiblepw
Defaults    всегда_устанавливать_home
Defaults    match_group_by_gid
Defaults    всегда_запрашивать_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"

# Спецификации алиасов
## Командные алиасы
Cmnd_Alias    PING = /bin/ping

## Алиасы пользователей
User_Alias    PINGERS = ahuffman

# Спецификации пользователей
root ALL=(ALL) ALL
%wheel ALL=(ALL) ALL

# Включения
## Включить директории
#includedir /etc/sudoers.d

Результаты: /etc/sudoers.d/pingers

# Управляется Ansible

# Переопределения по умолчанию
Defaults:PINGERS !requiretty

Результаты: /etc/sudoers.d/root

# Управляется Ansible

# Спецификации по умолчанию
Defaults    syslog=auth


# Переопределения по умолчанию
Defaults>root !set_logname

Миграция работающей конфигурации sudoers на другой хост

---
- name: "Собрать существующие факты sudoers"
  hosts: "source-host"
  tasks:
    - name: "Собрать текущую конфигурацию sudoers"
      include_role:
        name: "ahuffman.scan_sudoers"

    - name: "Установить собранные факты sudoers"
      set_fact:
        sudoers_files: "{{ ansible_facts['sudoers'].sudoers_files }}"

    - name: "Отобразить собранные факты конфигурации sudoers"
      debug:
        var: "sudoers_files"
        verbosity: "1"

- name: "Развернуть текущую конфигурацию на целевом хосте"
  hosts: "destination-host"
  tasks:
    - include_role:
        name: "ahuffman.sudoers"
      vars:
        sudoers_remove_unauthorized_included_files: True

Пример выше предлагает метод использования ИК как инверсии, чтобы взять известную конфигурацию, преобразованную в структурированные данные, чтобы управлять будущей автоматизацией. В качестве альтернативы прямому развертыванию собранной конфигурации на новом хосте, вы можете перенести данные в CMDB или репозиторий для будущего использования в качестве источника правды.

Лицензия

MIT

Информация об авторах

Эндрю Дж. Хаффман
Тайлер Кросс

О проекте

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

Установить
ansible-galaxy install ahuffman/ansible-sudoers
Лицензия
mit
Загрузки
31396
Владелец