it-swarm.com.de

Wie exportiere ich eine Variable zur Verwendung mit sudo?

Unter Slackware können Sie mit sbopkg ein Paket aus dem Quellcode erstellen. Repos ist nicht so groß wie Debian, aber es ist schön.

Einige Softwareprogramme können Umgebungsvariablen verwenden, z. B. auf dem VICE c64-Emulator. Wenn die Variable FFMPEG auf yes gesetzt ist, wird ffmpeg die Aufzeichnung des Emulators aktiviert.

Ich habe versucht zu benutzen

$ export FFMPEG=yes; Sudo sbopkg -B -i vice

aber ffmpeg ist deaktiviert.

Stattdessen musste ich verwenden

$ su -
$ export FFMPEG=yes
$ sbopkg -B -i vice

was funktioniert.

Wie verwende ich Umgebungsvariablen mit Sudo?

27
elbarna

Sie können die Option -E Von Sudo verwenden:

FMPEG=yes Sudo -E sbopkg -B -i vice

Aus dem Handbuch:

-E, --preserve-env

Gibt der Sicherheitsrichtlinie an, dass der Benutzer seine vorhandenen Umgebungsvariablen beibehalten möchte. Die Sicherheitsrichtlinie gibt möglicherweise einen Fehler zurück, wenn der Benutzer keine Berechtigung zum Schutz der Umgebung hat.

Beachten Sie, dass dies alle Ihre vorhandenen Umgebungsvariablen exportiert. Es ist sicherer, die benötigten Umgebungsvariablen nur mit der folgenden Syntax zu exportieren:

Sudo FMPEG=yes sbopkg -B -i vice

41
xhienne

Sudo bereinigt die Variablen in der Umgebung, bevor der angegebene Befehl aufgerufen wird. Sie müssen ihn bitten, die Variablen in der Umgebung beizubehalten, damit Ihr Befehl funktioniert.

Außerdem müssen Sie die Variable exportFMPEGSudo verwenden, bevor Sie Sudo (export FMPEG=yes; Sudo) Verwenden. _ (FMPEG=yes Sudo) Oder verwenden Sie env (env FMPEG=yes Sudo).

Verwenden Sie -E (Oder --preserve-env), Um die Umgebungsvariablen beizubehalten:

$ env FMPEG=yes Sudo -E sbopkg -B -i vice

Es ist auch möglich, bestimmte Umgebungsvariablen wie folgt festzulegen:

$ Sudo FMPEG=yes sbopkg -B -i vice

Wenn dies aufgrund der vorhandenen Sicherheitsrichtlinie fehlschlägt, rufen Sie eine Root-Shell auf und legen Sie dort die Variable fest:

$ Sudo -s
# env FMPEG=yes sbopkg -B -i vice
# exit
11
Kusalananda

beachten Sie, dass: (export a=b; command) ist äquivalent zu a=b command. Beachten Sie die Klammern.

Wenn wir dann die Variable nicht auf Sudo, sondern direkt auf sbopkg anwenden, also anstelle von FFMPEG=yes Sudo sbopkg -B -i vice wir können Sudo FFMPEG=yes sbopkg -B -i vice

Wenn eine Sicherheitspolizei dies verhindert, dann: Sudo bash -c "FFMPEG=yes sbopkg -B -i vice"

(Verwenden Sie nicht -E, es ist unsicher, da es alle möglichen unerwarteten Variablen verliert.)

8
ctrl-alt-delor