Passando PERCORSO attraverso sudo


13

In breve : come fare in modo che sudo non svuoti il ​​PERCORSO ogni volta?

Ho alcuni siti Web distribuiti sul mio server (test Debian) scritti con Ruby on Rails. Uso Mongrel + Nginx per ospitarli, ma c'è un problema che si presenta quando devo riavviare Mongrel (ad esempio dopo aver apportato alcune modifiche).

Tutti i siti sono controllati in VCS (git, ma non è importante) e il proprietario e il gruppo sono impostati sul mio utente, mentre Mongrel funziona sotto l'utente, eh, mongrel che è severamente limitato nei suoi diritti. Quindi Mongrel deve essere avviato sotto root (può cambiare automaticamente l'UID) o mongrel.

Per gestire mongrel uso mongrel_cluster gem perché consente di avviare o arrestare qualsiasi quantità di server Mongrel con un solo comando. Ma ha bisogno che la directory /var/lib/gems/1.8/bin sia in PERCORSO: questo non è sufficiente per avviarlo con il percorso assoluto .

La modifica del PERCORSO nella radice .bashrc non ha cambiato nulla, nemmeno l'ottimizzazione di suv env_reset e env_keep.

Quindi la domanda: come aggiungere una directory a PATH o mantenere il PERCORSO dell'utente in sudo?

Aggiornamento: alcuni esempi

$ env | grep PATH
PATH=/usr/local/bin:/usr/bin:/bin:/usr/games:/var/lib/gems/1.8/bin
$ sudo cat /etc/sudoers | egrep -v '^$|^#'
Defaults    env_keep = "PATH"
root    ALL=(ALL) ALL
%sudo ALL=NOPASSWD: ALL
$ sudo env | grep PATH
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin

Inoltre posso dire che funziona esattamente così anche su Debian stable (lenny).


Risposte:


12

Lottato con lo stesso problema per alcune ore. In debian lenny, puoi risolverlo aggiungendo

Defaults        exempt_group=<your group> 

nel file sudoers.

Questo è l'unico modo per aggirare l'opzione compilata --secure-path, (per quanto ne so).

In particolare, ciò esenterà anche gli utenti dalla necessità di inserire la propria password quando sudo.


3

Se ti sei secure_pathinserito /etc/sudoers, puoi giocare con env_reset/ env_keeptutto ciò che ti piace e non farà alcuna differenza sul percorso. Se vedi qualcosa del genere, commentalo.

Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin

No, ovviamente non è stato impostato.
whitequark,

0

Direi di esaminare le opzioni env_reset e env_keep in man sudo . Ma sembra che tu l'abbia già fatto (hai erroneamente chiamato env_keep "keepenv"). Se disabiliti l'opzione env_reset (il default è abilitato), penso che non dovrebbe cancellare alcuna variabile env. Ma questo è meno sicuro.

C'è anche un'opzione secure_path per sudo; Penso che questo sia abilitato di default. Potresti provare a disabilitarlo.

Le opzioni precedenti sono impostate nel file / etc / sudoers. C'è anche l' -iopzione da riga di comando per sudo. Ciò causerà l'esecuzione di sudo /root/.profile o /root/.login. È possibile impostare il percorso desiderato lì.


1
No, quando env_reset è disattivato cambia ancora (non cancella) PERCORSO. Probabilmente questo viene fatto per aggiungere / * / sbin dirs. No, l'opzione -i non è adatta perché avvia una shell interattiva e ho solo bisogno di eseguire un comando.
whitequark

Va bene, il problema è scomparso dopo aver reinstallato Debian (a causa della migrazione a LVM) e anche RubyGems; la tua risposta è stata la più utile di tutte, quindi ora può essere accettata.
whitequark,

-1

Bene, stai facendo qualcosa di sbagliato. Inoltre, non hai specificato cosa hai fatto con il tuo file / etc / sudoers. Ecco cosa avresti dovuto fare: questo è un sistema CentOS, a proposito:

Innanzitutto, questo è con la giusta impostazione env_keep (nota che PATH è lì):

sudo grep -5 percorso / etc / sudoers Defaults env_keep = "Colori display HOSTNAME HISTSIZE INPUTRC KDEDIR \ LS_COLORS MAIL PS1 PS2 QTDIR nomeutente \ LANG LC_ADDRESS LC_CTYPE LC_COLLATE LC_IDENTIFICATION \ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC \ LC_PAPER LC_TELEPHONE LC_TIME LC_ALL LINGUA LINGUAS \ _XKB_CHARSET XAUTHORITY PATH"

Defaults   timestamp_timeout = 15 

## Next comes the main part: which users can run what software on 
## which machines (the sudoers file can be shared between multiple

-> export PATH=$PATH:hithere
-> sudo sh -c 'echo $PATH'
/sbin:/bin:/usr/sbin:/usr/bin:/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/bin:hithere

Sembra buono. Ora rimuoviamo l'impostazione env_keep e riproviamo:

-> sudo visudo
-> sudo grep -5 PATH /etc/sudoers
                    LS_COLORS MAIL PS1 PS2 QTDIR USERNAME \
                    LANG LC_ADDRESS LC_CTYPE LC_COLLATE LC_IDENTIFICATION \
                    LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC \
                    LC_PAPER LC_TELEPHONE LC_TIME LC_ALL LANGUAGE LINGUAS \
                    _XKB_CHARSET XAUTHORITY"
 #_XKB_CHARSET XAUTHORITY PATH"

Che triste PERCORSO:

 -> sudo sh -c 'echo $PATH'
 /usr/bin:/bin

1
L'ho verificato PIÙ di due volte! Controlla l'aggiornamento per posta.
whitequark

Ho lo stesso problema, ho sicuramente le impostazioni giuste che menzioni
Draemon,
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.