Wenn ich einen Befehl mit sudo verwende, sind die Umgebungsvariablen nicht vorhanden. Zum Beispiel wird nach dem Setzen von HTTP_PROXY der Befehl wget
funktioniert gut ohne sudo
. Wenn ich jedoch eingebe sudo wget
Es sagt, dass es die Proxy-Einstellung nicht umgehen kann.
Antworten
Zu viele Anzeigen?Hinzufügen von Codeschnipseln zu /etc/sudoers.d
Ich weiß nicht, ob dies in allen Distributionen verfügbar ist, aber in Debian-basierten Distributionen gibt es eine Zeile am oder nahe dem Ende der /etc/sudoers
Datei, die den Ordner /etc/sudoers.d
. Darin kann man Code hinzufügen "Schnipsel" die die Konfiguration von sudo ändern. Insbesondere erlauben sie die Kontrolle über alle Umgebungsvariablen, die in sudo
.
Wie bei /etc/sudoers
diese "Code-Schnipsel" sollte mit visudo
. Sie können mit der Lektüre der README
die auch ein praktischer Ort ist, um Notizen zu machen:
$ sudo visudo -f /etc/sudoers.d/README
# files for your snippets may be created/edited like so:
$ sudo visudo -f /etc/sudoers.d/20_mysnippets
Lesen Sie den Abschnitt "Befehlsumgebung" in 'man 5 sudoers'.
Die vielleicht informativste Dokumentation zur Umgebungskonfiguration in sudo
findet sich in der Command environment
Abschnitt von man 5 sudoers
. Hier erfahren wir, dass eine sudoers Umgebungsvariablen, die standardmäßig blockiert sind, können sein "auf der Whitelist" unter Verwendung der env_check
o env_keep
Optionen; z.B.
Defaults env_keep += "http_proxy HTTP_PROXY"
Defaults env_keep += "https_proxy HTTPS_PROXY"
Defaults env_keep += "ftp_proxy FTP_PROXY"
Und so können wir im Fall des Auftraggebers die Prüfung "bestehen". sudoer's Umgebungsvariablen wie folgt:
$ sudo visudo -f /etc/sudoers.d/10_myenvwlist
# opens the default editor for entry of the following lines:
Defaults env_keep += "http_proxy HTTP_PROXY"
Defaults env_keep += "https_proxy HTTPS_PROXY"
# and any others deemed useful/necessary
# Save the file, close the editor, and you are done!
Orientieren Sie sich an '# sudo -V'.
Der OP hat vermutlich die fehlende Umgebungsvariable in sudo
por Versuch und Irrtum . Es ist jedoch möglich, proaktiv zu handeln: Eine Auflistung aller Umgebungsvariablen und ihres erlaubten oder verweigerten Status ist verfügbar (und für jeden Host eindeutig) über die root
wie folgt auffordern:
# sudo -V
...
Environment variables to check for safety:
...
Environment variables to remove:
...
Environment variables to preserve:
...
Beachten Sie, dass eine Umgebungsvariable, die wie oben beschrieben auf der "Whitelist" steht, in den nachfolgenden Auflistungen von sudo -V
unter dem Eintrag "bewahren".
Wenn Sie die Umgebungsvariablen in einem Skript aufbewahren müssen, können Sie Ihren Befehl in ein Dokument wie dieses hier einfügen. Vor allem, wenn Sie viele Variablen zu setzen haben, sehen die Dinge auf diese Weise ordentlich aus.
# prepare a script e.g. for running maven
runmaven=/tmp/runmaven$$
# create the script with a here document
cat << EOF > $runmaven
#!/bin/bash
# run the maven clean with environment variables set
export ANT_HOME=/usr/share/ant
export MAKEFLAGS=-j4
mvn clean install
EOF
# make the script executable
chmod +x $runmaven
# run it
sudo $runmaven
# remove it or comment out to keep
rm $runmaven
- See previous answers
- Weitere Antworten anzeigen