Ordenamiento de la variable de entorno PATH

6

Localmente aquí en Ubuntu 14.04, mi $PATH tiene este aspecto:

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"

Cuando defino manualmente la ruta para los trabajos cron o en la configuración de aprovisionamiento de Puppet / Ansible, generalmente le doy la vuelta a la variable de entorno PATH de esta manera:

PATH="/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin"

¿Existe alguna práctica recomendada de seguridad para ordenar las entradas en la variable de entorno PATH ? Supongo que sería mejor preferir las entradas en un directorio sbin sobre las entradas en un directorio bin . Me he dado cuenta de que en ciertos cuadros RHEL, PATH omite /sbin de forma predeterminada.

Dicho esto, ¿cuál sería una mejor práctica de seguridad para la variable de entorno PATH para:

  1. Cuentas de usuario de Unix.
  2. Administrador de cuentas de Unix.
  3. Cron trabajos / procesos de gestión de configuración.
pregunta Naftuli Kay 15.03.2016 - 21:38
fuente

1 respuesta

6

Si hay un directorio en la ruta de búsqueda donde alguien en quien no confías podría escribir archivos, entonces el directorio no debería estar en la ruta, punto.

El orden solo importa si un comando está presente en más de una entrada en la lista. Por lo tanto, el único caso a considerar es cuando alguien digno de confianza dispuso que una entrada siga a otra, deliberadamente o no.

Si fue deliberado, entonces el orden debería ser buscar en los directorios por orden de administración local: por lo general, esto significa primero ~/bin o equivalente si se ejecuta bajo una cuenta que tiene dicho directorio (no aplicable a la mayoría de las cuentas del sistema) , luego /usr/local/bin , luego los directorios administrados por el administrador de paquetes /usr/bin/ y /bin .

En principio, no debería haber ninguna sombra entre los directorios sbin y bin . Los directorios sbin son para comandos que solo son útiles para un administrador del sistema (es por eso que estos directorios normalmente no están en la ruta de otros usuarios que no sean raíz). En principio, podría haber un nombre de comando para el que desea ejecutar un ejecutable diferente como root, por lo que los directorios sbin deberían estar por delante del directorio bin correspondiente; de lo contrario, …/sbin/foo nunca se ejecutaría ya que estaría sombreado por …/bin/foo para todos.

El único caso en el que existe una ambigüedad es si puede haber habido sombras accidentales. En ese caso no hay una respuesta obvia. En general, no tiene mucho sentido poner /usr/local/bin después de /usr/bin : si no desea que el administrador local elija los comandos, entonces no ponga /usr/local/bin en la ruta de búsqueda (y elimine /usr/local/lib de la ruta de búsqueda de la biblioteca, etc.).

Entre /usr/bin y /bin , en principio, es posible que desee sombrear un ejecutable de /bin (versión pequeña solo para el tiempo de arranque) con uno de /usr/bin (versión grande de un% co_de montado por separado % partición), pero las particiones raíz pequeñas con un /usr separado son una práctica muy poco frecuente en estos días. Era una práctica más común en los días en que los sistemas operativos utilizaban un espacio de disco significativo, pero incluso en ese caso las utilidades en /usr con versiones de /bin eran poco comunes. El otro pedido, poniendo primero /usr/bin , tiene un ligero beneficio en el rendimiento ( /bin suele ser mucho más pequeño). En la mayoría de los sistemas no hay una razón sólida para preferir un pedido sobre el otro. (En algunos sistemas, /bin y /bin son el mismo directorio, pero no debe suponer que a menos que solo trabaje en versiones recientes de una de las distribuciones que hacen esto).

/usr/bin (o PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin ) suele ser la configuración correcta para trabajos que se ejecutan como root, y PATH=/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin para trabajos que no se ejecutan como root. No veo ninguna buena razón para desviarme de eso (excepto por la inversión PATH=/usr/local/bin:/usr/bin:/bin vs. /usr ) excepto para atender las variaciones locales (por ejemplo, un directorio específico del sitio en * BSD distinto de los paquetes instalados a / ). En cuanto a seguridad, no importa, pero en cuanto a funcionalidad, poner a /usr/local por delante de /usr/local y /usr es indiferente o necesario.

    
respondido por el Gilles 15.03.2016 - 23:29
fuente

Lea otras preguntas en las etiquetas