php betiği / tmp klasörüne erişemiyor


16

Ben hiçbir open_basedir var, php erişebilirsiniz / etc / usr / proc / home etc… ama / tmp değil.

tmpfs / tmp üzerine bağlanır (/ tmp tipi tmpfs (rw)) / tmp klasörünü de kullanmak istiyorum.

Dosyalarımın sahibi http (nginx ve php kullanıcısı) ve herkes tarafından okunabilir.

sudo -u http cat /tmp/file çalışıyor ancak php betiğinin içindeki hiçbir şey çalışmıyor (file_exist () veya file () gibi).

edit: günlük hata gösterisi:

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: Sorunu başka şekilde test ettim. ben yaptım

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

ve file_exist, dosya oluşturulması için true değerini döndürür. Sonra / tmp içinde izledim ve orada hiçbir "boo" dosyası bulunamadı. Korktuğum şey bu, php montaj noktasını «görmüyorum». Neden bu ve bunu nasıl düzeltebilirim?


Bu PHP işlevleri tarafından döndürülen hata nedir? PHP hata günlüğü neyi gösterir?
Tero Kilkanen

Hata günlüğünü ekledim
Eephyne

Bu dosya içinde /tmp/ydlw/pidmevcut /tmpmu? Değilse, hata mesajının nedeni budur.
Tero Kilkanen

-rw-r - r-- 1 http http 343 23 çocuk. 10:12 / tmp / ydlw / pid
eephyne

Linux dağıtımınız ve PHP sürümünüz nedir ve PHP'yi nereden aldınız?
Michael Hampton

Yanıtlar:


31

Neden birisinin bana küresel ipucu verdiğini öğrendim.

Php veya tmpfs hatası değildir. Suçlu sistemd ve güvenlik sistemiydi PrivateTmp.

Yaptığım aynı sorunu olanlar için, hizmet php (ve muhtemelen bazı diğerleri) systemd komut dosyası ( ) PrivateTmpseçeneği var .true/usr/lib/systemd/system

Bu durumda, yeni /tmpbir tane oluşturulur ve diğerinden izole edilir. Hizmet durdurulduktan sonra içerideki tüm veriler kaydedilir.

Bu bir güvenlik önlemi çünkü /tmpçok hassas bilgiler ve php komut dosyası her zaman güvenli değildir.

Bu devre dışı bırakmak için, basitçe komut içini kopyalayıp /etc/systemd/systemve seti (bir güncellemeden sonra da değişikliklerin üzerine yazarak kaçınmak için) PrivateTmpiçin false.

Aynı / tmp'yi kullanarak paylaşmak için iki veya daha fazla hizmet de ayarlayabilirsiniz JoinsNamespaceOf.

Daha fazla bilgi için> man systemd.exec


4
Bunun için teşekkür ederim! Bütün günü anlamaya çalışarak geçirdim. Bunu anlamak için çok uğraştığım için beynim burnumu eritiyor.
Marcelo
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.