Come configurare i sudoer per mantenere sempre variabile di attivazione LD_LIBRARY_PATH?


3

Indipendentemente da ciò che provo, sembra che la variabile di ambiente LD_LIBRARY_PATH non venga mantenuta dopo aver eseguito un comando con sudo. L'unico modo in cui sono riuscito a farlo aderire è aggiungere il prefisso al mio sudocomando LD_LIBRARY_PATH=/the/pathogni volta che lo chiamo dalla riga di comando, ma vorrei non doverlo fare ogni volta.

Sembra che l'opzione env_keep ignori questa variabile, così come l'opzione hext_group.

Il mio gruppo% attualmente ha ALL=(ALL) NOPASSWD:ALLaccesso come sudoer. Vorrei che questa specifica variabile d'ambiente fosse mantenuta per ogni comando che eseguo.

Come posso fare questo?

Il mio server esegue Red Hat Enterprise Linux 5.7.


2
Sai che consentire questo tramite sudo consente l'esecuzione del codice arbitrario come root, giusto?
pjc50,

Sì, lo so, ma è un requisito nel mio caso. Siamo ben consapevoli delle implicazioni. Se è l'opzione NOPASSWD che ti infastidisce, è solo un esempio. L'ho impostato su un server VM locale per testarlo e mi sono stancato di digitare la mia password ...
Yanick Girouard

Risposte:


13

Potresti aspettarti di poterlo fare usando

Defaults env_keep += "LD_LIBRARY_PATH FRED" 

ma un test rapido su CentOS 6.2con Sudo version 1.7.4p5non passa LD_LIBRARY_PATHma passa FRED. La pagina man sudoers ha questo da dire

Si noti che il linker dinamico sulla maggior parte dei sistemi operativi rimuoverà le variabili
può controllare il collegamento dinamico dall'ambiente degli eseguibili setuid, incluso
sudo. A seconda del sistema operativo, questo può includere _RLD, DYLD_, LD_,
LDR_, LIBPATH, SHLIB_PATH e altri. Questo tipo di variabili viene rimosso da
l'ambiente prima che sudo inizi anche l'esecuzione e, come tale, non lo è 
possibile che sudo li preservi

Quindi sembra che il sistema rimuova LD_LIBRARY_PATHl'ambiente dall'ambiente prima che sudo lo veda.


Questo è davvero il comportamento che sto vedendo. La domanda è: c'è un modo per aggirare questo senza reinventare la ruota?
Yanick Girouard,

2
Non è davvero un problema di sudo in quanto non riesce mai a vedere LD_LIBRARY_PATH. Vorrei racchiudere i comandi che voglio eseguire in uno script e impostare la variabile di ambiente all'interno del secondo.
user619714

Quindi deve funzionare diversamente su Solaris, perché abbiamo un altro server in cui questo comportamento non si verifica. Lo sta facendo solo su Red Hat. Grazie per la spiegazione però!
Yanick Girouard,

4

Per farlo funzionare ho dovuto fare questo:

  1. Aggiungi Defaults env_keep += "LD_LIBRARY_PATH"ai sudoers
  2. Aggiungi questo alias nel mio file .bashrc: alias sudo='sudo LD_LIBRARY_PATH=/mypath'

Ora qualsiasi comando che chiamo con sudo avrà la configurazione variabile.


1
Per me (non so perché) è stato sufficiente eseguire il passaggio 2, ad esempio sudo LD_LIBRARY_PATH = / mypath <cmd>
jfritz42

0

Questo sta accadendo non solo per LD_LIBRARY_PATH ma anche per alcune altre variabili d'ambiente che potrebbero essere temperate con l'ambiente di compilazione. Nel mio caso, sudo è diventato:

sudo -HE env PATH=${PATH} LD_LIBRARY_PATH=${LD_LIBRARY_PATH} PYTHONPATH=${PYTHONPATH} my_command

cosa per -HEqui?
Kyb,

-1

Sembra che tu non l'abbia export LD_LIBRARY_PATHancora fatto . In questo modo renderai la variabile ambientale disponibile a tutto e risolverai questo problema.

In alternativa, se si desidera una variabile ambientale persistente sicura, considerare di aggiungerla al file bashrc( ~/.bashrc), quindi aprire una nuova sessione terminale.


La variabile viene esportata bene nell'ambiente del mio utente. Si perde dopo aver eseguito qualsiasi cosa tramite sudo.
Yanick Girouard,
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.