Ansible: wie man ein Repository als anderer Benutzer klont
Lesezeit: 6 Minuten
Ich versuche, Bereitstellungsregeln mit Ansible zu schreiben. Einige der Schritte sind:
Update- und Upgrade-Server
Erstellen Sie einen Benutzer namens Harry
Fügen Sie Harry öffentliche und private Schlüssel hinzu
Klonen Sie ein Git-Repository von bitbucket.org
Ich möchte das Repository als klonen harry Benutzer in seinem Home-Verzeichnis (deshalb kopiere ich seine öffentlichen und privaten Schlüssel). Das Problem ist, dass es nicht möglich ist, einen Benutzer anzugeben, als der der Git-Klon ausgeführt werden muss. Ansible versucht also, das Repository als root zu klonen, und ist fehlgeschlagen, da er keine Rechte zum Zugriff auf das Repository hat.
Wie lösen Sie das?
Willem van Ketwich
Gemäß der Dokumentation von Ansible auf Privilegienausweitunghat Ansible Einschränkungen, wenn es darum geht, ein nicht privilegierter Benutzer zu werden, da es eine Sicherheitslücke für Harry offenlegt.
Verwenden des Ansible git Modul können Sie angeben, dass Harrys privater Schlüssel vom privilegierten Ansible-Benutzer verwendet werden soll, indem Sie das verwenden key_file Parameter und Verwendung become_user ermöglicht, dass die geklonten Dateien Harry das Eigentum übertragen werden. Zum Beispiel:
Eine sicherere Alternative zum Platzieren Ihres privaten Schlüssels auf einem Remote-Server besteht darin, die ssh-Schlüsselweiterleitung in der sshd-Konfiguration auf dem Server und Ihrer ssh-Konfiguration lokal zu aktivieren. Der Schlüssel verlässt dann niemals Ihre lokale Box.
Ich habe eine ssh-Weiterleitung und es funktioniert mit root. Aber es scheint nicht mit Bewerbe_Benutzer zu funktionieren
– naja
10. Juni 2016 um 16:44 Uhr
SSH_AUTH_SOCK geht mit become_user verloren. Die Schlüsselweiterleitung kann nur funktionieren, wenn sie beibehalten wird. Vielleicht kannst du es mit were_flags hinzufügen.
– Benjamin Atkin
13. September 2016 um 23:35 Uhr
Wie @BenAtkin erwähnt hat, geht SSH_AUTH_SOCK verloren, aber selbst wenn Sie es in der Datei /etc/sudoers aufbewahren, müssen Sie es auch angeben harry Berechtigungen für den Zugriff auf die Socket-Datei. serverfault.com/questions/107187/…
– krzychu
12. Januar 2017 um 15:04 Uhr
George Mogilevsky
Ja, Sie können es mit ssh-Weiterleitung zum Laufen bringen
Solange der Benutzer, zu dem Sie im Git-Klon werden, Teil von sudoers ist, muss er sudo nicht verwenden, um git auszuführen
Zusätzlich zu allen für die Schlüsselweiterleitung erforderlichen Konfigurationen gibt es also einen Trick, der sogar in Ansible-Dokumentationen erwähnt wird. Der Prozess auf hoher Ebene ist wie folgt: Aktivieren Sie die Agentenweiterleitung auf der Steuerungsmaschine. Aktivieren Sie das Akzeptieren des Agentenschlüssels auf der Zielmaschine. Erstellen Sie einen Benutzer und fügen Sie ihn (oder sie:) der sudoers-Gruppe hinzu. Verwenden Sie das Git-Modul von Ansible, um das Repo zu klonen
Um zu vermeiden, dass Berechtigungen auf dem Host verweigert werden, klonen Sie es einfach in ~/something. Sie können es jederzeit kopieren oder symbolisch an eine beliebige Stelle verlinken
Hier ist der Link, wo der Playbook-Teil zum Hinzufügen von Benutzern zu Sudoern angezeigt wird, es ist im Grunde ein Kopieren und Einfügen: Ansible: Erstellen Sie einen Benutzer mit Sudo-Berechtigungen
klappt wunderbar
Stellen Sie außerdem sicher, dass Sie Ihren öffentlichen SSH-Schlüssel in den allgemeinen Einstellungen von BitBucket hinzufügen, nicht in den Pro-Projekten. Andernfalls funktioniert Ihr SSH-Schlüssel nur mit einem bestimmten Repo. Aber wenn Sie den ssh-Schlüssel in den allgemeinen Bitbucket-Einstellungen hinzufügen, funktioniert er auf allen Ihren Repos
Unten ist der Code, der es zum Laufen bringt, der Suduer-Benutzer ist “Deployer”.
# the tasks to CREATE A SUDOER GROUP
- name: Make sure we have a 'wheel' group
group:
name: wheel
state: present
become: yes
- 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'
become: yes
- name: Add sudoers users to wheel group
user: name=deployer groups=wheel append=yes state=present createhome=yes
become: yes
# tasks to ADD REPO with Ansible's GIT MODULE
- name: Add Git Repo - BitBucket
git:
repo: '[email protected]:<your_username>/<your_repo>.git'
dest: ~/code # note this destination, you will avoid permissions issues
accept_hostkey: yes # btw, this is for the ssh key forwarding
recursive: no
become: deployer # this guy (or gal) is a sudoer by now
# Extra “Hack”, um Berechtigungen für Dateien UND Ordner auf einmal zu ändern, es hat mit dem großen X zu tun und was es betrifft und was nicht. Auch von einem anderen Stackoverflow abgeholt
- name: Set perms on new Code repo to deployer:deployer dirs-0755 and files-0644
file:
path: ~/code
state: directory
owner: deployer
group: deployer
mode: u=rwX,g=rX,o=rX
recurse: yes
become: yes
SSH_AUTH_SOCK Wir müssen dem Deployer Berechtigungen für den Zugriff auf die Socket-Datei erteilen serverfault.com/a/448972/253195
– Mikl
15. Mai 2020 um 17:50 Uhr
Entschuldigung, aber warum sollten Sie sudo für git verwenden?
– cybernet2u
1. März um 6:13
George Mogilevsky
Ja mit ssh-Weiterleitung funktioniert es. Wenn Ihr Playbook global „become: yes“ aktiviert hat, stellen Sie sicher, dass Sie dies für die Git-Aufgabe deaktivieren. Der Grund, warum es nicht funktioniert, wenn Sie „become: yes“ haben, liegt darin, dass die Ausweitung der Root-Privilegien die ssh-Weiterleitung zerstört. Ich glaube nicht, dass du ein Sudoer werden musst. Denn wenn Ihr Ansible-Steuerungscomputer bei Bitbucket mit dem SSH-Schlüssel authentifiziert wird (Sie fügen den SSH-Schlüssel zum Repo hinzu), dann wird diese Authentifizierung durch die SSH-Weiterleitung geleitet. Sie können es per ssh in Ihr Ziel testen und „ssh -T [email protected]“ eingeben. In der Ausgabe sehen Sie, dass das Ziel von Bitbucket als Benutzer der Ansible-Steuerungsmaschine akzeptiert wird. Also einfach die Aufgabe mit explizitem „become: no“ ausführen. Ich stimme dem Klonen in ~/something auf dem Ziel zu. Andernfalls kommt es zu Berechtigungsproblemen.
[Edit: one more thing to make it work – ⁃ Repo URL should be the ssh one not https one, without ssh:// (despite what is written in the Ansible Manual examples)]
In Bezug auf die Sicherheit ist, wie oben erwähnt, die ssh-Weiterleitung am besten.
Wir können einfach Benutzer machen Harry (www-data in meinem Beispiel) zugänglich per ssh mit den gleichen authorisierten_Schlüsseln wie die Wurzel. Es wird kein Sicherheitsproblem sein, wenn Sie eine Verbindung herstellen können Wurzel mehr kannst du dann sowieso machen wenn du dich da verbindest Harry.