Подтвердить что ты не робот

Ansible: создать пользователя с привилегиями sudo

Я взял сервер Ubuntu 14.04. У него есть пользователь, называемый "развертыватель" (используется с capistrano), и поэтому ему нужны привилегии sudo. С помощью этой настройки я могу войти на сервер и сделать что-то вроде:

workstation> ssh [email protected]
myserver>  sudo apt-get install git
myserver> exit
workstation>

Я пытаюсь выяснить, как использовать Ansible (версия 2.0.2.0 и python 2.7.3) для создания пользователя, называемого "развертыватель" , и иметь возможность входа на сервер с этим идентификатором, а затем так судо-иш-вещи как "apt-get install". Моя книга выглядит так:

---
- hosts: example
  become: yes
  tasks:
  - name: Update apt cache
    apt:
      update_cache: yes
      cache_valid_time: 3600

  - group: name=sudo state=present

  - name: Add deployer user and add it to sudo
    user: name=deployer
          state=present
          createhome=yes
    become: yes
    become_method: "sudo"

  - name: Set up authorized keys for the deployer user
    authorized_key: user=deployer key="{{item}}"
    with_file:
      - /home/jaygodse/.ssh/id_rsa.pub

После запуска этой пьесы я могу ssh в качестве "развертывателя" (например, ssh deployer @myserver), но если я запустил команду sudo, она всегда запрашивает у меня пароль sudo.

Я понимаю, что пользователь "развертывателя" в конечном итоге должен найти свой путь в файле пользователей visudo, но я не могу понять, какие магические заклинания Ansible вызываются, чтобы я мог ssh войти в машину в качестве развертывателя, а затем запустить команду sudo (например, sudo apt-get install git ") без запроса пароля sudo.

Я искал высокий и низкий, и я не могу найти фрагмент плеера Ansible, который помещает пользователя "развертыватель" в группу sudo, не требуя пароля. Как это делается?

4b9b3361

Ответ 1

Иногда это зная, что спросить. Я не знал, что я разработчик, который взял на себя работу DevOps.

По-видимому, "пароль без пароля" или логин NOPASSWD - это то, что вам нужно поместить в файл /etc/sudoers.

Ответ на мой вопрос в Ansible: лучшая практика для ведения списка sudoers.

Фрагмент кода Ansible playbook выглядит следующим образом:

- 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=deployer groups=wheel append=yes state=present createhome=yes


- name: Set up authorized keys for the deployer user
  authorized_key: user=deployer key="{{item}}"
  with_file:
    - /home/railsdev/.ssh/id_rsa.pub

И самое главное, что решение является идемпотентным. Он не добавляет строку

%wheel ALL=(ALL) NOPASSWD: ALL

в/etc/sudoers, когда проигрыватель запускается в следующий раз. И да... Я смог отправить ssh на сервер как "развертыватель" и запустить команды sudo без необходимости указывать пароль.

Ответ 2

Создать пользователя с привилегиями sudo - это поместить пользователя в /etc/sudoers или сделать его членом группы, указанной в /etc/sudoers. И чтобы сделать это без пароля, нужно дополнительно указать NOPASSWD в /etc/sudoers.

Пример /etc/sudoers:

## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL

## Allows people in group wheel to run all commands
%wheel  ALL=(ALL)       ALL

## Same thing without a password
%wheel  ALL=(ALL)       NOPASSWD: ALL

И вместо того, чтобы возиться с файлом /etc/sudoers, мы можем создать новый файл в /etc/sudoers.d/ так как этот каталог включен в /etc/sudoers по умолчанию, что исключает возможность поломки существующего файла sudoers, и также устраняет зависимость от содержимого внутри /etc/sudoers.

Чтобы достигнуть выше в Ansible, обратитесь к следующему:

- name: sudo without password for wheel group
  copy:
    content: '%wheel ALL=(ALL:ALL) NOPASSWD:ALL'
    dest: /etc/sudoers.d/wheel_nopasswd
    mode: 0440

Вы можете заменить %wheel другими именами групп, такими как %sudoers или другими именами пользователей, такими как deployer.

Ответ 3

Используя visudo, нажмите Shift+G и добавьте в конец файла:

deployer  ALL=(ALL)       NOPASSWD: ALL

затем написать и выйти (:wq)