Apache ve PHP hangi kullanıcı olarak çalışıyor olmalıdır? / Var / www dosyalarında hangi izinler bulunmalıdır?


41

Sadece bir Ubuntu 11.10 kutusu açtım ve daha sonra apt-get install apache2 php5apache2 ve PHP 5'i kutuya yüklemek için koştum . Şimdi bir "web sunucusu" olarak çalışıyor ve "Çalışıyor!" sayfa. Şimdi güvenliği artırmaya çalışıyorum ve linux web sunucuları hakkında aşağıdaki soruları var:

  1. Apache kim olarak çalışıyor olmalı?
  2. Bu kullanıcı hangi grupta olmalı?
  3. Hangi paket (ler) PHP'nin (ve Apache?) Dosyaların sahibi olarak çalışmasını sağlayabilir? (paylaşılan web barındırmalarında olduğu gibi) Bu paketleri kullanmalı mıyım? Küçük bir sistemde bakımı kolay / uygulanabilir mi?
  4. Apache'nin çalıştığı şekilde web'e sunulan dosya ve klasörlerin varsayılan izinleri ne olmalıdır www-data? Kullanıcı olarak çalışan apache / php için mi?

Varsayılan ayarların incelenmesinde aşağıdakileri yaptım:

Dosya yapısı

Ben cd /ve ls -aliçeriğin bir listesini yaptığımda, şunu görüyorum /var:

drwxr-xr-x 13 root root  4096 2012-02-04 20:47 var/

Eğer cdiçine girersem varve ls -algörürsem:

drwxr-xr-x  2 root root  4096 2012-02-04 20:47 www/

Sonunda içeride /var/wwwgörüyorum:

drwxr-xr-x  2 root root 4096 2012-02-04 20:47 ./
drwxr-xr-x 13 root root 4096 2012-02-04 20:47 ../
-rw-r--r--  1 root root  177 2012-02-04 20:47 index.html

Anahtar paketim şu ana kadar bu dosyaların hepsine ait root:root, dosyaların 644 iznine, dizinlerin ise 755 iznine sahip olması.

Apache'nin İzinleri

/var/www/test.phpİçeriği içinde kök olarak bir dosya oluşturursam :

<?php echo shell_exec('whoami');

ve bu dosyayı bana söylediği dosyaya yükleyin, ki dosyadakiyle www-dataaynı /etc/apache2/envvars:

export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data

Bunu yaparsam ps aux | grep -i apacheaşağıdakileri görüyorum:

root      1916  1.2 104664  7488 Ss   20:47 /usr/sbin/apache2 -k start
www-data  1920  0.8 105144  5436 S    20:47 /usr/sbin/apache2 -k start
www-data  1921  1.0 105144  6312 S    20:47 /usr/sbin/apache2 -k start
www-data  1922  0.7 104688  4624 S    20:47 /usr/sbin/apache2 -k start
www-data  1923  0.7 104688  4624 S    20:47 /usr/sbin/apache2 -k start
www-data  1924  0.7 104688  4624 S    20:47 /usr/sbin/apache2 -k start
www-data  1925  0.7 104688  4624 S    20:47 /usr/sbin/apache2 -k start

Peki kim apache olarak çalışıyor? Belki ilk işlem olarak gibi görünüyor rootbelki, /etc/init.d/apachesistem başladığında senaryo ve diğer olanlar www-datailk daha çıktı. Bu doğru mu?

Ben yazarsanız Sonra, groups www-datao zaman bakın www-data : www-data- bu sadece olmak görünmesi için www-datagrubun. Bunun da standart bir uygulama olduğunu tahmin ediyorum.

Paylaşılan Hosting ve Güvenlik

Bu yüzden, eğer şeyleri doğru anlarsam, apache olarak çalışıyorsa www-datave apache'nin bir dizini okuyabilmesini istiyorsanız, xbitin dünya (diğer) grubu ( o+x) için ayarlanması gerekir ve bunun da tüm ebeveynlerde ayarlanması gerekir. Dizinler tüm yol boyunca ( www, var). Ve eğer apache'nin bir dosyadan okuyabilmesini istiyorsanız, o+rbit ayarlanması gerekir.

Ne yazık ki, bunun aynı linux kutusundaki birden fazla uygulama ve / veya birden fazla kullanıcı için bir güvenlik açığı getirdiğine inanıyorum: Tüm web dosyalarının dünyaca okunabilir olması gerekir ve bu nedenle sistemdeki diğer uygulamalar ve diğer kullanıcılar tarafından da erişilebilir olmaları gerekir. Sisteme yüklenen bir uygulama, daha sonra PHP tarafından gerçekleştirilen ham, doğrulanmamış kullanıcı girdisine izin veren bir güvenlik açığına sahipse, uzaktan bir saldırgan, web sisteminde dünyaca okunabilen diğer tüm dosyalara gözatabilir. Aynı şekilde, kutuda birden fazla kullanıcı varsa ve bir kullanıcı başka bir kullanıcının web dosyalarının yolunu biliyorsa, dosya içeriğini okuyabilir (ve veritabanı bağlantı dizeleri vb. Gibi hassas şeyleri görebilir).

