Я создал пользователя по имени 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'