Wie kann der Benutzer die Umgebung mit sudo schützen?


17

Beim Versuch, einige Umgebungsvariablen beim Ausführen an die neue Umgebung weiterzuleiten, tritt der folgende Fehler auf sudo:

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

Einige Informationen, die beim Debuggen hilfreich sein können:

[deploy@worker1 ~]$ sudo -l
    Matching Defaults entries for deploy on this host:
    requiretty, !visiblepw, always_set_home, env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE",
    env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES", env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE", env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET
    XAUTHORITY", secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin, env_keep+="GIT_WORK_TREE GIT_DIR", !requiretty

User deploy may run the following commands on this host:
    (ALL) NOPASSWD: /usr/bin/git, (ALL) /etc/init.d/httpd*, (ALL) /sbin/service, (ALL) /usr/bin/make, (ALL) /bin/echo

Mein Laufbeispiel:

[deploy@worker1 ~]$ export GIT_DIR="/home/ashinn/testing"
[deploy@worker1 ~]$ sudo -E sh -c 'echo "$GIT_DIR"'
sudo: sorry, you are not allowed to preserve the environment

Meine sudoers.d-Datei für diese spezielle Konfiguration:

Defaults:deploy         env_keep += "GIT_WORK_TREE GIT_DIR", !requiretty
deploy  ALL=(ALL)       NOPASSWD: /usr/bin/git, /etc/init.d/httpd*, /sbin/service, /usr/bin/make, /bin/echo

Ich habe auch versucht !env_reset, die Standardeinstellungen hinzuzufügen , und es schlägt immer noch mit dem gleichen Fehler fehl. Ich habe das Gefühl, dass ich etwas Offensichtliches vermisse und ein zweites Paar Augen brauche. Was vermisse ich hier?


1
Ich glaube, dass ungefähr 93% von uns den Punkt Ihrer Frage verstehen, aber Ihr Beispielbefehl ist nicht sehr gut.  Wenn dies nicht sofort fehlschlägt, wird der Vorgabewert von angezeigt , da die Shell die Variable in der Befehlszeile erweitert, bevor sie überhaupt aufgerufen wird. Bessere Tests sind oder oder , wo wir uns die Umgebung des Prozesses ansehen, der privilegiert läuft. sudo (option(s)) echo $GIT_DIRsudo$GIT_DIRsudosudo printenv GIT_DIRsudo env | grep GIT_DIRsudo sh -c 'echo "$GIT_DIR"'
G-Man sagt, dass Monica

Antworten:


27

Sie können das SETENV"Tag" in Ihrer sudoersDatei verwenden, wie in:

deploy  ALL=(ALL)       SETENV: /usr/bin/git, /etc/init.d/httpd*, /sbin/service, /usr/bin/make, /bin/echo

Oder, um es mit NOPASSWD zu kombinieren:

deploy  ALL=(ALL)       NOPASSWD:SETENV: /usr/bin/git, /etc/init.d/httpd*, /sbin/service, /usr/bin/make, /bin/echo

Relevanter Auszug aus dem Sudoer-Man:

SETENV und NOSETENV

Diese Tags überschreiben den Wert der Option setenv auf Befehlsbasis. Beachten Sie, dass der Benutzer die Option env_reset in der Befehlszeile über die Option -E deaktivieren kann, wenn SETENV für einen Befehl festgelegt wurde. Zusätzlich Umgebungsvariablen in der Befehlszeile festgelegt sind , unterliegen nicht die von auferlegten Beschränkungen env_check, env_deleteoder env_keep. Daher sollten nur vertrauenswürdige Benutzer die Möglichkeit haben, Variablen auf diese Weise festzulegen. Wenn der übereinstimmende Befehl ALL ist, wird das SETENV-Tag für diesen Befehl impliziert. Diese Standardeinstellung kann mit dem NOSETENV-Tag überschrieben werden.


1

Geben Sie die -EOption nicht an. Wenn -ESie sagen, dass alle Umgebungsvariablen für den Benutzer deployerhalten bleiben sollen, nicht nurGIT_DIR

Laufen sudo echo $GIT_DIRsollte funktionieren, da Sie GIT_DIRder env_keepListe hinzugefügt haben

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.