¿Cómo se determina que el directory público de temp en OS X sea accesible por escritura por el server de www?

Tengo MAMP ejecutando el server httpd como _www y me gustaría asignar el directory temporal como parte del script de shell (bash).

Intenté usar $TMPDIR según estas publicaciones:

  • Cómo copyr y pegar líneas en Nano en OSX
  • ¿Cuál debería ser el contenido estándar de $ DYLD_LIBRARY_PATH?
  • Instalar shuf en OS X?
  • ¿Qué alternativas a OpenSSL tengo que calcular un hash SHA-256?
  • ¿Es posible acceder y modificar el llavero de iCloud desde la command-line (o la automation)?
  • ¿Cómo investigar la fragmentación de un file?
    • ¿Cómo encuentro el directory 'temp' en Linux?
    • ¿Dónde está la carpeta Temp en OS X?

    sin embargo, apunta a /var/folders/vp/tlt7xf791gl1_v56m0xdmrph0000gn/T/ y esta carpeta no tiene los permissions necesarios, por lo que el server Apache no puede crear ningún file allí.

    Basado en esto:

     $ /usr/bin/stat -F $TMPDIR /tmp /private/tmp drwx------ 104 kenorb staff 3536 Oct 14 22:21:05 2015 /var/folders/vp/tlt7xf791gl1_v56m0xdmrph0000gn/T// lrwxr-xr-x 1 root wheel 11 Apr 9 13:08:03 2014 /tmp@ -> private/tmp drwxrwxrwt 112 root wheel 3808 Oct 14 22:12:04 2015 /private/tmp/ 

    Mi usuario de www que me importa:

     $ id _www uid=70(_www) gid=70(_www) groups=70(_www),12(everyone),61(localaccounts),401(com.apple.sharepoint.group.1),100(_lpoperator) 

    No puedo usar /tmp porque está vinculado a mi /private/tmp (cuyo nombre indica que es privado).

    Por lo tanto, ¿cómo puedo determinar mi directory temporal correcto en OS X, así que mi server httpd y yo podemos usarlo?

    No quiero codificar el valor, ya que la secuencia de commands sería inútil cuando se utiliza en diferentes entornos (por ejemplo, en un entorno que no es MAMP), por lo que la location puede variar.

  • Ambos: Repetición de tecla y Mantener presionado
  • ¿Cómo eliminar el inicio de MacMini?
  • ¿Se elimina el contorno del button azul en las windows de dialog en Yosemite cuando se usa la tecla Tab (navigation con el keyboard)?
  • ¿Cómo puedo transmitir audio a múltiples computadoras al mismo time?
  • Actualización de El Capitan 10.11.1 atascada en la installation de la actualización en la tienda de aplicaciones
  • Vista previa de macOS tiene falla gráfica al copyr utilizando selección rectangular
  • 2 Solutions collect form web for “¿Cómo se determina que el directory público de temp en OS X sea accesible por escritura por el server de www?”

    Escribiría en /tmp (que es equivalente a escribir en /private/tmp ) ya que todos los usuarios pueden escribirlo y no solo los usuarios administrativos. Está ahí para compatibilidad y puntos de bonificación, su secuencia de commands puede limpiar files o cortarlos si crecen demasiado.

    No tengo una reference autorizada de por qué / private se llamó así, pero siempre ha estado abierto para escribir y no está restringido, como $ TMPDIR es de usuarios que no son administradores.

    La verdadera pregunta es, ¿qué usuario está ejecutando apache : un miembro del grupo ADMIN o simplemente un usuario normal no administrador?

    Apple documenta esto en la Guía de encoding segura con la advertencia de que escribir files en ubicaciones de lectura pública es intrínsecamente inseguro y que es mejor colocar los files en ubicaciones más protegidas que no son leíbles por todos los usuarios. Consulte la sección Condiciones de carrera y Operaciones seguras de files y este enlace para crear files temporales seguros . Al usar la llamada POSIX de mkstemp, se asegura de que se cree un file único y puede controlar el acceso con umask.

    Curiosamente (para mí), mktemp cuando lo ejecuta un usuario que no es administrador todavía puede crear un file temporal en $ TMPDIR, por lo que está utilizando claramente privilegios escalados para transferir ese file más "seguro" a usuarios que no son administradores. Muy genial.

    En cuanto a la solución, hasta ahora he encontrado que el command php puede determinar el directory temporal correcto desde la perspectiva www (suponiendo que la CLI de PHP tenga la misma configuration que el server):

     $ php -r "echo ini_get('upload_tmp_dir');" /Applications/MAMP/tmp/php 

    También es posible utilizar mktemp para verificar dónde se crean los files temporales para un usuario específico (como $TMPDIR fallaría), por ejemplo:

     $ sudo -uwww bash -c 'dirname $(mktemp)' /tmp 

    Entonces, en resumen, esto podría extenderse a algo como:

     #!/usr/bin/env bash WWW_USER="$(ps axo user,group,comm | egrep "(apache|httpd)" | grep -v ^root | uniq | cut -d\ -f 1)" PHP="$(which php)" if [ -n "$PHP" ]; then TMP="$(php -r "echo ini_get('upload_tmp_dir');")" elif [ -n "$WWW_USER" ]; then TMP="$(sudo -uwww bash -c 'dirname $(mktemp)')" elif [ -n "$TMPDIR" ]; then TMP="$TMPDIR" else TMP="/tmp" fi 
    Loving Apple Products like poisoning (iPhone, iPad, iMac, Macbook, iWatch).