Output-Umleitung wird durch erhöhte sudo
Berechtigungen nicht betroffen. Der Teil, den Sie sudo
sind, ist die echo
, nicht die Umleitung der Ausgabe dieses Befehls.
Das geschieht immer noch mit der Erlaubnis Ihres derzeitigen Benutzers.
Sie benötigen also eine Möglichkeit, eine Zeile an eine Datei anzufügen, die keine Ausgabeumleitung beinhaltet.
Hinweis:frühere Version dieser Antwort präsentiert sed
als sed
balks entfernt werden, wenn die Zieldatei leer oder nicht-existent ist. Da ich den Kern der Antwort intakt halten wollte - "wie man die Ausgabeumleitung vermeidet" - habe ich Anweisungen für die Verwendung von vi
für den gleichen Zweck hinzugefügt.
Jeder POSIX-konformes System benötigt die vi
/ex
Editor haben. (Ein moderner Linux-Maschinen in der Regel einen Link starten Vim in Kompatibilitätsmodus.) Sie können "remote-control" ex/vi/Vim über die Befehlszeile: (. Dies ist ohne sudo
Teil für Klarheit)
vi -es -c "normal! G" -c "normal! ouser ALL=(ALL) NOPASSWD:ALL" -c "x" /etc/sudoers.d/ansible
Erläuterung:
-e
beginnt vi
in "ex-Modus". (Entspricht dem Aufruf ex
.)
-s
bedeutet "leise" - keine Eingabeaufforderungen, keine Nachrichten.
-c
übergibt einen Befehl an den Editor, der ausgeführt wird, sobald die erste Datei gelesen wurde.
"normal! G"
bringt zuerst den Editor in "normalen Modus" - das ist, was Sie in selbst finden würden, wenn Sie interaktiv gestartet vi
; ex
ist standardmäßig im "Befehlsmodus" (als ob Sie :
in vi eingegeben hätten). Die G
bewegt den Cursor auf die letzte Zeile.
"normal! o..."
wieder aktiviert normalen Modus, fügt eine Zeile nach der aktuellen Zeile hinzu und aktiviert "Einfügemodus". Der Rest der Zeichenfolge wird wörtlich eingegeben.
"x"
speichert die Datei und beendet den Editor.
Der Zeilenbefehl einschließlich des sudo
Teil:
echo $sudopass | sudo -S vi -es -c "normal! G" -c "normal! ouser ALL=(ALL) NOPASSWD:ALL" -c "x" /etc/sudoers.d/ansible
Ist Ihre Frage zu Berechtigungen? Sie sollten den tatsächlichen Fehler erwähnen, den Sie erhalten. –