我创build了一个名为kafka的用户,我试图给sudo访问权限来运行/etc/init.d/kafka命令。
我通过Ansible将以下条目添加到/etc/sudoers.d/kafka:
kafka ALL = NOPASSWD: /etc/init.d/kafka
但是,这完全打破了sudo与以下错误:
/etc/sudoers.d/kafka:第1行附近的语法错误
sudo:parsing第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
我究竟做错了什么?
源自/etc/sudoers或#include <filename>或#includedir <path>指令中的任何文件的“sudo:parse error in …”可能由最后一行缺less的新行引起进入该文件。
使用copy模块可能不是使用Ansible处理/etc/sudoers的最佳select。
lineinfile模块有一个选项来保存之前validation文件。 使用该模块删除线路等也更容易。
该文档包含一个示例如何使用它。
- 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'