Sudo
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:第 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>
使用該模組可能不是使用 Ansible
copy
處理的最佳選擇。/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'