sudoers
ahuffman.sudoers
Управляет конфигурацией файла /etc/sudoers
и включенных файлов/каталогов.
Обратите внимание, что версия 2.0.0 и выше являетсяMajor перепиской роли. Пожалуйста, ознакомьтесь с документацией, чтобы понять изменения перед установкой и использованием, если вы переходите с предыдущих версий.
Содержание
- Содержание
- Советы
- Переменные роли
- Поля словаря sudoers_files
- Автоматическая генерация данных файлов sudoers из существующей конфигурации
- Примеры плейбуков
- Лицензия
- Информация об авторах
Советы
Совет: Вот несколько отличных ресурсов по конфигурации 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 или репозиторий для будущего использования в качестве источника правды.
Лицензия
Информация об авторах
Controls the configuration of the default /etc/sudoers file and included files/directories
ansible-galaxy install ahuffman/ansible-sudoers