Kullanıcıya apache izni vermek


2

Kullanıcıların resim yüklemelerini ve daha sonra tekrar indirmeleri için dönüştürmelerini sağlayan bir web uygulaması geliştirdim. Açıkçası, kullanıcıların yükleyebileceği dizine apache kullanıcı izinleri vermek zorunda kaldım:

$ chown root:www-data uploadFolder
$ chmod 1775 uploadFolder

Bu, apache grubuna kaldırma dışında tüm izinleri verir.

Uygulama içindeki her kullanıcı oturumu için bir dizin oluşturur uploadFolderile dizindeki 0700izinleri ve içeride kullanıcının görüntüleri kaydeder.

uploadFolderUygulama dizininde içindedir.

Resim yüklendiğinde, müşteriye doğrudan (bir bağlantı gibi) sunulur.

Bir crontab işi, her 20 dakikada bir komut dosyası yürütüyor, hangi oturumların etkin olduğunu kontrol ediyor ve içindeki uploadFolderherhangi bir etkin oturumla uyuşmayan tüm dosya ve klasörleri kaldırıyor .

İki aydan beri iyi çalışıyor, ancak aynı VPS'deki uygulamam, veritabanı veya diğer siteler için tehlikeli olup olmadığından emin değilim.

Bu durumda izin verilme riskini bilen var mı?

Bunu önlemek için herhangi bir alternatif var mı?

Bu benim apache site yapılandırmam:

<VirtualHost *:80>
ServerName www.itransformer.es
ServerAlias itransformer.es *.itransformer.es
DocumentRoot /siteFolder
<Directory /var/www/itransformer-2.0/web>
   AllowOverride all
   Options -Indexes
</Directory>
</VirtualHost>

Bu pasaj kodunu Apache site yapılandırmasına eklendi: (bu, .htaccessdosyaları okumaktan kaçınmalıdır )

<Directory /uploadFolder>
   AllowOverride none
   Options -Indexes
</Directory>

Sunucu farklı uygulamalar / kullanıcılar arasında paylaşılıyorsa, web sunucusunun çalıştırabileceği komut dosyalarını yükleyebilen herkes bu dizinler üzerinde tam denetime sahip olabilir ve istediklerini ne yapabilirse yapabilir. PHP'yi belirli bir kullanıcı olarak çalıştırmaya zorlamak için suphp ve benzeri şeyleri inceleyebilirsiniz.
Doon

Teorik olarak, kullanıcılar doğrulama nedeniyle 3 MB dosya boyutundaki resimleri belirli bir dizine yükleyebilir. Herhangi biri başka bir şeyi nasıl yükleyebilir?
Manolo

Sunucu paylaşılıyorsa ve başkaları kod yükleyebiliyorsa, vb. Sunucudaki tüm uygulamalar www-data kullanıyor, yani web sunucusu olarak çalışan kontrol etmediğiniz başka uygulamalar varsa, dikkatli olmanız gerekir. Eğer sunucu üzerinde her şey üzerinde kontrolü olup olmadığını o paylaşılmayan IE ancak (/ Hiç sunucu (Not uygulaması) kullanıcıya güveniyorum, o zaman risk en aza indirilir.
Doon

Chmod 1775'in dosya kaldırmayı nasıl reddettiğini anlamıyorum.
Yazabiliyorsanız

Hayır, yapışkan bit yüzünden yapamazsın.
Manolo

Yanıtlar:


1

Öncelikle güvenliğin bir süreç olduğunu anlamalısınız ve gelişiminizin her aşamasında ve her aşamasında akılda tutmanız gerekir. OWASP Top 10 uygulama güvenlik kusurlarını okuyun ve anlayın ve kodunuzu hem genel olarak (tüm uygulamanızın) hem de yerel olarak (uygulamanızın ayrı bölümleri) aklınızda bulundurun. Elbette başka güvenlik kusurları da var, bu yüzden kendiniz hakkında belgelendirmelisiniz.

Herhangi bir kod olmadan ve burada yaptığınız gibi yalnızca çok genel ve kesin bir açıklama ile bu konuda iyi bir tavsiye vermek mümkün değildir. Sizin durumunuzda, özellikle dizin geçişi , XSS vb. Şeyleri izleyeceğim , ancak uygulamanızın her yerinden gelebilecek riskleri unutmayın.

Uygulamada muhtemelen apache'yi bir chroot hapishanesinde çalıştırmak istiyorsunuz ve ayrıca kullanıcılar tarafından sağlanan ad yerine bazı rasgele oluşturulmuş adlara sahip klasörleri de yükleyeceğim (bu soruyu yaptığınız güncellemelerde görülüyor. ). Sonuç olarak, unutmayın ki, sömürmeniz daha zor olabilir, ancak onları tamamen engellemeyebilirsiniz.


Asla bir chroot hapishanesi kurmadım. Referansı yeni gördüm: en.wikipedia.org/wiki/Chroot . Bunun nasıl yapılacağına dair iyi bir referans gönderebilir misiniz?
Manolo

Bir bağlantı eklediniz, ek bağımlılıklarınız olmadığı sürece mod_security ile oldukça kolay (dönüşüm sürecinizde böyle olabilir).
Calimo

Görüntüleri göstermeye çalışırken bir sorunum var. Sunucu, dışındaki klasöre erişemiyor Document Root. Bunu nasıl yapmalıyım?
Manolo

Klasördeki izinleri kontrol etmeniz gerekir. Komut dosyası (genellikle sunucuyla aynı kullanıcıyla çalışıyor, tipik olarak www-dataveya apache), buna yazma erişimine sahip olmalıdır.
Calimo

Sunucu dizini dışındaki bir klasöre erişmeye çalışırken hatalıyım galiba. Belge kökünün dışında ancak sunucu dizininin içinde olmalıdır. Öyle değil mi?
Manolo
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.