Eu criei um usuário chamado kafka
para quem estou tentando dar um acesso sudo para executar apenas /etc/init.d/kafka
comandos.
Eu adicionei a seguinte entrada /etc/sudoers.d/kafka
via Ansible:
kafka ALL = NOPASSWD: /etc/init.d/kafka
No entanto, isso quebra o sudo completamente com o seguinte erro:
/etc/sudoers.d/kafka: erro de sintaxe perto da linha 1
sudo: erro de análise em /etc/sudoers.d/kafka perto da linha 1
sudo: nenhuma fonte de sudoers válida encontrada, saindo
sudo: incapaz de inicializar o plug-in da política
Aqui está o trecho completo do 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
O que estou fazendo errado?
Um "sudo: parse error in ..." originário de
/etc/sudoers
ou qualquer um dos arquivos incluídos nas diretivas#include <filename>
ou#includedir <path>
pode ser causado por uma nova linha ausente na última entrada desse arquivo.Usar o
copy
módulo provavelmente não é a melhor escolha para lidar/etc/sudoers
com o Ansible.O módulo lineinfile tem uma opção para validar o arquivo antes de salvar. Também é mais fácil remover a linha, etc com esse módulo.
A documentação contém um exemplo de como usá-lo.