Wie kann ich *alle* Umgebungsvariablen für einen bestimmten Befehl in sudo behalten?

Wie kann ich *alle* Umgebungsvariablen für einen bestimmten Befehl in sudo behalten?

Ich habe ein Skript, das mehrere Umgebungsvariablen festlegt und dann schließlich mit sudo ein anderes Skript aufruft.

Das mit sudo ausgeführte Skript muss diese Variablen abrufen können, und ich bin mir nicht immer sicher, um welche Variablen es sich handelt.

Gibt es eine Möglichkeit, diesen Sudoers-Eintrag so zu konfigurieren, dass dem Befehl vollständiger Zugriff auf die Umgebungsvariablen des Anrufers gewährt wird?

%deploy ALL=NOPASSWD: /bin/build.sh

Wenn ich den sudo-Befehl aus meinem Skript ausführe:

sudo -E build.sh "$@"

Ich bekomme:

sudo: sorry, you are not allowed to preserve the environment

Beim Googeln habe ich nur Möglichkeiten gefunden, bestimmte Variablen und nicht alles beizubehalten.

Antwort1

Nachdem ich die erste Antwort getestet hatte und immer noch Probleme bekam sudo: sorry, you are not allowed to preserve the environment, beschloss ich, mich nach einer besseren Lösung umzusehen.

Nach einigen Tests habe ich herausgefunden, dass die Option, die zählt, ist setenv.

Defaults!/bin/build.sh setenv

Um es etwas sicherer zu machen, können wir ein paar Einstellungen hinzufügen:

Defaults    secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11/bin"
Defaults!/bin/build.sh setenv,env_reset,env_delete+=PATH,env_delete+=LD_PRELOAD,env_delete+=LD_LIBRARY_PATH,env_delete+=SSH_AUTH_SOCK,env_delete+=PYTHONPATH,env_delete+=PERL5LIB
%deploy  ALL=(ALL) NOPASSWD: /bin/build.sh *

Antwort2

Wenn Sie Benutzern in der Gruppe erlauben möchten, deploybeliebige Befehle mit nahezu allen Umgebungsvariablen auszuführen:

Defaults:%deploy !env_reset,env_delete-=PYTHONPATH,env_delete-=PERL5LIB
%deploy ALL = (ALL) ALL

Führen Sie es aus sudo -V, um zu sehen, welche Variablen gelöscht werden.

Es macht wenig Sinn, den Befehl einzuschränken, wenn Sie dem Benutzer erlauben, alle Umgebungsvariablen beizubehalten, da dies dem Benutzer wahrscheinlich ermöglichen würde, über irgendeine Variable beliebigen Code auszuführen.

Wenn Sie Ihr Skript sorgfältig geprüft haben und sicher sind, dass Sie über eine vollständige Liste der zu entfernenden Umgebungsvariablen verfügen, können Sie angeben, dass diese Umgebungsvariablen gelöscht und alle anderen beibehalten werden sollen.

Defaults!/bin/build.sh !env_reset,env_delete+=DANGEROUS_VAR
%deploy ALL = (ALL) /bin/build.sh

Antwort3

Führen Sie sudo visudodie beiden unten gezeigten Zeilen aus und kommentieren Sie sie aus. Nur das Auskommentieren env_resetfunktioniert nicht

#Defaults       env_reset
Defaults        mail_badpass
#Defaults       secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:$PATH"

verwandte Informationen