Usando sudo 1.7.4p4 en Solaris 5.10 y sudo 1.6.7p5 en RHEL4 u6 No puedo ver cómo preservar mis variables de entorno, por ejemplo $ PYTHONPATH. He agregado esta línea a los sudoers, pero no hace ninguna diferencia:
Defaults !env_reset
¿Estoy haciendo algo mal, o la instalación de sudo simplemente no respeta la bandera env_reset?
Editar: ¡Al menos en Solaris, hemos descubierto que este problema depende del shell! El shell raíz estándar es Bourne, si ejecutamos bash bajo sudo ( sudo bash
) por otro lado,! Env_preset preservará el entorno (incluyendo PATH y LD_LIBRARY_PATH). Este es un comportamiento bastante confuso, debo decir.
Respuestas:
Use con cuidado, hay problemas de seguridad con sudo y variables.
De
man sudoers
encontré que deberías usarEn Ubuntu,
sudo
conserva algunas variables.sudo -i
es más como iniciar sesión como root y luego ejecutar el comando. Ambos pueden ser inconvenientes, el primerosudo nano myfile
deja archivos propiedad de root dentro de su hogar y el segundosudo -i nano myfile
intentará abrir / root / myfile.correr
y mira lo que da. Aquí da
por ejemplo. Ahora corre
sudo visudo
y agrega la líneareemplazando por lo que encontraste justo antes. Agregue una nueva ruta si es necesario.
Sobre bibliotecas:
Las distribuciones de Linux tienen mucho cuidado
PATH
, y realmente debes tener cuidado antes de jugar con ellas. Tenga especial cuidado al agregar rutas como ".
" o/home/username
no es seguro.Uno de los peligros de agregar rutas es que abre la posibilidad de que se ejecuten archivos en estas rutas
root
, abriendo una ventana en la seguridad del sistema que puede ser explotada por software malicioso. Puede haber otros peligros. Solo asegúrate de saber lo que estás haciendo. Eludirsudo
las medidas de seguridad puede hacer que su Solaris sea tan seguro como Windows XP.fuente
sudo
escritores fueron cuidadosos al evitar que lo hicieras. No desea que se cargue una biblioteca maliciosa porque se encontraron en la ruta utilizada por sudo. Entonces, es por eso que se reinicia. Si está codificando cosas que deben ser ejecutadas por root, cópielas en el directorio del sistema apropiado.Juguetear con
sudoers
debe hacerse con precaución, como han dicho otros.Un enfoque más simple para casos más simples cuando hay variables de entorno particulares que desea preservar es simplemente pasar la variable de entorno que desea directamente a través de sudo (esto se muestra
[VAR=value]
en la ayuda de cmdo de sudo).Vea este pequeño ejemplo donde también lo he demostrado para más de una variable.
Para el
PYTHONPATH
ejemplo original en la pregunta, solo use lo siguiente:Crear un alias para este tipo de cosas es útil. Al igual que:
fuente
Se
Defaults !env_reset
ve bien, asumiendo que no estás llamando a sudo con la-E
opción.Podría intentar eliminar esa entrada por completo.
¿Has verificado que estás editando el archivo sudoers correcto? Supongo que podría ser
/etc/sudoers
o/usr/local/etc/sudoers
dependiendo de cómo se instaló. ¿Lo editaste usandovisudo
?¿Cómo estás ejecutando sudo?
sudo python
,sudo su
,sudo su -
,sudo -s
, Alguna otra cosa? Solosudo python
ysudo su
preservaría su entorno.Que
env | grep PYTHONPATH
dice Si no hay nada, asegúrese de exportar PYTHONPATH ejecutandoexport PYTHONPATH
e intente nuevamente.Que
sudo env | grep PYTHONPATH
dice Si imprime el valor esperado, entonces algo más está sobrescribiendo su valor de PYTHONPATH. Tal vez .bashrc o .bash_profile de la raíz o los archivos de configuración de todo el sistema.fuente
editor
opassprompt
para ver si tiene el archivo correcto. O use strace, dtrace, truss o similar y vea qué archivos abre.De acuerdo con la documentación de Ubuntu para LD_LIBRARY_PATH :
Entonces:
Agregue un
ld.so
archivo de configuración/etc/ld.so.conf.d/
con la ruta de suLD_LIBRARY_PATH
Actualice el caché con:
fuente