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, deploy
beliebige 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 visudo
die beiden unten gezeigten Zeilen aus und kommentieren Sie sie aus. Nur das Auskommentieren env_reset
funktioniert nicht
#Defaults env_reset
Defaults mail_badpass
#Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:$PATH"