Possible: Créer un utilisateur avec les privilèges sudo

j'ai repris un serveur Ubuntu 14.04. Il a un utilisateur appelé "déployer" (utilisé avec capistrano), et en tant que tel, il a besoin de privilèges sudo. Avec cette configuration, je peux me connecter au serveur et faire des choses comme:

workstation> ssh deployer@myserver
myserver>  sudo apt-get install git
myserver> exit
workstation>

j'essaie de comprendre comment utiliser Ansible (version 2.0.2.0 et python 2.7.3) pour créer un utilisateur appelé" déployer "et être capable de se connecter au serveur avec cette id et puis donc sudo-ish choses comme"apt-get install". Mon playbook ressemble à ceci:

---
- 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

après l'exécution de ce playbook, je suis capable de SSH dans la machine comme" déployer", (par exemple SSH deployer@myserver) mais si j'exécute une commande sudo, il me demande toujours mon mot de passe sudo.

je comprends que l'utilisateur" deployer " doit finalement trouver son chemin dans le fichier des utilisateurs de visudo, mais je ne peux pas trouver quelles incantations Ansibles magiques invoquer pour que je puisse ssh dans la machine comme déployer et ensuite exécuter une commande sudo (e.g. sudo apt-get install git") sans qu'on lui demande un mot de passe sudo.

j'ai cherché haut et bas, et je ne semble pas trouver un fragment de playbook possible qui place l'utilisateur" déployer " dans le groupe sudo sans exiger un mot de passe. Comment est-ce fait?

37
demandé sur Jay Godse 2016-05-19 23:22:46

2 réponses

parfois c'est savoir quoi demander. Je ne savais pas car je suis un développeur qui a pris sur certains travaux de DevOps.

apparemment 'passwordless' ou nopasswd login est une chose que vous devez mettre dans le fichier /etc/sudoers.

La réponse à ma question est Ansible: les meilleures pratiques pour le maintien de la liste des sudoers .

le fragment de code Ansible du playbook ressemble à ceci de mon problème:

- 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

Et la meilleure partie est que la solution est idempotent. Il n'ajoute pas la ligne

%wheel ALL=(ALL) NOPASSWD: ALL

à / etc / sudoers lorsque le playbook est lancé une fois de plus. Et oui...J'ai pu ssh dans le serveur comme "déployer" et exécuter des commandes sudo sans avoir à donner de mot de passe.

77
répondu Jay Godse 2017-11-01 15:25:09

à l'aide de visudo, appuyer sur Shift+G et ajouter à la fin du fichier:

deployer  ALL=(ALL)       NOPASSWD: ALL

puis écrire et quitter ( :wq )

-2
répondu F S 2018-09-04 20:50:00