Ansible:维护sudoers列表的最佳实践

时间:2015-10-27 03:20:34

标签: python unix ansible user-management

documentation中,有一个使用lineinfile模块编辑/etc/sudoers的示例。

- lineinfile: "dest=/etc/sudoers state=present regexp='^%wheel' line='%wheel ALL=(ALL) NOPASSWD: ALL'"

感觉有点hackish。

我认为user模块中会有一些东西可以解决这个问题,但似乎并没有任何选择。

/etc/sudoers添加和删除用户的最佳做法是什么?

2 个答案:

答案 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对文件进行预检查。