Sudo

sudoers 文件中的解析錯誤

  • July 27, 2016

我創建了一個名為的使用者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:第 1 行附近 /etc/sudoers.d/kafka 中的解析錯誤

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

我究竟做錯了什麼?

源自 或包含在or指令中的任何文件的*“sudo: parse error in …”*可能是由於該文件中最後一個條目上缺少換行符引起的。/etc/sudoers``#include <filename>``#includedir <path>

使用該模組可能不是使用 Ansiblecopy處理的最佳選擇。/etc/sudoers

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'

引用自:https://serverfault.com/questions/791945