`/ etc / sudoers` - geben Sie` env_keep` nur für einen Befehl an?

23

Gibt es eine Möglichkeit, anzugeben, dass sudobestimmte Umgebungsvariablen nur für angegebene Befehle beibehalten werden sollen? Für einige Zwecke möchte ich mein $HOMEenv. Variable, die beim Ausführen bestimmter Befehle beibehalten wird. Für andere Zwecke und andere Befehle möchte ich es zurücksetzen. Kann man damit fertig werden /etc/sudoers?

Bearbeiten:

Vielen Dank für die Antworten. Ich frage mich, ob ich eine Folgefrage stellen könnte: "Warum funktioniert das dann nicht?"

In dem Beispiel, in dem ich versuche zu arbeiten, möchte sudo nanoich meine lesen $HOME/.nanorc. Wenn ich das benutze:

Defaults:simon env_keep=HOME

es funktioniert einwandfrei. Wenn ich das benutze:

Defaults!/bin/nano env_keep=HOME

oder dieses:

Cmnd_Alias      NANO = /usr/bin/nano,/bin/nano,/bin/rnano
Defaults!NANO   env_keep=HOME

es funktioniert überhaupt nicht. Irgendwelche Vorschläge, warum? (Ich bin übrigens bei Debian-Tests.)

(Anmerkung: Ich denke nicht, dass es nanospezifisch ist, übrigens - ich kann das Verhalten mit einem einzeiligen Bash-Skript reproduzieren, das einfach echos ist $HOME).

simon
quelle
1
Anstatt zu versuchen, Nano durch sudo laufen zu lassen, um dieselbe Konfigurationsdatei zu verwenden, verwenden Sie sudoeditstattdessen. sudoeditKopiert den Inhalt einer Datei in eine tmp-Datei und führt den Editor Ihrer Wahl als Benutzer aus. Wenn der Editor beendet wird, wird überprüft, ob Sie etwas geändert haben, und in diesem Fall wird das Original durch das bearbeitete ersetzt. Sie können auswählen, welcher Editor ausgeführt werden soll, indem Sie die Umgebungsvariablen $EDITORoder $ VISUAL` einstellen.
Arrowmaster
@Arrowmaster - danke, das scheint ein besserer Ansatz zu sein als der, mit dem ich herumgespielt habe. Da ich bereits sudoeine eigene Funktion verwende, habe ich einfach einen if [ "$1" == "$EDITOR" ]; thenBlock hinzugefügt und rufe jetzt sudoeditstattdessen auf :)
simon

Antworten:

21

Überschreiben env_keepnur für /path/to/command(wenn durch eine Regel von einem Benutzer aufgerufen) und für den Benutzer joe(unabhängig davon, welchen Befehl er ausführt):

Defaults!/path/to/command env_keep=HOME
Defaults:joe env_keep=HOME

Sie können verwenden -=oder +=einen Eintrag in die entfernen oder hinzufügen env_keepListe.

Gilles 'SO - hör auf böse zu sein'
quelle
Genial, danke. Ich konnte kein richtiges Beispiel für diese Syntax finden. Jetzt, wo Sie es für mich formulieren, kann ich sehen, wie ich das aus der manSeite heraus hätte herausarbeiten sollen , und ich fühle mich ein bisschen dumm. Zweifellos wird diese Antwort auch anderen helfen.
Simon
1
@simon: Fühlen Sie sich nicht albern, auch ich finde es schwierig, die Syntaxbeschreibung in der sudoersManpage aus der formalen Beschreibung herauszuarbeiten und die Beispiele leichter zu finden, wenn Sie bereits wissen, wie man sie schreibt.
Gilles 'SO- hör auf böse zu sein'
hmm - vielleicht habe ich bald gesprochen. Jetzt, wo ich das versuche, kann ich es nicht wirklich zum Laufen bringen. Darf ich Sie bitten, sich meine Revision anzusehen?
Simon
1
@simon: Ich vermute, dass Sie auch einen Eintrag haben, mit dem Sie alles machen können und der diese env_keepEinstellung nicht hat ( simon ALL = ALL). Sudo verwendet den letzten passenden Eintrag.
Gilles 'SO- hör auf böse zu sein'
Achtung, wenn secure_path gesetzt ist, müssen Sie auch Defaults hinzufügen: joe! Secure_path
Jistanidiot
6
Cmnd_Alias      PBUILDER = /usr/sbin/pbuilder,/usr/sbin/cowbuilder
Defaults!PBUILDER       env_keep+=HOME

Diese Zeilen stammen von mir /etc/sudoers, um das Problem zu beheben, pbuilderbei dem $HOMEnach der Benutzerkonfigurationsdatei gesucht wird, die jedoch als Root ausgeführt werden muss (das Verschieben in eine /rootandere Zeile hat den Zweck, sowohl eine System- als auch eine Benutzerkonfigurationsdatei zu haben).

Pfeilmeister
quelle
Ja, das ist ein sehr ähnlicher Anwendungsfall wie der, den ich mir vorgestellt habe, danke!
Simon
Haben Sie eine Ahnung, warum die Beispiele in meiner Überarbeitung nicht zu funktionieren scheinen?
Simon
@simon sudo ist sehr wählerisch in Bezug auf die Reihenfolge der Einträge in seiner Konfiguration. Spätere Einträge werden frühere überschreiben. Möglicherweise liegt ein solcher Konflikt in Ihrer Konfiguration vor.
Arrowmaster
1

Mann sudoers:

   env_reset       If set, sudo will reset the environment to only contain
                   the LOGNAME, SHELL, USER, USERNAME and the SUDO_*
                   variables.  Any variables in the caller’s environment
                   that match the env_keep and env_check lists are then
                   added.  The default contents of the env_keep and
                   env_check lists are displayed when sudo is run by root
                   with the -V option.  If the secure_path option is set,
                   its value will be used for the PATH environment
                   variable.  This flag is on by default.

Deshalb ja, können Sie tun , dass die Verwendung env_reset, env_keepund env_checkin / etc / sudoers.

Paweł Brodacki
quelle