`/ etc / sudoers` - specifica` env_keep` per un solo comando?


23

Esiste un modo per specificare che sudodovrebbe preservare determinate variabili di ambiente solo per i comandi specificati? Per alcuni scopi mi piacerebbe la mia $HOMEenv. variabile conservata quando eseguo determinati comandi. Per altri scopi e altri comandi, voglio ripristinarlo. Questo può essere fatto con /etc/sudoers?

Modificare:

Grazie per le risposte. Mi chiedo se potrei fare una domanda di follow-up, che è "Perché, allora, non funziona?"

Nell'esempio sto cercando di mettermi al lavoro, voglio sudo nanoleggere il mio $HOME/.nanorc. Se uso questo:

Defaults:simon env_keep=HOME

funziona perfettamente. Se uso questo:

Defaults!/bin/nano env_keep=HOME

o questo:

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

non funziona affatto. Qualche suggerimento sul perché? (Sono in test Debian, tra l'altro.)

(Nota: io non credo che sia nanospecifico, btw - posso riprodurre il comportamento con uno script bash una riga che semplicemente echos $HOME).


1
Invece di provare a far funzionare nano sudo per usare lo stesso file di configurazione, usa sudoeditinvece. sudoediteseguirà la copia del contenuto di un file in un file tmp ed eseguirà l'editor di tua scelta come utente, quando l'editor uscirà controllerà se hai cambiato qualcosa e in tal caso sostituisci l'originale con quello modificato. Puoi selezionare quale editor vuoi che esegua impostando i $EDITORparametri o $ VISUAL`.
Arrowmaster,

@Arrowmaster - grazie, sembra un approccio migliore di quello con cui stavo scherzando. Dato che mi sto già avvolgendo sudocon una mia funzione, ho semplicemente aggiunto un if [ "$1" == "$EDITOR" ]; thenblocco e ora sto chiamando sudoeditinvece :)
simon

Risposte:


21

Per eseguire l'override env_keepsolo per /path/to/command(quando invocato tramite qualsiasi regola, da qualsiasi utente) e per l'utente joe(indipendentemente dal comando che sta eseguendo):

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

È possibile utilizzare -=o +=per rimuovere o aggiungere una voce env_keepall'elenco.


geniale, grazie. Non sono riuscito a trovare un esempio corretto di tale sintassi. Ora che me lo spieghi, posso vedere come avrei dovuto risolverlo dalla manpagina e mi sento un po 'sciocco. Senza dubbio questa risposta aiuterà anche gli altri.
simon

1
@simon: Non sentirti sciocco, anche io trovo la descrizione della sintassi nella sudoerspagina man difficile da capire dalla descrizione formale e dagli esempi più facili da individuare se sai già come scriverli.
Gilles 'SO- smetti di essere malvagio'

hmm - forse ho parlato presto. Ora che provo questo, non riesco davvero a farlo funzionare. Posso disturbarti a dare un'occhiata alla mia revisione?
simon

1
@simon: La mia ipotesi è che hai anche una voce che ti consente di fare tutto e che non ha quell'impostazione env_keep( simon ALL = ALL). Sudo utilizza l' ultima voce corrispondente.
Gilles 'SO- smetti di essere malvagio'

Attenzione, se è impostato secure_path, dovrai anche aggiungere Default: joe! Secure_path
Jistanidiot

6
Cmnd_Alias      PBUILDER = /usr/sbin/pbuilder,/usr/sbin/cowbuilder
Defaults!PBUILDER       env_keep+=HOME

Quelle righe provengono da me /etc/sudoersper correggere il problema che pbuildercerca il $HOMEsuo file di configurazione dell'utente ma deve essere eseguito come root (spostandolo in un certo modo si /rootsconfigge lo scopo di avere sia un sistema che un file di configurazione dell'utente).


sì, è un caso d'uso molto simile a quello che avevo in mente, grazie!
simon

hai idea del perché gli esempi nella mia revisione non sembrano funzionare?
simon

@simon sudo è molto esigente riguardo all'ordine delle voci nella sua configurazione, le voci successive sovrascriveranno quelle precedenti. Potrebbe esserci qualche conflitto del genere nella tua configurazione.
Arrowmaster,

1

uomo 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.

Quindi sì, è possibile farlo usando env_reset, env_keepe env_checkin / etc / sudoers.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.