sudoers 文件中的解析错误

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

我究竟做错了什么?

答案1

A“sudo:解析错误...”源自或包含或指令/etc/sudoers 的任何文件都可能是由于该文件的最后一项缺少换行符造成的。#include <filename>#includedir <path>

答案2

使用该copy模块可能不是处理/etc/sudoersAnsible 的最佳选择。

行输入文件模块有一个选项,可以在保存前验证文件。使用该模块还可以更轻松地删除行等。

文档包含如何使用它的示例。

- 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'

相关内容