web-dev-qa-db-fra.com

Sous quel utilisateur Ansible exécutera-t-il mes commandes?

Contexte

Ma question semble simple, mais elle devient plus complexe très rapidement.

Fondamentalement, je me suis vraiment fatigué de maintenir mes serveurs manuellement (cris en arrière-plan) et j'ai décidé qu'il était temps de trouver un moyen de rendre l'administrateur d'un serveur beaucoup plus agréable à vivre. C'est alors que j'ai trouvé Ansible. Super hein? Bien sûr, il fait des scripts bash (cri plus fort) pour tout ce que je voulais automatiser.

Quel est le problème?

J'ai beaucoup de mal à déterminer à quel utilisateur mon playbook Ansible exécutera certaines choses. J'ai également besoin de pouvoir spécifier sous quel utilisateur certaines tâches seront exécutées. Voici quelques cas d'utilisation spécifiques:

Clonage d'un dépôt en tant qu'autre utilisateur:

Mon but est d'exécuter ma webapp node.js à partir d'un autre utilisateur, que nous appellerons bill (qui ne peut utiliser Sudo que pour exécuter un script que j'ai créé qui démarre le serveur de noeud, par opposition pour rooter ou mon utilisateur qui peut utiliser Sudo pour toutes les commandes). Pour ce faire, j'ai besoin que le module git d'Ansible puisse cloner mon dépôt git sous la forme bill. Comment ferais-je ça?

Savoir comment Ansible va prendre racine:

Autant que je sache, vous pouvez définir quel utilisateur Ansible se connectera au serveur que vous gérez en définissant "utilisateur" et le début du fichier playbook. Voici ce que je ne comprends pas: si je lui dis de se connecter via mon nom d'utilisateur, joe, et lui demande de mettre à jour un paquet via le module apt, comment va-t-il gagner racine? Sudo me demande généralement mon mot de passe, et je préfère le conserver de cette façon (pour des raisons de sécurité).

Demande finale

J'ai parcouru les documents Ansible, fait quelques recherches (ce que je pensais approfondies), et généralement j'ai juste essayé de le comprendre par moi-même, mais cette information continue de m'échapper.

Je suis très nouveau sur Ansible, et bien que ce soit principalement simple, je gagnerais beaucoup si je pouvais comprendre exactement comment Ansible s'exécute, sur quels utilisateurs il s'exécute et comment/où je peux spécifier quel utilisateur utiliser à différents moments.

Merci beaucoup d'avance

44
Michael

Vous pouvez trouver utile de lire la section Hôtes et utilisateurs sur le site de documentation d'Ansible:

http://docs.ansible.com/playbooks_intro.html#hosts-and-users

En résumé, ansible exécutera toutes les commandes d'un playbook en tant qu'utilisateur spécifié dans le remote_user variable (en supposant que vous utilisez ansible> = 1.4, user avant cela). Vous pouvez également spécifier cette variable pour chaque tâche, au cas où une tâche doit s'exécuter en tant qu'utilisateur donné.

Utilisation Sudo: true dans n'importe quel playbook/tâche à utiliser Sudo pour l'exécuter. Utilisez le Sudo_user variable pour spécifier un utilisateur à Sudo si vous ne voulez pas utiliser root.

En pratique, j'ai trouvé qu'il était plus facile d'exécuter mon playbook en tant qu'utilisateur deploy disposant des privilèges Sudo. J'ai configuré mes clés SSH afin que je puisse SSH dans n'importe quel hôte en tant que deploy sans utiliser de mot de passe. Cela signifie que je peux exécuter mon playbook sans utiliser de mot de passe et même utiliser Sudo si j'en ai besoin.

J'utilise ce même utilisateur pour faire des choses comme le clonage de git repos et le démarrage/arrêt de services. Si un service doit s'exécuter en tant qu'utilisateur disposant de privilèges inférieurs, je laisse le script init s'en occuper. Une recherche rapide sur Google d'un script node.js init.d a révélé celui-ci pour CentOS:

https://Gist.github.com/nariyu/121141

Faire les choses de cette façon aide à rester simple, ce que j'aime.

J'espère que ça t'as aidé.

49
mjackson

Mes 2 cents:

  1. Ansible utilise votre utilisateur local (par exemple Mike) pour ssh vers la machine distante. (Cela nécessitait que Mike soit capable de se connecter à la machine)
  2. De là, il peut devenir un utilisateur distant si nécessaire
  3. Il peut également Sudo si nécessaire et si Mike est autorisé. Si aucun utilisateur n'est spécifié, root sera sélectionné via votre ~/.ansible.cfg sur votre ordinateur local.
  4. Si vous fournissez un remote_user avec le paramètre Sudo, comme le n ° 3, il n'utilisera pas root mais cet utilisateur.

Vous pouvez spécifier différentes situations et différents utilisateurs ou Sudo via playbooks .

Le Playbook définit les rôles qui seront exécutés sur chaque machine appartenant à l'inventaire sélectionné.

Je vous suggère de lire Meilleures pratiques Ansible pour une explication sur la façon de configurer votre infrastructure.

Oh et btw puisque vous ne faites pas référence à un module spécifique qu'ansible utilise et que votre question n'est pas liée à python, alors je ne trouve aucune utilisation de votre question ayant la balise python.

5
Jimmy Kane

Juste une note que Ansible> = 1.9 utilise des commandes d'élévation de privilèges afin que vous puissiez exécuter des tâches et créer des ressources en tant qu'utilisateur secondaire si besoin est:

- name: Install software
  Shell: "curl -s get.dangerous_software.install | Sudo bash"
  become_user: root

http://docs.ansible.com/ansible/become.html#become-privilege-escalation

4
Michael