在documentation中,有一个使用lineinfile
模块编辑/etc/sudoers
的示例。
- lineinfile: "dest=/etc/sudoers state=present regexp='^%wheel' line='%wheel ALL=(ALL) NOPASSWD: ALL'"
感觉有点hackish。
我认为user
模块中会有一些东西可以解决这个问题,但似乎并没有任何选择。
向/etc/sudoers
添加和删除用户的最佳做法是什么?
答案 0 :(得分:47)
该行实际上并未将用户添加到sudoers,只是确保wheel
组可以为所有命令设置无密码sudo。
至于将用户添加到/etc/sudoers
,最好将用户添加到必要的组,然后为这些组提供对sudo的相关访问权限。当你没有使用Ansible时也是如此。
D.I. documentation of AngularJS允许您指定组的独占列表,或者只是将指定的组附加到用户已有的当前组。这自然是幂等的,因为不能将用户定义为多次在组中。
示例游戏可能如下所示:
- hosts: all
vars:
sudoers:
- user1
- user2
- user3
tasks:
- name: Make sure we have a 'wheel' group
group:
name: wheel
state: present
- name: Allow 'wheel' group to have passwordless sudo
lineinfile:
dest: /etc/sudoers
state: present
regexp: '^%wheel'
line: '%wheel ALL=(ALL) NOPASSWD: ALL'
validate: visudo -cf %s
- name: Add sudoers users to wheel group
user:
name: "{{ item }}"
groups: wheel
append: yes
with_items: "{{ sudoers }}"
答案 1 :(得分:1)
如果可能的话,我更愿意使用/etc/sudoers.d/
(这样风险较小,更具模块化和自我描述性),因此这种方法看起来像:
$ cat files/*
%admins ALL=(ALL) NOPASSWD: ALL
$ cat tasks/*
- name: sudoers | Create sudoers.d files
copy:
src: ./
dest: /etc/sudoers.d
owner: root
group: root
mode: ug+rwX,o=
force: yes
使用visudo -cf file_name
对文件进行预检查。