¿Es seguro cambiar TMPDIR?

Recientemente instalé Open MPI y se queja

PMIx has detected a temporary directory name that results
in a path that is too long for the Unix domain socket:
Temp dir: /var/folders/**/*****************************/T/openmpi-sessions-501@host*******************************/*****

Esta pregunta sugiere establecer TMPDIRen /tmp. ¿Es eso seguro? ¿Estropeará otros programas?

Respuestas (1)

Puede haber fallas de seguridad que resulten del uso descuidado de/tmp ; los usuarios locales maliciosos pueden eliminar archivos arbitrarios o posiblemente incluso ejecutar código arbitrario en su cuenta de usuario, dependiendo de qué tan grave /tmpsea la falla. Una solución que permanece dentro del char sun_path[104] límite de los sockets de dominio de Unix (consulte /usr/include/sys/un.hla definición) es crear un directorio temporal y usarlo para MPI:

$ mktemp -d /tmp/mpi-XXXXXXXX
/tmp/mpi-zUN9SQo6

lo que deja 86 caracteres para que use el archivo de socket (104 menos uno para el final NULmenos 17).

Dependiendo de dónde y cuándo configure, TMPDIRotros programas podrían estropearse fácilmente, en particular, tmuxo screenque luego no puedan ubicar su zócalo de control. Si es posible, alcance la TMPDIRconfiguración personalizada lo más cerca posible de las llamadas MPI, por ejemplo, con una función de shell o alias a lo largo de las líneas de

alias mpi4py='TMPDIR=$(mktemp -d /tmp/mpi-XXXXXXXX) mpi4py'

Esto crearía un directorio temporal único para cada invocación; los directorios en /tmpse podan automáticamente. Si se necesita un directorio compartido o más persistente, /var/tmpsuele ser más adecuado

$ mkdir /var/tmp/mympi

y asegúrese de confirmar que el directorio no existía en caso de que un atacante local demasiado inteligente ya haya creado ese directorio (poco probable, pero esta es la razón por la que mktemp -dse creó). Luego, en su perfil de shell, el alias podría verse así

alias mpi4py='TMPDIR=/var/tmp/mympi mpi4py'

Esta forma es nuevamente más adecuada si es necesario un estado compartido entre diferentes invocaciones de comandos MPI.

@patrix que proliferará directorios tmp aleatorios para cada invocación; todo lo que es realmente necesario es un único directorio único a salvo de las vulnerabilidades /tmp.
/private/tmpse poda regularmente. Si solo quiero una ubicación tmp fija para una aplicación específica, probablemente solo crearía /tmp/APPNAME_tempy usaría esto.
Siéntase libre de revertir la edición si es necesario.
Solo por el bien de la generalización: el método es crear un nuevo tempdir temporal, usarlo para mpi, y luego, cuando mpi termina, TMPDIR¿vuelve al valor anterior? Entonces, si quiero usar, mpi4pypuedo cambiar TMPDIR, hacer lo que sea, y luego simplemente cerrar esa terminal.
¿Y su comando al final debería ser alias yourmpicommand='TMPDIR=$(mktemp -d /tmp/mpi-XXXXXXXX) yourmpicommand'como el anterior? ¿O es algo diferente?
Establecería un apropiado aliasen su configuración de shell; no sería necesario cerrar la terminal ya que el entorno personalizado solo se aplicaría al comando con el alias. Aprender los conceptos básicos de, por ejemplo, bashpuede ser beneficioso si todo esto parece misterioso.
Pero si utilizo un alias mpiexec, por ejemplo, se TMPDIRestablecerá uno nuevo cada vez que ejecute mpiexec. Eso no parece ser lo que quiero hacer. (¿O es eso?)
Mostré cómo usar un único directorio tmp único o cómo crear uno nuevo en cada ejecución. No estoy lo suficientemente familiarizado con MPI para saber cuál es más adecuado.