Zabezpieczenia serwera Apache 1.3

Jak zabezpieczyć serwer Apache?

Contents

Chrootowanie stron WWW jako zabezpieczenie przed złośliwymi użytkownikami

Wyobraźmy sobie, że nasz serwer umożliwia klientom wyświetlanie ich stron z zastosowaniem PHP. Wystarczy, że któryś z nich będzie chciał wykonać następujący kod php:

include "/etc/passwd"

W znakomitej większości przypadków spowoduje to wyświetlenie zawartości pliku /etc/passwd. Prostym, acz bardzo przydatnym rozwiązaniem tego problemu jest wykorzystanie specjalnego modułu Apache, który po załadowaniu wszystkich potrzebnych bibliotek zmusi procesy Apache’a do pracy w określonym katalogu jako katalogu głównym. Moduł ten nazywa się mod-chroot i jest dostępny w postaci pakietów w Debianie 3.0 pod nazwą libapache-mod-chroot.

Opcją ChrootDir w części głównej pliku konfiguracyjnego (dla podstawowego serwera, nie dla virtualnych domen) określamy katalog, który będzie bazowym katalogiem (powiedzmy że będzie to /data1/www). Następnie już dalsze katalogi określamy względem tego. Przykład: Przypuśćmy że mamy wirtualną domenę sklep.linuxexpert.pl i jej katalog na dysku to /data1/www/sklep.linuxexpert.pl/www/htdocs. Przypuśćmy również, że w głównym pliku konfiguracyjnym Apache’a zdefiniowaliśmy dyrektywą chrootdir katalog /data1/www jako katalog bazowy. Wtedy ścieżka DocumentRoot, czyli do strony serwisu sklepu, będzie miała postać sklep.linuxexpert.pl/www/htdocs a nie /data1/www/sklep.linuxexpert.pl/www/htdocs.

Problem poczty: Niestety, rozwiązanie to wiąże się z jednym problemem: jako że Apache działa w środowisku chroot to nie ma dostępu do binariów sendmaila (albo innego programu do wysyłania poczty). Powoduje to problemy z wysyłaniem wiadomości email z poziomu PHP. Istnieje program o nazwie mini_sendmail, który kompilowany jest statycznie (nie korzysta z żadnych bibliotek współdzielonych, których musielibyśmy kopiować do środowiska chroot) i łączy się lokalnym serwerem pocztowym przez adres 127.0.0.1. Nie jest to rozwiązanie idealne: mimo że poczta jest wysyłana, PHP nie potrafi określić że faktycznie tak się stało. Gotowe produkty korzystające z klasy PEAR do wysyłania maili należy przestawić na korzystanie z „zewnętrznego” serwera poczty (wtedy nie zgłaszają błędów) a w kodzie wysyłającym wiadomości przy pomocy funkcji mail() wygasić informowanie o błędach. Przykładowa konfiguracja PHP by korzystała z mini_sendmaila to:

php_admin_value sendmail_path "/usr/sbin/sendmail -t -ftwoj@adres.email"

Strony związane z projektem:

 

Modscurity

Instalacja

Moduł jest dostępny w postaci pakietów w wielu popularnych dystrybucjach (np. Debian Sarge). W innym przypadku można go instalować w prosty sposób ze źródeł.

Problemy:

  • Moduł jest rozpowszechniany w dystrybucji Debiania z dwoma przykładowymi plikami konfiguracyjnymi: z minimalną konfiguracją i pełną konfiguracją. Pełna konfiguracja zawiera testy cookies, które nie są zgodne z gotowymi forami m.in. PHPBB2.
  • Pełny plik zawiera opcje logowania zdarzeń, jeżeli tego nie wyłączymy urośnie on w szybkim czasie do niebotycznych rozmiarów.

Strony związane z projektem:

Dodaj komentarz