web-dev-qa-db-fra.com

Le script PHP ne peut pas accéder au dossier / TMP

Je n'ai pas d'Open_Basedir, PHP peut accéder à/etc/usr/proc/home, etc. mais pas/TMP.

tMPFS est le montage sur/TMP (/ TMP Type TMPFS (RW)), c'est aussi la raison pour laquelle je veux utiliser le dossier/TMP.

Mes fichiers appartiennent à HTTP (utilisateur pour Nginx et PHP) et lisible par tout le monde.

Sudo -u http cat /tmp/file fonctionne mais quoi que ce soit à l'intérieur d'un script PHP ne fonctionne pas (comme File_Exist () ou Fichier ()).

eDIT: L'erreur Afficher le journal:

PHP Warning:  file(/tmp/ydlw/pid): failed to open stream: No such file or directory in /srv/http/ydlw/status.php on line 267

edit2: J'ai testé le problème dans l'autre sens. J'ai fait

touch("/tmp/boo");
file_exist("/tmp/boo");

et File_Exist retourner vrai pour que le fichier soit créé. Ensuite, j'ai regardé à l'intérieur/TMP et aucun fichier "boo" ne peut être trouvé là-bas. C'est ce que j'avais peur, PHP ne "voir" le point de montage. Pourquoi est-ce que cela et comment puis-je résoudre ce problème?

18
eephyne

J'ai découvert pourquoi, bien, quelqu'un m'a donné le conseil global.

Ce n'est ni la faute de php ou de TMPFS. Le coupable était SystemD et son système de sécurité PrivateTmp.

Pour ceux qui entrent dans le même problème que je faisais, le service PHP (et probablement d'autres) ont l'option PrivateTmp option à true dans le script SystemD (/usr/lib/systemd/system).

Dans ce cas, un nouveau /tmp est créé et isolé de l'autre. Toutes les données enregistrées à l'intérieur sont supprimées une fois que le service est arrêté.

C'est une mesure de sécurité depuis /tmp Peut contenir beaucoup d'informations sensibles et de script PHP ne sont pas toujours sécurisés.

Pour désactiver cela, copiez simplement le script à l'intérieur /etc/systemd/system (Pour éviter toute écrasement de vos modifications après une mise à jour) et définir PrivateTmp sur false.

Vous pouvez également définir deux services ou plus pour partager le même/TMP à l'aide de JoinsNamespaceOf.

Pour plus d'informations> man systemd.exec

32
eephyne