Назад | Перейти на главную страницу

Ошибка синтаксического анализа в файле sudoers

Я создал пользователя по имени kafka кому я пытаюсь предоставить доступ sudo только для запуска /etc/init.d/kafka команды.

Я добавил следующую запись в /etc/sudoers.d/kafka через Ansible:

kafka ALL = NOPASSWD: /etc/init.d/kafka

Однако это полностью нарушает работу sudo со следующей ошибкой:

/etc/sudoers.d/kafka: синтаксическая ошибка возле строки 1
sudo: ошибка синтаксического анализа в /etc/sudoers.d/kafka рядом с строкой 1
sudo: действительные источники sudoers не найдены, выход
sudo: невозможно инициализировать плагин политики

Вот полный фрагмент Ansible:

- name: Create kafka user's group
  group:
    name: "{{ kafka_group }}"
    state: present

- name: Create kafka user
  user:
    name: "{{ kafka_user }}"
    state: present
    group: "{{ kafka_group }}"
    shell: /bin/bash

- name: Set up password-less sudo for kafka user
  copy:
    content: "{{ kafka_user }} ALL = NOPASSWD: /etc/init.d/{{ kafka_service_name }}"
    dest: "/etc/sudoers.d/{{ kafka_user }}"
    owner: root
    group: root
    mode: 0440

Что я делаю не так?

А "sudo: ошибка синтаксического анализа в ..." происходящих от /etc/sudoers или любой из файлов, включенных в #include <filename> или #includedir <path> директивы могут быть вызваны отсутствием новой строки в последней записи в этом файле.

Используя copy модуль, вероятно, не лучший выбор для обработки /etc/sudoers с Ansible.

В lineinfile модуль имеет возможность проверить файл перед сохранением. С этим модулем также легче удалить линию и т. Д.

В документация содержит пример того, как его использовать.

- name: Set up password-less sudo for kafka user
  lineinfile: dest=/etc/sudoers state=present regexp='^%{{ kafka_user }} ALL\=' line='%{{ kafka_user }} ALL= NOPASSWD: /etc/init.d/{{ kafka_service_name }}' validate='visudo -cf %s'