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 sudoersencontré que deberías usarEn Ubuntu,
sudoconserva algunas variables.sudo -ies más como iniciar sesión como root y luego ejecutar el comando. Ambos pueden ser inconvenientes, el primerosudo nano myfiledeja archivos propiedad de root dentro de su hogar y el segundosudo -i nano myfileintentará abrir / root / myfile.correr
y mira lo que da. Aquí da
por ejemplo. Ahora corre
sudo visudoy 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/usernameno 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. Eludirsudolas medidas de seguridad puede hacer que su Solaris sea tan seguro como Windows XP.fuente
sudoescritores 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
sudoersdebe 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
PYTHONPATHejemplo 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_resetve bien, asumiendo que no estás llamando a sudo con la-Eopció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/sudoerso/usr/local/etc/sudoersdependiendo 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 pythonysudo supreservaría su entorno.Que
env | grep PYTHONPATHdice Si no hay nada, asegúrese de exportar PYTHONPATH ejecutandoexport PYTHONPATHe intente nuevamente.Que
sudo env | grep PYTHONPATHdice 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
editoropasspromptpara 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.soarchivo de configuración/etc/ld.so.conf.d/con la ruta de suLD_LIBRARY_PATHActualice el caché con:
fuente