Sadece bir Ubuntu 11.10 kutusu açtım ve daha sonra apt-get install apache2 php5
apache2 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:
- Apache kim olarak çalışıyor olmalı?
- Bu kullanıcı hangi grupta olmalı?
- 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?
- 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 -al
iç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 cd
içine girersem var
ve ls -al
görürsem:
drwxr-xr-x 2 root root 4096 2012-02-04 20:47 www/
Sonunda içeride /var/www
gö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-data
aynı /etc/apache2/envvars
:
export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data
Bunu yaparsam ps aux | grep -i apache
aş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 root
belki, /etc/init.d/apache
sistem başladığında senaryo ve diğer olanlar www-data
ilk daha çıktı. Bu doğru mu?
Ben yazarsanız Sonra, groups www-data
o zaman bakın www-data : www-data
- bu sadece olmak görünmesi için www-data
grubun. 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-data
ve apache'nin bir dizini okuyabilmesini istiyorsanız, x
bitin 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+r
bit 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 suphp
ve phpsuexec
bu , 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 chown
wordpress dizin grubunun www-data
gruba (" 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
- Apache kim olarak çalışıyor olmalı?
- Bu kullanıcı hangi grupta olmalı?
- 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?
- 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?