¿Es seguro agregarlo? a mi camino? ¿Cómo?

49

He visto a personas mencionar en otras respuestas que es una mala idea incluir el directorio de trabajo actual (' .') en su $PATHvariable de entorno, pero no he podido encontrar una pregunta que aborde específicamente el problema.

Entonces, ¿por qué no debo agregar .a mi camino? Y si a pesar de todas las advertencias lo hago de todos modos, ¿qué debo tener en cuenta? ¿Es más seguro agregarlo al final que al principio?

Jander
fuente

Respuestas:

39

Si usted es el único usuario en la máquina, está bien, siempre que sepa lo que está haciendo. La preocupación general es que al tener su directorio actual PATH, no puede ver los comandos como una lista constante. Si necesita ejecutar un script / programa desde su directorio actual, siempre puede ejecutarlo explícitamente anteponiendo ./su nombre (diciéndole al sistema "Quiero ejecutar este archivo desde mi directorio actual").

Digamos, ahora tienes todos estos pequeños scripts en todo tu sistema de archivos; un día correrás el equivocado seguro. Entonces, tener PATHuna lista predefinida de rutas estáticas se trata de ordenar y salvarse de un problema potencial.

Sin embargo, si va a agregar .a su PATH, sugiero agregarlo al final de la lista ( export PATH=$PATH:.). Al menos no anulará los binarios de todo el sistema de esta manera.

Si usted es una raíz en el sistema y tienen sistema expuesto a cuentas de otros usuarios, teniendo .en PATHes un gran riesgo para la seguridad: puede cdque el directorio de algún usuario, y sin querer ejecutar un script malicioso no sólo porque ha escrito mal una cosa o script que tiene el mismo nombre que un binario de todo el sistema.

artyom
fuente
1
+ Acepte la teoría subyacente y mencione que los problemas aún pueden existir incluso cuando usted es el único usuario en el sistema. Ambas respuestas traen excelentes puntos. Agregaré que cada vez que comparte directorios con otro usuario, existe un mayor riesgo, ya sea que sea root o no.
Jander
66
incluso como el único usuario en la máquina: cada vez que extrae un alquitrán no confiable, puede colocar uno lsen su directorio actual. a continuación, ejecuta lspara inspeccionar los archivos extraídos y ya ha ejecutado el código malicioso.
lesmana
35

El riesgo es que alguien ponga un ejecutable malicioso en el directorio que sea el actual.

El peor de los casos ocurre cuando:

  • está registrado como root ya que el comando malicioso tiene un poder de daño ilimitado
  • .está al comienzo de su RUTA, ya que los comandos estándar pueden anularse sin que usted lo note (generalmente, uno lsque podría ocultarse de la lista).

El riesgo es mucho menor si está registrado como usuario habitual y tiene .el final de su RUTA, pero aún existe:

  • alguien puede descubrir que con frecuencia escribe mal un comando e instala uno coincidente
  • alguien puede instalar un comando falso con el nombre de uno que no está instalado.

Tenga en cuenta que, en cualquier caso, el riesgo sigue existiendo incluso si usted es el único usuario de la máquina. Se instalaría software malicioso si, por ejemplo, extrae un archivo descargado de un sitio comprometido.

jlliagre
fuente
15
Instale slpara ver con qué frecuencia sucede el punto 3.
jordanm
o alias l=`ls`.
Anko
No tiene que ser malicioso. Espero lsobtener una lista de directorio, pero algunos proyectos que descargo pueden tener un lsscript en su carpeta de proyecto raíz como acceso directo a otra cosa. lses probablemente un mal ejemplo, pero ciertamente puedo imaginarlo epara editar, ddepurar, mhacer, bconstruir. Tengo algunos de ellos a nivel mundial. Si escribo m, espero que se ejecute make (mi acceso directo), no se llama ma algún script local para ejecutar.
Gman
@man Derecha. Un comando no malicioso podría, sin saberlo, tener efectos adversos. Tenga en cuenta que los comandos / alias de una sola letra estaban mal vistos desde el inicio de Unix debido al alto riesgo de escribir mal. Los estándares raros son wy [.
jlliagre
3

Incluso si siempre tienes mucho cuidado con lo que escribes, ponerlo .en tu PATH, incluso al final, sigue siendo inseguro porque algunos programas cambian el directorio actual a /tmp(que se puede escribir en todo el mundo) y también pueden intentar ejecutar utilidades que en realidad no están instaladas, por lo tanto, por defecto a lo que está adentro /tmp. Si esto ocurre, este es un vector de ataque.

Tenga en cuenta también que no hay mucho inconveniente de evitar .en PATH, porque ./es fácil de tipo (en particular, en los teclados QWERTY como, en donde estos personajes son en claves consecutivos y no es necesario Shift) y utilizando ./también ayuda finalización, por lo tanto, las pulsaciones de teclado que puede salvar al final.

Si realmente desea poder escribir comandos desde el directorio actual, los shells modernos (como zsh, con sus command_not_found_handler) pueden proporcionar funciones para hacerlo de forma segura, es decir, que le permiten agregar todas las comprobaciones de seguridad que desee en el controlador, antes de Se ejecuta el comando.

vinc17
fuente