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.

Другие вопросы по тегам