/ Tmp Apache / PHP ile depolanan dosyalar için varsayılan izinleri geçersiz kılmak nasıl?

2 Cevap php

Açıkçası, Linux duyuyorum. PHP betikleri 'www-data' kullanıcı altında çalışan gibi görünüyor. Ben de yüklenen dosyalar "php" ile önüne bir ad, her biri varsayılan / tmp dizininde sonuna kadar görebilirsiniz. Tüm standart sanırım. Tüm bu dosyaların izinleri olan-rw ------- yani 600, kullanıcı 'www-data', grup 'www-data'. Sorun, bir veritabanına kendi içeriğini ekler, çünkü bu dosyaları okuyabilmesi için gereken kullanıcı 'postgres'in' altında çalışan bir PostgresQL veritabanı sunucusu olması. Şu anda tabii ki olamaz. Tabii ki, bir kural olarak, veritabanı sorguları ve fonksiyonları kullanıcı (ben de 'www-data' olarak bağlamak) veritabanına bağlanan kim altında faaliyet, ama burada biz 'postgres'in' olarak çağrılacak VAR sunucu tarafı fonksiyonları bahsediyoruz . Bu iyi ya da kötü, bir PostgresQL kısıtlamadır.

Aklımda güvenliği dikkate yaparım, ama dünya ben de postgres bu dosyaları okumak için izin verirseniz altında gitmek, ya da bu dosyaların izinlerini dinlenmek olmaz düşünüyorum.

Nasıl bu dosyalar ile oluşturulan bu izinleri kontrol edebilirim? Açıkçası PHP onları kendisi oluşturur, örneğin, POST dosya upload, ama ben herhangi bir yapılandırma anahtarları bulamıyorum. Ayrıca, benim / tmp İzinleri 'drwxrwxrwt' (777) sahiptir ve, grup 'root' kullanıcı 'root' aittir.

Ben 'php_value upload_tmp_dir' ile yükleme dizinini değiştirmeye çalıştı ama hiçbir etkisi yoktur, öyle görünüyor - PHP hala / tmp geçici dosyaları depolar.

I do NOT want to use with 'move_uploaded_file' or 'chmod', since they write to the filesystem, and I want to avoid that, other than the database server inserting record(s).

2 Cevap

Siz / etc/apache2/envvars Apache için umask'ı ayarlarını değiştirmeyi deneyebilirsiniz

Ben denemedim, ama benim Envvars dosyasına eklenen, bu gibi görünecektir:

# envvars - default environment variables for apache2ctl

# Since there is no sane way to get the parsed apache2 config in scripts, some
# settings are defined via environment variables and then used in apache2ctl,
# /etc/init.d/apache2, /etc/logrotate.d/apache2, etc.
export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data
export APACHE_PID_FILE=/var/run/apache2.pid

## The locale used by some modules like mod_dav
export LANG=C
## Uncomment the following line to use the system default locale instead:
#. /etc/default/locale

export LANG

umask 022

Bildiğim kadarıyla, bu Apache izni 644 ile dosyaları oluşturmak yapacak rw-r -. R -