Apache sanal ana bilgisayarlarını sistemin geri kalanından ayırma


11

Apache VirtualHosts olarak bir dizi farklı web sitesini barındıracak bir web sunucusu kuruyorum, bunların her biri komut dosyalarını (başta PHP, possiblu diğerleri) çalıştırma olanağına sahip olacak.

Benim sorum, bu VirtualHost'ların her birini birbirinden ve sistemin geri kalanından nasıl izole ettiğim? Örneğin X web sitesi Y web sitesinin veya sunucunun "özel" dosyalarından herhangi birinin yapılandırmasını okumayı istemiyorum.

Şu anda VirtualCost'ları FastCGI, PHP ve SUExec ile burada açıklandığı gibi ayarladım ( http://x10hosting.com/forums/vps-tutorials/148894-debian-apache-2-2-fastcgi-php-5-suexec -easy-way.html ), ancak SUExec kullanıcıların yalnızca kendi dosyaları dışındaki dosyaları düzenlemesini / yürütmesini engeller - kullanıcılar yine de yapılandırma dosyaları gibi hassas bilgileri okuyabilir.

Yukarıdaki sorunu düzeltir gibi sunucudaki tüm dosyalar için UNIX genel okuma iznini kaldırma hakkında düşündüm, ancak sunucu işlevini bozmadan güvenle yapabilirim emin değilim.

Ayrıca chroot kullanarak baktım, ancak bunun sanal sunucu başına değil, sadece sunucu başına yapılabilir.

VirtualHost'larımı sistemin geri kalanından ayıracak herhangi bir öneri arıyorum.

PS: Ubuntu 12.04 sunucusunu çalıştırıyorum

CEVAP: Neredeyse mevcut yapılandırmamı takip ederek bitirdim, ancak tüm sanal ana bilgisayarlar için bir cezaevi hapishanesi yapıyorum, örneğin, cezaevi hapishanesine sahip /var/wwwolmak ve daha sonra tüm kullanıcıların verilerini alt gruplarda grup / diğerleri r / w / x izinlerine sahip olmak özürlü. Bu seçenek özellikle kaynak kodda herhangi bir değişiklik yapılmadan mümkün olduğu için arzu edildi.

@Chris'in cevabını seçtim, çünkü iyice yazılmış ve FTP ve SELinux olarak kabul edildi

Yanıtlar:


4

Bu, Apache'de mod_users modülü etkinleştirilerek yapılabilir.

Apache yapılandırmanızda UserDir'i kurmanız gerekir. Bunu ayrı bir yapılandırma dosyasında yapmanızı ve eklemenizi öneririm. İçeriği sarın

<IfModule mod_users.c>
   Include conf/extra/userdir.conf
</IfModule>

Size tüm öğreticiyi verebilirim, ancak bu Apache'yi yapılandırmaya başlamanız gerekir: http://www.techytalk.info/enable-userdir-apache-module-ubuntu-debian-based-linux-distributions/

İpucu Eğer SELinux çalıştırıyorsanız (ve yapmalısınız) Apache'nin kullanıcı evlerine okuma erişimi vermeniz gerekir. Bunu ayarlayarak yapabilirsiniz:

sudo setsebool -P httpd_enable_homedirs=On

Ayrıca, kullanıcı dizinleri public_html dizininde dosya izinlerine ve kök dizine kadar üst dizinlerde rx izinlerine ihtiyaç duyar.

Açıkçası kullanıcılar için chroot kurmanız gerekiyor, örneğin vsftpd'de. Yüklemek:

apt-get vsftpd

Krokiyi yapılandırmak için vi veya nano ile /etc/vsftpd/vsftpd.conf dosyasını açın. Bulun ve açın veya ekleyin: chroot_local_user = yes

FTP, open / etc / ssh / sshd_config üzerinde önerdiğim sftp için aynı davranışı elde edebilir ve bir Eşleşme bloğu ve bu satırı ekleyebilirsiniz:

Subsystem   sftp    internal-sftp

Match Group web_users
    ChrootDirectory %h
    ForceCommand internal-sftp
    AllowTcpForwarding no
Match

Bu , web_users grubundaki herhangi bir kullanıcıyı köklendirir . Ayrıca, / sbin / nologin olarak ayarlayarak kabuğa erişimi reddetmeniz gerekir:

useradd -G "web_users" -s /sbin/nologin new_user

Bu bir kamu üretim sunucusu olacaksa, ayrıca OS, OpenSSH, Apache, PHP, vsftpd'de biraz sertleştirme uygulamanızı ve bazı katı iptables ve TCP sarmalayıcıları uygulamanızı şiddetle tavsiye ederim. SELinux'u yerinde de bırakmanızı tavsiye ederim.


3
mod_userdirAyrı alan adlarının sanal olarak nasıl barındırılacağını bilmiyorum . Ayrıca, Apache içindeki kullanıcı dizinleri arasında bir şey bulamadığım için yalıtım açısından güvenlikle ilgili endişelerim var. Sadece bu özelliği sunmuyor gibi görünüyor.
gertvdijk

6

Bir göz atmanızısuphp veya PHP-FPM'yi öneririm .

Temel olarak PHP yorumlayıcısının bu VirtualHost için yapılandırılmış belirli bir kullanıcıya 'su' yapmasını sağlayacaktır. Bu, her bir VirtualHost'u izole etmek için genel dosya sistemi izinlerini kullanmanıza izin verecektir.

Performans açısından FPM'yi öneriyorum. Ana sayfadan ilginizi çeken şey budur:

Ayrıca, ilgili upm havuzunu verilen uid ve gid altında çalıştırmanıza izin veren havuz başına kullanıcı ve grup seçenekleri de ilgi çekicidir; güle güle suphp!


4

1
Bu bağlantılara baktım, ancak sanal sunucu başına temel alabilirim. Belki benzer bir chot için genel bir www dizini tanımlamak /var/wwwve tüm ana orada bir alt dizinde olması gerekir, bu alt dizinlerin her biri genel yürütme / okuma izni kaldırmış?
JesperB

Benim asıl amacım chroot, sanal sunucu başına yapabilirsiniz. İşte bir örnek. Bu durumda kullanıyorlar mod_chroot.
tacotuesday
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.