Ansible: лучшая практика для ведения списка sudoers
В документации есть пример использования lineinfile
модуль для редактирования /etc/sudoers
,
- lineinfile: "dest=/etc/sudoers state=present regexp='^%wheel' line='%wheel ALL=(ALL) NOPASSWD: ALL'"
Чувствуется немного хакерской.
Я предполагал, что что-то будет в user
модуль, чтобы справиться с этим, но там, кажется, нет никаких опций.
Каковы лучшие практики для добавления и удаления пользователей в /etc/sudoers
?
1 ответ
Эта строка на самом деле не добавляет пользователей в sudoers, а просто удостоверяется, что wheel
Группа может иметь sudo без пароля для всех команд.
Что касается добавления пользователей в /etc/sudoers
это лучше всего сделать, добавив пользователей в необходимые группы, а затем предоставив этим группам соответствующий доступ к sudo. Это верно, когда вы не используете Ansible тоже.
Пользовательский модуль позволяет указать исключительный список группы или просто добавить указанные группы к текущим, которые уже есть у пользователя. Это, естественно, идемпотент, поскольку нельзя определить, что пользователь находится в группе несколько раз.
Пример игры может выглядеть примерно так:
- hosts: all
vars:
sudoers:
- user1
- user2
- user3
tasks:
- name: Make sure we have a 'wheel' group
group:
name: wheel
state: present
- name: Allow 'wheel' group to have passwordless sudo
lineinfile:
dest: /etc/sudoers
state: present
regexp: '^%wheel'
line: '%wheel ALL=(ALL) NOPASSWD: ALL'
validate: visudo -cf %s
- name: Add sudoers users to wheel group
user:
name: "{{ item }}"
groups: wheel
append: yes
with_items: "{{ sudoers }}"
Я предпочитаю использовать /etc/sudoers.d/
для этого, если возможно (это менее рискованно, более модульно и понятно), поэтому этот подход выглядит так:
$ cat files/*
%admins ALL=(ALL) NOPASSWD: ALL
$ cat tasks/*
- name: sudoers | Create sudoers.d files
copy:
src: ./
dest: /etc/sudoers.d
owner: root
group: root
mode: ug+rwX,o=
force: yes
Файл предварительно проверяется с помощью visudo -cf file_name
.