Php tiene su propio/tmp en/tmp/systemd-private-nABCDE/tmp cuando se accede a través de nginx
centos7 (2)
Porque systemd está configurado para dar a nginx un private / tmp . Si debe usar el sistema / tmp en su lugar por alguna razón, deberá modificar el archivo de servicio para que lea "PrivateTmp = no".
Encontré un comportamiento extraño con respecto a las carpetas php
y /tmp
. Php usa otra carpeta cuando trabaja con /tmp
. Php 5.6.7, nginx, php-fpm.
Ejecuto el mismo script de dos maneras: a través del navegador y del shell. Pero cuando se inicia a través del navegador, el archivo no está en la carpeta real /tmp
:
<?php
$name = date("His");
echo "File /tmp/$name.txt/n";
shell_exec(''echo "123" > /tmp/''.$name.''.txt'');
var_dump(file_exists(''/tmp/''.$name.''.txt''));
var_dump(shell_exec(''cat /etc/*release | tail -n 1''));
php -f script.php
File /tmp/185617.txt
bool(true)
string(38) "CentOS Linux release 7.0.1406 (Core)
¿Dónde está el archivo? En / tmp
$ find / -name 185617.txt
/tmp/185617.txt
Si accedo a través de http://myserver.ru/script.php
obtengo
File /tmp/185212.txt
bool(true)
string(38) "CentOS Linux release 7.0.1406 (Core)
Pero ¿dónde está el archivo?
$ find / -name 185212.txt
/tmp/systemd-private-nABCDE/tmp/185212.txt
¿Por qué php piensa que /tmp
debería estar en /tmp/systemd-private-nABCDE/tmp
?
Si está ejecutando varios sitios en el servidor, creo que querrá dejar PrivateTmp = yes para que cada sitio permanezca segregado incluso en el uso de archivos temporales. Podría ser un problema de seguridad de lo contrario, me imagino.