Ich versuche, eine Sudoers-Datei mit einer ansiblen Vorlage zu erstellen. Die sudoers-Datei sollte wie folgt aussehen:
Cmnd_Alias LS = /bin/ls
Cmnd_Alias LESS = /usr/bin/less
Cmnd_Alias DU = /usr/bin/du
%support1 ALL=(ALL) NOPASSWD: LS, LESS, DU
Was ich bisher geschafft habe, ist unten:
Cmnd_Alias LS = ls
Cmnd_Alias LESS = less
Cmnd_Alias DU = du
%support1 ALL=(ALL) NOPASSWD: LS, LESS, DU
Die Vorlage sieht wie folgt aus:
{% for item in commands %}
Cmnd_Alias {{ item|upper }} = {{ item }}
{% endfor %}
%{{ group }} ALL=(ALL) NOPASSWD: {% for item in commands %}
{{ item|upper}}{% if not loop.last %}, {% endif %}
{% endfor %}
vars
commands:
- ls
- less
- du
Soweit ich weiß, verfügt das Ansible-Vorlagenmodul über nichts, was den Befehl auf dem Remote-Server ausführt und die Ausgabe druckt. Andernfalls habe ich daran gedacht, die Vorlagendatei so zu ändern, dass sie wie folgt aussieht:
{% for item in commands %}
Cmnd_Alias {{ item|upper }} = `which {{ item }}`
{% endfor %}
%{{ group }} ALL=(ALL) NOPASSWD: {% for item in commands %}
{{ item|upper}}{% if not loop.last %}, {% endif %}
{% endfor %}
und die Ausgabe wird so sein, wie ich es wollte.
Gibt es eine andere Methode, die es einfach machen kann?
Übrigens habe ich diesen Beitrag bereits überprüft
Antworten:
TL; DR: KISS. Verwenden Sie nicht weniger.
Menschen machen oft einen Fehler mit Ansible, indem sie versuchen, variable Dinge zu machen, die nicht sein müssen. Sofern Sie nicht an mehreren Stellen die Liste der Befehle definieren, auf die der Support zugreifen kann, ist es durchaus akzeptabel, sie einfach in die Erstellungsdatei der Vorlage einzufügen:
templates / etc / sudoers.d / support1
oder sogar explizit, da Sie die Cmnd_Alias nirgendwo wiederverwenden
Und fügen Sie eine Aufgabe hinzu wie:
Sie würden nur Vorlagen anstelle von Dateien verwenden, da zu einem späteren Zeitpunkt möglicherweise eine Variable hinzugefügt werden muss oder der Gruppenname von einer Variablen stammt, wenn Sie eine andere Rolle erhalten, die die Gruppen erstellt.
Wenn Sie eine Variable verwenden müssen, können Sie eine Liste von Hashes wie folgt verwenden:
Dann in der Vorlage:
Es ist nicht sicher, / usr / bin / less zu verwenden
Bei alledem haben Sie nicht viel Wichtiges bemerkt und das ist die Verwendung von weniger als Betrachter. Leider ist das eine Sicherheitslücke. Sie können '! Bash' eingeben, um bash aufzurufen. Durch Drücken von 'v' gelangen Sie in den Editor, der auf den Variablen VISUAL, EDITOR oder LESSEDIT basiert. Sie können ihnen also '/ bin / cat' geben und sie können den Inhalt immer in weniger selbst weiterleiten. Beachten Sie, dass dies immer noch eine Sicherheitslücke ist, da einige Dateien unter Unix absichtlich eingeschränkt sind, zum Beispiel:
quelle
zuerst
Sie sollten sich auf Jinja Umgang mit Leerzeichen / Zeilenumbrüchen beziehen. Ihre aktuelle Vorlage würde neue Zeilen erstellen. Und ich denke, dies wird die
sudo
Syntaxvalidierung verwirren und fehlschlagen (IIRC, die richtige Syntax besteht darin, Folgendes hinzuzufügen-
:-%}
an der for-Schleife, aber Sie sollten "spielen" und sehen, was passiert). Um eine Vorlage zu rendern, können Sie dies auf Ihrer Workstation tun, ohne sie auf dem tatsächlichen Zielcomputer auszuführen.Ich denke auch, dass das Erstellen der Vorlage mit 1 Befehl in der Befehlszeile besser lesbar ist:
Zweitens
Ich empfehle nicht, vorhandene globale Dateien mit ansible zu bearbeiten. Erstellen Sie stattdessen Ihre benutzerdefinierte Vorlage unter
/etc/sudoers.d/
(wie Sie bereits erwähnt haben).Dies ist der richtige Weg, weil:
Drittens
Ich denke, die Ausführung im
which
Innerensudoers
ist eine originelle Idee, sollte aber nicht funktionieren.quelle