sudoers

Ansible Роль Sudo/Sudoers

Статус сборки Лицензия Ansible Роль

Описание

:grey_exclamation: Перед использованием этой роли, пожалуйста, учтите, что все мои роли Ansible полностью написаны и настроены для моей ИТ-инфраструктуры. Поэтому, даже если они максимально универсальны, они не обязательно удовлетворят ваши потребности. Я советую внимательно проанализировать, что они делают, и оценить их способность быть установлены безопасно на ваших серверах.

Эта роль настраивает sudo.

Требования

Требуется Ansible >= 2.4

Зависимости

Семейство ОС

Эта роль доступна для Debian и CentOS.

Возможности

На данный момент роль может использоваться для:

  • установки sudo
  • настройки значений по умолчанию и правил команд
  • предоставления псевдотипа, чтобы другие роли могли включать правила sudo
  • локальных фактов

Настройка

Роль

Все переменные, которые можно переопределить, хранятся в файле defaults/main.yml, а также в таблице ниже. Чтобы увидеть значения по умолчанию, обратитесь к этому файлу.

Название Типы/Значения Описание
sudoers__sss Логическое значение Устанавливает пакеты, необходимые для использования sudo с бэкендом sss
sudoers__defaults_(global/group/host) Список словарей/строк Объявляет настройки по умолчанию для sudoers на уровне роли
sudoers__purge Логическое значение Если true, все правила sudo, не управляемые напрямую этой ролью, будут удалены
sudoers__ansible_managed_key Строка Строка, используемая для определения, какие правила sudo управляются ansible
sudoers__rules_(global/group/host) Словарь правил (см. ниже) Правила sudoers, которые необходимо применить на уровне роли

Правило Sudo

Эта роль предоставляет псевдотип, который вы можете использовать из другой роли. Это позволяет другой роли объявить набор правил sudo вне области действия этой роли sudoers и после их применения в плейбуке.

Чтобы использовать это, просто объявите задачу следующим образом:

- name: Настройка правила sudoers для РОЛИ
  include_role:
    name: sudoers
    tasks_from: types/sudo_rule
  vars:
    sudoers__sudo_rule: {}

Все элементы конфигурации правила должны находиться под переменной с именем sudoers__sudo_rule.

Название Типы/Значения Описание
name Строка Имя файла правила (не должно содержать пробелов)
state Enum absent/present Состояние правила для удаления при необходимости
defaults Список настроек (см. ниже) Список команд 'default' для применения в этом правиле. Обратите внимание, что они будут действовать на всю конфигурацию sudo, а не только на это правило
users Список строк Список пользователей, для которых будет применяться это правило
hosts Список строк Необязательный список хостов, на которых будет применяться это правило, по умолчанию - ВСЕ
commands Список команд (см. ниже) Список определений команд
comment Строка Необязательный комментарий для включения в файл
Директива "defaults"

Поскольку директива "defaults" может принимать дополнительные значения, ansible поддерживает две формы для каждой директивы по умолчанию под ключом defaults:

Defaults   always_set_home
Defaults   listpw = always
  • простая строка
  • отображение

Строковая версия - самая простая в использовании, поскольку строка просто будет поставлена после ключевого слова sudo Defaults.

Отображение позволяет более тонкую настройку. Сначала имейте в виду, что директива sudo Defaults поддерживает фильтрацию по хостам, пользователям, командам и runas. Однако вы можете выбрать только одно фильтрационное условие для директивы по умолчанию. Поэтому эта роль ansible будет использовать порядок предыдущих ключей как порядок приоритета, если вы зададите несколько ключей фильтрации.

Если директива требует значения, вы должны установить имя директивы как ключ отображения, а его значение – как значение ключа.
Иначе, если директива требует только своего имени (например, requiretty), вы должны (это ограничение) указать статическую строку "defaults" как ключ, а имя директивы - как значение.

Например, чтобы применить "requiretty" для пользователя user1, задайте следующие переменные:

sudoers__sudo_rule:
  name: rule1
  defaults:
    - defaults: requiretty
      user: user1

А чтобы применить "listpw", установите:

sudoers__sudo_rule:
  name: rule1
  defaults:
    - listpw: always
      user: user1

В итоге все эти ключи словаря доступны внутри спецификации defaults:

Название Использование
defaults: NAME Для директив без значения
NAME: VALUE Для директив со значением
host: HOST Чтобы ограничить действие Defaults на указанный хост
user: USER Чтобы ограничить действие Defaults на указанного пользователя
command: COMMAND Чтобы ограничить действие Defaults на указанную команду
runas: RUNAS_USER Чтобы ограничить действие Defaults на указанного пользователя для запуска
Директива "commands"

Каждая команда под ключом commands позволяет пользователю выполнять системную команду с ограничениями или без них.

Блок команды допускает следующие ключи:

Название Типы/Значения Использование
commands: Строка или список строк Шаблоны команд, см. man 5 sudoers для спецификации синтаксиса
run_as_user: Строка или список строк Эти команды (строка выше) должны выполняться только данным пользователем(ями)
run_as_group: Строка или список строк Эти команды (строка выше) должны выполняться только данной группой(ами)
tags Строка или список строк Тег или список тегов, которые следует применить к этой команде

Например, чтобы разрешить пользователю "user1" выполнять ls в любом месте как суперпользователь без ввода пароля:

sudoers__sudo_rule:
  name: rule1
  commands:
   - commands: /bin/ls
     run_as_user: user1
     run_as_group: root
     tags: NOPASSWD

Факты

По умолчанию локальный факт устанавливается и предоставляет следующие переменные:

  • ansible_local.sudoers.version_full
  • ansible_local.sudoers.version_major

Пример

Плейбук

Используйте его в плейбуке следующим образом:

- hosts: all
  roles:
    - turgon37.sudoers

Инвентарь

  • Объявите свои настройки по умолчанию
sudoers__defaults_global:
  - always_set_home
  - insults
  - listpw: always
  - mailsub: "[PRODUCTION][%h][SUDO SECURITY]"
  - 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'
  • Использование с sssd
# Требуется для sudo для получения правил из LDAP
sudoers__sss: true
  • Объявите правила sudo из другой роли
- name: Настройка правила sudoers для РОЛИ
  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: Автоматически сгенерированное правило для роли
      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
О проекте

This role configure sudoers file

Установить
ansible-galaxy install Turgon37/ansible-sudoers
Лицензия
mit
Загрузки
4265
Владелец
Ingénieur, Informaticien, curieux de nouvelles technologies. Passionné par le libre et l'esprit de communauté