İki paket duydum suphpve phpsuexecbu , kullanıcıların dosyalarının paylaşılan bir sistemde "onlar gibi" sunulmasına izin vermekten ibaretti. Bunun en güzel yönlerinden biri, web uygulamalarının (Wordpress gibi) dosya oluşturmasına ve değiştirmesine izin vermesidir - tema, eklenti ve yükseltme yazılımı için çok yararlıdır. Elbette bu şeyleri manuel olarak yapmak muhtemelen daha güvenlidir, ancak belki yukarıda belirtilen paketlerden biriyle uzlaşma yapılabilir mi? Ya da büyük olasılıkla chownwordpress dizin grubunun www-datagruba (" g+s) yapıştırıcı biti ait olmasını sağlamak için" ?

Bunları sadece bir web barındırma şirketinin son kullanıcısı olarak kullandım ve bu yüzden bunların içini ve dışını bilmiyorum ve eğer küçük bir sisteme kurmaları makul olsa bile, ya da başka bir sistem varsa Bunun yerine kullanmam gereken güvenlik önlemleri aldım, ancak kaygılarımın üstesinden gelmenin olası bir yolu gibi göründüklerinden, burada bunlardan bahsedeceğimi düşündüm.

Sorulara Geri Dön

  1. Apache kim olarak çalışıyor olmalı?
  2. Bu kullanıcı hangi grupta olmalı?
  3. Hangi paket (ler) PHP'nin (ve Apache?) Dosyaların sahibi olarak çalışmasını sağlayabilir? (paylaşılan web barındırmalarında olduğu gibi) Bu paketleri kullanmalı mıyım? Küçük bir sistemde bakımı kolay / uygulanabilir mi?
  4. Apache'nin çalıştığı şekilde web'e sunulan dosya ve klasörlerin varsayılan izinleri ne olmalıdır www-data? Kullanıcı olarak çalışan apache / php için mi?

Yanıtlar:


17
  1. kök değil
  2. kök değil
  3. suEXEC
  4. Bağlı olmak. Dosyalar için 644 ve klasörler için 755 güvenli bir varsayılandır.

PHP'nin bu dosyanın / klasörün içeriğini düzenlemesini istemediğiniz sürece, hiçbir şeyin sahipliğini www-data olarak değiştirmeyin.

Yaptığınız herhangi bir şeyden bağımsız olarak: klasörlerin kullanıcının dosyaları bulması için okuma ve yürütme izinleri gerekir; dosyaların kullanıcının okuması için okuma izinleri gerekir. Bir şeyleri değiştirirken herhangi bir izin hatası alırsanız - bu temel olarak gerekli izinleri kaldırmayı başardınız.

Eğer php uygulamanız aracılığıyla herhangi bir dosya yazmıyorsanız, size ait olan dosyaları bırakabilirsiniz: Bu durumda, dünya izni (xx4 / 5) geçerli olandır.

Dosyaları size ait olduğu gibi bırakırsanız: 644 (dosya) dosya iznine sahip olmanızın anlamı, yalnızca web sitesi dosyalarını düzenleyebileceğinizdir - www-verileri siz değilsiniz - bu yüzden dosyaları düzenleyemezsiniz.

Apache + 'ya erişimi kısıtlamak istiyorsanız ve sizi diğer tüm erişimi engelleyin chown -R you:www-data *. 640 dosya izinleri ve 750 klasör izinleri ile düzenleyebilirsiniz, www-data okuyabilir - çünkü apache grup iznini okur (x4 / 5x).

Apache / php yazmasına izin verdiğiniz yolları - uygulamanın yazması gereken bir tmp varsa - yalnızca o klasöre yazmasına izin verin - ve mümkünse yazılabilir konumların dışında olduğundan emin olun . kök yazabilir veya bu yazılabilir yolun web üzerinden erişilememesini sağlamak için adımlar atabilirsiniz.

"Siz" in kök olmaması gerektiğini unutmayın . Root olarak doğrudan ssh erişime izin veriliyor (gibi diğer güvenlik açıkları bir göstergesidir değil Şifre girişini izin vermeme), ama bu kendi başına soruları bir sürü var.


10

Bu yüzden, bir şeyleri doğru anlarsam, eğer apache www-data olarak çalışıyorsa ve apache'nin bir dizini okuyabilmesini istiyorum, x bitinin dünya (diğer) grubu (o + x) için ayarlanması gerekir. zincirin üstündeki tüm üst dizinlerde ayarlanması gerekir (www, var). Ve eğer apache'nin bir dosyadan okuyabilmesini istiyorsanız, o + r bitinin ayarlanması gerekir.

Bu doğru değil, rwx'öteki' için ayarlama yapmanıza gerek yok . Korumaya çalıştığınız klasör / dosyanın sahibini ve / veya grubunu değiştirmelisiniz. Örneğin:

chown -R cwd:www-data /var/www/cwd.com
chmod 750 /var/www/cwd.com

Şimdi sadece grubun üyeleri www-dataokuyabilir /var/www/cwd.com. Ve sadece sen (cwd) yazabilir. Uygulamalarınızın (Apache aracılığıyla) bu dizindeki dosyaları yazmasına / değiştirmesine izin vermek istiyorsanız, onu 770'e chmod edin.

Bunun tüm sorunlarınızı kapsadığını düşünüyorum, altında kullanıcı apache'sini değiştirmek için hiçbir neden göremiyorum.


2
Teşekkür ederim. Bu kötü bir çözüm değildir, ancak bir kullanıcı başka bir kullanıcının dosyasının yolunu biliyorsa, dosyanın içeriğini okuyacak bir komut dosyası yazabilir ve daha sonra bunu web tarayıcısına yükleyebilir, bu dosyayı apache olarak çalıştırabilir - etkin bir şekilde okuma diğer kullanıcının dizinindeki dosya. bu mantıklı mı? Bu nedenle, klasör izinlerini 750 olarak ayarlansanız bile, hala potansiyel bir güvenlik açığı vardır.
cwd

@cwd bunu çözmeyi bitirdin mi?
Ricky Boyce

@cwd Bu sahip olduğum tam soru oldu. Bu yüzden bunu sordum: serverfault.com/questions/807723/…
Nandakumar Edamana 7:16
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.