Przejdź do głównej zawartości

Linux RHCE - Serwer WWW - Apache Web Server

Apache jest najbardziej popularnym i najszerzej stosowanym serwerem WWW w internecie. Dostępny jest dla wielu systemów operacyjnych takich jak UNIX, LINUX, Microsoft Windows, BSD, OS X oraz pojawia się jako składnik wielu pakietów oferujących wraz z nim dodatkowe oprogramowanie PHP czy baz danych np.: XAMPP, LAMP, WAMP itp. Strona domowa projektu http://httpd.apache.org/. Głównymi cechami serwera są wielowątkowość, skalowalność, bezpieczeństwo, kontrola dostępu, CGI, proxy, obsługa modułów w tym mod_ssl. Pierwsza wersja pojawiła się oficjalnie w kwietniu 1995 roku. Na chwilę obecną najnowsze wydania serwera posiadają już graficzny interfejs konfiguracyjny parsujący ustawienia do pliku httpd.conf. 


INSTALACJA SERWERA APACHE 

Krok 1 - Instalacja wymaganych pakietów

# yum install -y httpd mod_ssl

Krok 2 - Sprawdzenie że wszystkie potrzebne pakiety znajdują się w systemie

# rpm -qa | grep http
httpd-tools-2.2.15-15.el6.i686
httpd-2.2.15-15.el6.i686

# rpm -qa | grep ssl
openssl-1.0.0-20.el6.i686
mod_ssl-2.2.15-15.el6.i686

Krok 3 - Ustawienie uruchamiania usług wraz z systemem operacyjnym 

# chkconfig httpd on

Krok 4 - Sprawdzenie wprowadzonych zmian 

# chkconfig --list httpd
httpd   0:off   1:off   2:on    3:on    4:on    5:on    6:off

KONFIGURACJA SERWERA WWW 

Po instalacji odpowiednich pakietów możemy skierować uwagę na odpowiednie pliki konfiguracyjne i ich lokalizację. Podczas instalacji został utworzony katalog /var/www i jest to miejsce w którym umieszczamy pliki stron WWW. Istnieje również kilka plików konfiguracyjnych takich jak :

/etc/httpd/conf/httpd.conf          Główny plik konfiguracyjny 

/var/log/httpd                                      Logi serwera www

/usr/lib64/httpd/modules                 Moduły dla serwera Apache

Po instalacji serwera jego konfiguracja znajdująca się w głównym pliku konfiguracyjnym nadaje się od razu do zastosowania. Warto jednak zapoznać się z opcjami jakie mamy dostępne i jakie możemy skonfigurować ponieważ jest ich dość sporo i wszystkie zostały dobrze udokumentowane. Informacje w pliku pogrupowane są w sekcje. 

Podstawowe globalne opcje konfiguracyjne : 

ServerRoot          - Miejsce przechowywania plików konfiguracyjnych 

Timeout                - Okres czasu pomiędzy zapytaniami po jakimi przerywane jest połączenie 

Listen                    - Numer portu nasłuchu 

User                      - Użytkownik z jakiego uruchamiana jest usługa serwera www

Group                    - Grupa z jakiej uruchamiany jest serwer www

LoadModule           - Definicja modułów ładowanych wraz ze startem serwera www

Podstawowe opcje dla serwera www

DocumentRoot       - Lokalizacja plików stron WWW 

ServerName           - Definicja nazwy serwera, adresu IP i numeru portu 

Zacznijmy od konfiguracji związanych z lokalizacją plików stron WWW. Domyślnie jest to /var/www/html ale jeżeli zachodzi taka potrzeba możemy to zmienić.

W głównym pliku konfiguracyjny możemy znaleźć również sekcję nazwaną "Directory" : 

<Directory "/var/www/html">

    Options Indexes FollowSymLinks

    AllowOverride None

    Order allow,deny
    Allow from all

</Directory>

Określone tu parametry wskazują na to w jakiej lokalizacji będą znajdowały się pliki stron, ale jeżeli chcemy zmienić lokalizację w jakiej mają znajdować się pliki stron www musi dokonać tego w : 

DocumentRoot "/var/www/html"

Ma to również zastosowanie w przypadku konfiguracji virtualnych hostów o których będzie później. Jeżeli konfiguracja jest już zadowalająca i zgadzamy się na ustawione parametry możemy przeprowadzić test sprawdzający poprawność pliku konfiguracyjnego na występowanie błędów składniowych: 

# service httpd configtest
httpd: Could not reliably determine the server's fully qualified domain name, using RHEL01.example.com for ServerName
Syntax OK
Powyższy błąd dotyczy nieustawionej nazwy serwera zgodniej z hostem na jakim serwer się znajduję i po od komentowaniu odpowiedniej opcji i podaniu sugerowanej nazwy serwera błąd został usunięty. 

# service httpd configtest
Syntax OK

Jeżeli chcemy wykonać restart serwera stosujemy polecenie : 

# service httpd restart
Stopping httpd:                                     [  OK  ]
Starting httpd:                                     [  OK  ]

Możemy również przeładować pliki konfiguracyjne serwera bez restartu całej usługi przy pomocy : 

# service httpd reload

Istnieje jeszcze jedna opcja umożliwiająca restart serwera pozwalająca wczytać nowe pliki konfiguracyjne ale bez rozłączanie ani jednego klienta aktualnie korzystającego z www. 

# service httpd graceful

KONFIGURACJA ZAPORY IPTABLES I SELINUX  

Krok 1 - Dodanie odpowiednich reguł zapory iptables 

iptables -I INPUT 5 -p tcp -m tcp --dport 80 -j ACCEPT

Krok 2 - Zapisanie ustawień iptables 

# service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[ OK ]

Krok 3 - Restart usługi zapory systemowej 

# service iptables restart
iptables: Flushing firewall rules:                     [  OK  ]
iptables: Setting chains to policy ACCEPT: filter      [  OK  ]
iptables: Unloading modules:                           [  OK  ]
iptables: Applying firewall rules:                     [  OK  ]

Powyższe ustawienie otwiera port 80 na jakim działa usługa dla wszystkich. Często jest jednak tak, że z jakiegoś powodu potrzebujemy zablokować jakąś podsieć, a korzystanie z usługi pozostawić wybranym podsiecią lub hostom. 

Aby dostęp do usługi httpd był możliwy tylko dla danej podsieci można wprowadzić ograniczenie w postaci : 

iptables -I INPUT -s 192.168.56.0/24 -p tcp --dport 80 -j ACCEPT

Wpis ten ograniczy dostęp dla hostów znajdujących się w podsieci 192.168.56.0/24. 

Możemy również posunąć się dalej o zastosować ograniczenie do pojedynczego hosta 

iptables -I INPUT -s 192.168.56.102 -p tcp --dport 80 -j ACCEPT

Teraz można zobaczyć strony www tylko będąc na hoście lokalnym lub 192.168.56.102

Idąc jeszcze dalej mamy możliwość zablokowania dostępu również na hoście lokalnym i pozostawienie go tylko z wybranej konkretnej maszyny lub podsieci. Zablokowanie dostępu z maszyny lokalnej można wykonać blokując lokalny adres IP np.: (192.168.56.101)

iptables -I INPUT -s 192.168.56.101 -p tcp --dport 80 -j REJECT

Wpis ten zablokuje dostęp do stron www również z hosta na jakim serwer się znajduję. 


OPCJE SELINUX 

httpd_can_network_relay - Umożliwia httpd działanie jako przekaźnik

htttp_can_network_connect_db - Zezwala httpd na łączenie się skryptów i modułów z bazą danych.

httpd_use_gpg - Zezwala httpd na włączenie gpg w domenie gpg-web

httpd_enable_cgi - Zezwala na wsparcie dla CGI

httpd_use_cifs - Zezwala by httpd miał dostęp do CIFS

allow_httpd_mon_auth_pam - Zezwala na użycie mod_auth_pam

allow_httpd_anon_write - Zezwala na modyfikacje plików publicznych

httpd_enable_homedirs - Umożliwia czytanie katalogów domowych

allow_httpd_sys_scripts_anon_write - Zezwala skryptom apache modyfikować zawartość publicznego katalogu katalog musi mieć kontekst public_rw_content_t

httpd_dbus_avahi - Umożliwia komunikacje z usługa avahi

httpd_unified - Ujednolicenie uchwytów do zawartości wszystkich plików

httpd_can_network_connect - Umożliwia skryptom i modułom httpd na łączenie z siecią przez TCP

allow_httpd_mod_auth_ntlm_winbind - Umożliwia stosowanie mod_auth_pam

httpd_tty_comm - Ujednolicona komunikacja z terminalem.

httpd_read_user_content - Zezwala na dostęp do plików użytkowników

httpd_use_nfs - Dostęp do NFS systemu plików

httpd_tmp_exec - Dostęp do plików w katalogu /tmp

httpd_execmem - Zezwala na dodanie modułów /execmem i /execstak

httpd_can_sendmail - Pozwala usłudze httpd wysyłać wiadomości email

httpd_builtin_scripting - Umożliwia usłudze httpd korzystać ze skryptów zazwyczaj PHP

httpd_can_check_spam - Sprawdzanie spamu przez httpd

httpd_can_network_connect_cobbler - Pozwala by skrypty i moduły miały połączenie z siecią cobbler

httpd_ssi_exec - Umożliwia httpd uruchamianie SSI w tej samej domenie co skrypty CGI

httpd_enable_ftp_server - Umożliwia httpd dostęp do serwera FTP i wy listowanie plików przez port FTP

httpd_setrlimit - Pozwala usłudze httpd zmieniać limity systemowe.

By uruchomić podstawową usługę webową we własnej sieci nie ma potrzeby wprowadzania żadnych zmian w plikach konfiguracyjnych. Prawie każda nowa nie zawarta w podstawowych ustawieniach opcja wymaga konfiguracji ustawień SELinux. Pracując z usługami webowymi należy pamiętać o istnieniu dodatkowego wymogu w postaci SELinuxa. Apache korzysta z kontekstów plików z powodu istnienia różnych treści dostępnych na dysku.

Kontekst każdego nowo utworzonego katalogu musi zostać ustawiony na użytkownika serwera httpd tak by mógł on uzyskiwać do niego poprawny dostęp. 

Załóżmy dla przykładu, że potrzebujemy utworzyć dwa nowe katalogi przeznaczone dla dwóch odrębnych klientów : 

Krok 1 - Utworzenie katalogów dla klientów :

# mkdir /var/www/strona1
# mkdir /var/www/strona2

Krok 2 - Sprawdzenie jakie aktualnie konteksty mamy dla plików :


# ls -Z /var/www/
drwxr-xr-x. root root system_u:object_r:httpd_sys_script_exec_t:s0 cgi-bin
drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 error
drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 html
drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 icons
drwxr-xr-x. root root unconfined_u:object_r:httpd_sys_content_t:s0 strona1
drwxr-xr-x. root root unconfined_u:object_r:httpd_sys_content_t:s0 strona2


Trzeba zmienić konteksty dla katalogów klientów na zgodne z domyślnymi dla stron www ( lokalizacja html)

Krok 3 - Używając polecenia chcon zmieniamy kontekst dla użytkownika domeny


# chcon -Rvu system_u /var/www/strona1
changing security context of `/var/www/strona1'

# chcon -Rvu system_u /var/www/strona2
changing security context of `/var/www/strona2'

Krok 4 - Możemy również odwołać się do domyślnego katalogu jedną komendą 

# chcon --reference /var/www/html/ /var/www/strona2 

Jest to przeniesienie ustawionego kontekstu na znanym pliku w tym przypadku domyślnie ustawiony kontekst katalogu html gdzie po instalacji można umieszczać pliki stron na inny wybrany lub utworzony nowy katalog jaki również będzie miał zadanie przechowywać pliki stron. 

Krok 5 - Teraz możemy sprawdzić poprawność kontekstów dla nowych lokalizacji 

# ls -Z /var/www/
drwxr-xr-x. root root system_u:object_r:httpd_sys_script_exec_t:s0 cgi-bin
drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 error
drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 html
drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 icons
drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 strona1
drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 strona2


ROZWIĄZYWANIE PROBLEMÓW Z APACHE

Jednym z najlepszych narzędzi do rozwiązywania problemów z apache są pliki logów. Pliki logów serwera apache posiadają oddzielną lokalizację od logów systemowych by łatwiej je znaleźć. Mamy dwa podstawowe pliki jakie możemy poddać analizie w celu rozwiązania problemów z serwerem apache. 

  • /var/log/httpd/access_log          Log wszystkich dostępów do serwera 
  • /var/log/httpd/error_log            Informację o błędach z serwerem 
Zazwyczaj analiza powyższych plików dostarcza wystarczających informacji do rozwiązania problemów. W głównym pliku konfiguracyjnym istnieje sekcja umożliwiająca ustawienie poziomu logowania z usługi httpd

Jeżeli stosujemy bezpieczne strony istnieją wtedy trzy dodatkowe pliki dla SSL : 
  • /var/log/httpd/ssl_access_log          Logowanie dostępu do bezpiecznej strony 
  • /var/log/httpd/ssl_error_log            Logowanie informacji o błędach ze stroną ssl 
  • /var/log/httpd/ssl_request_log         Logowanie zapytań od klienta do serwera
Jak już wiemy do sprawdzania poprawności składni głównego pliku konfiguracyjnego stosujemy polecenie "config-test". Jednym z popularnych błędów podczas uruchamiania usługi jest komunikat informujący, że nazwa serwera "ServerName" nie została ustalona więc serwer domyślnie zakłada ją jako 127.0.0.1. By pozbyć się tej niedogodności ustawiamy nazwę serwera. Możemy również ustawić ilość informacji jaka znajduje się w logach za pomocą parametru "LogLevel"w głównym pliki konfiguracyjnym. 


ELINKS

Innym użytecznym narzędziem jakie może być przydatne podczas rozwiązywania problemów z apache jest przeglądarka internetowa "elinks". Jest to przeglądarka tekstowa pozwalająca szybko sprawdzić działanie strony www. By używać tego narzędzia musimy zainstalować dodatkowe paczki.

Krok 1 - Instalacja wymaganych pakietów

# yum install -y elinks

Krok 2 - Po instalacji możemy przetestować działanie strony wydając polecenie : 

elinks 192.168.56.101

Powinniśmy zobaczyć zawartość pliku : /var/www/html/index.html 

Możemy również sprawdzić działanie SSL 

# elinks https://172.168.1.1

Na razie nie będzie jeszcze działać ! 

BEZPIECZEŃSTWO APACHE

Powyżej przedstawiono już sposób dodania reguł do firewall'a oraz zasady kontekstów SELinuxa. W tym miejscu jeszcze bardziej i dokładniej omówione zostaną sposoby zabezpieczeń i konfigurację ustawień regulujące dostęp do usługi serwera www. 

Zabezpieczenie usługi na na hoście 

Pierwszym sposobem zabezpieczenia jest ograniczenie dostępu do serwera httpd z określonej podsieci. Wykonujemy to wprowadzając w głównym pliku konfiguracyjnym opcje w parametrze "Listen" : 

Listen <adres_IP_serwera>:<port> 

Listen 192.168.56.101:80 

Po restarcie usługi serwera strony dostępne będą jedynie z podanej podsieci. 

Kolejnym sposobem zabezpieczenia jest dyrektywa <Directory> w głównym pliku konfiguracyjnym : 

<Directory "/var/www/html">
    Options Indexes FollowSymLinks
    AllowOverride None
    Order allow,deny
    Allow from 192.168.56.102
</Directory>

Taki zapis w pliku konfiguracyjnym, ogranicza dostęp do katalogu /var/www/html i jego zawartości. Dostęp możliwy jest tylko z wybranego hosta w tym przypadku jest to host 192.168.56.102

Inne możliwe konfigurację to : 

Dostęp ograniczony do danej domeny : 

<Directory "/var/www/html">
    Options Indexes FollowSymLinks
    AllowOverride None
    Order allow,deny
    Allow from .example.com
</Directory>

Należy zwrócić uwagę, że nazwę domeny podajemy zaczynając od kropki ! 

Dostęp ograniczony do danej podsieci 

<Directory "/var/www/html">
    Options Indexes FollowSymLinks
    AllowOverride None
    Order allow,deny
    Allow from 192.168.1
</Directory>

Należy zwrócić uwagę by adres kończył się na 3 oktecie bez kropki

Po określeniu hostów które mają mieć dostęp lub nie mieć dostępu do serwera WWW należy zdefiniować kolejność stosowania reguł. 

Order allow, deny         Jako pierwsze zostaną przepuszczone wybrane adresy 
Order deny, allow         Jako pierwsze zostanie wykonane zabronienie dostępu.

Chcąc przepuścić dany adres stosujemy opcję że najpierw przepuszczamy dany adres , a pozostałe blokujemy , alternatywnie chcąc zablokować dany adres blokujemy go na początku a resztę przepuszczamy. 

W dyrektywie tej istnieją również opcje : 

Option Indexes - Jeżeli nie istnieje plik index.html na stronie pojawi się wylistowana zawartość katalogu

FollowSymLinks   - Można wykonać dowiązanie symboliczne w systemie operacyjnym gdzie wskażemy inny katalog z poza zdefiniowanego w dyrektywie. 

AllowOverride   - Nie zezwala zwykłym użytkownikom na zmianę plików root'a 

Powyższe opcje mogą być zastosowane do innych katalogów z poustawianymi różnymi względem siebie opcjami. Istnieje również sekcja <Directory> bez zdefiniowanego katalogu i wszystkie ustawione w niej opcje będą nadrzędnie stosowane dla wszystkich pozostałych poniżej. 

Zabezpieczenie usługi od strony klienta 

W tym miejscu wykonamy zabezpieczenie danego katalogu dając dostęp jedynie wybranym użytkownikom. Istnieją następujące opcję umożliwiające ograniczenie dostępu użytkownikom: 

AuthType     - Definiuje typ autentykacji 

AuthName    - Definiuje komentarz wyświetlany użytkownikowi przy logowaniu 

AuthUserFile - Ustawia plik używany do przechowywania loginów i haseł użytkowników 

AuthGroupFile - Ustawia plik do przechowywania loginów i haseł dla grupy 

Require - Ustawia które grupy i użytkownicy mogą się zalogować

Przećwiczymy powyższe na przykładzie. Zabezpieczamy główną stronę wystawianą przez serwer WWW udostępniając ją jedynie użytkownikowi User01. 

Krok 1 - W dyrektywie <Directory> dopisujemy parametry : 

<Directory "/var/www/html">
    Options Indexes FollowSymLinks
    AllowOverride None
    Order allow,deny
    Allow from 192.168.56.102
    AuthType Basic
    AuthName "Zabezpieczona strona nie dla Ciebie"
    AuthUserFile /etc/httpd/userfile
    Require user user01

</Directory>


Krok 2 - Utworzenie pliku userfile 

# htpasswd -cm /etc/httpd/userfile user01
New password:
Re-type new password:
Adding password for user user01

Opcja -c powoduje utworzenie pliku i stosujemy ją jednorazowo jeżeli plik jeszcze nie istnieje. Kolejna opcja -m używa szyfrowania MD5 przy zapisywaniu haseł do pliku przez co nie są przechowywane w postaci jawnej. 

Krok 3 - Restartujemy serwer WWW

# service httpd restart

Krok 4 - Sprawdzenie działania w przeglądarce 

Powinniśmy być pytani o login i hasło , a po wpisaniu hasła i loginu zobaczymy stronę. 

Kolejną opcją jest umożliwienie dostępu do głównej strony natomiast wymagane logowanie będzie w momencie otwierania innych podstron. 

Krok 1 - W pliku konfiguracyjnym dokonujemy kolejnych zmian 

<Directory "/var/www/html">
    Options Indexes FollowSymLinks
    AllowOverride authconfig
    Order allow,deny
    Allow from 192.168.56.1
    AuthType Basic
    AuthName "Zabezpieczona strona nie dla Ciebie"
    AuthUserFile /etc/httpd/userfile
    Require user user01
</Directory>

Krok 2 - Utworzenie lokalizacji z podstroną 

W katalogu /var/www/html tworzymy nowy katalog : # mkdir katalog w którym będzie zabezpieczona strona. 

Krok 3 - W utworzonym katalogu tworzymy plik .htaccess 

# vi .htaccess

wpisując do pliku treść : 

AuthType Basic
AuthName "Nie masz dostepu do tego pliku bez logowania"
AuthGroupFile /etc/httpd/groupfile
Require group hr_users

Krok 4 - Utworzenie kilku użytkowników 

# htpasswd -m /etc/httpd/userfile hr01
New password:
Re-type new password:
Adding password for user hr01

# htpasswd -m /etc/httpd/userfile hr02
New password:
Re-type new password:
Adding password for user hr02

Krok 5 - Utworzenie pliku groupfile 

Tworzymy plik : # vim /etc/httpd/groupfile w którym wpisujemy : 

hr_users: hr01 hr02

Krok 6 - Restart serwera WWW

# service httpd restart 

Krok 7 - Sprawdzenie działania 

W przeglądarce można zobaczyć stronę główna ale po przejściu do katalogu będzie prośba o zalogowanie. 

Udostępnienie stron z katalogów domowych użytkowników

Możemy również umożliwić udostępnianie na serwerze WWW stron z katalogów domowych użytkownika. 

W tym celu należy: 

# mkdir public_html   ( w katalogu domowym użytkownika tworzymy podkatalog ) 

# chmod 701 /home/user01/

# chmod 705 -R /home/user01/public_html/

Po wykonaniu powyższego należy sprawdzić ustawienia SELinux 

# getsebool -a | grep httpd
allow_httpd_anon_write --> off
allow_httpd_mod_auth_ntlm_winbind --> off
allow_httpd_mod_auth_pam --> off
allow_httpd_sys_script_anon_write --> off
httpd_builtin_scripting --> on
httpd_can_check_spam --> off
httpd_can_network_connect --> off
httpd_can_network_connect_cobbler --> off
httpd_can_network_connect_db --> off
httpd_can_network_memcache --> off
httpd_can_network_relay --> off
httpd_can_sendmail --> off
httpd_dbus_avahi --> on
httpd_enable_cgi --> on
httpd_enable_ftp_server --> off
httpd_enable_homedirs --> off
httpd_execmem --> off
httpd_read_user_content --> off
httpd_setrlimit --> off
httpd_ssi_exec --> off
httpd_tmp_exec --> off
httpd_tty_comm --> on
httpd_unified --> on
httpd_use_cifs --> off
httpd_use_gpg --> off
httpd_use_nfs --> off

 Zmieniając odpowiednią opcję : 

# setsebool -P httpd_enable_homedirs=1

Sprawdzenie wprowadzonych zmian : 

# getsebool -a | grep httpd
...
httpd_enable_homedirs --> on 
...

Teraz można sprawdzić działanie w przeglądarce :

http://192.168.56.101/~user01/

Pamiętajmy o użyciu znaku ~ przed nazwą użytkownika.

KONFIGURACJA HTTPS - SSL 

Poza normalnymi stronami możemy mieć również bezpieczne strony używające protokołu HTTPS. Konfiguracja bezpiecznych stron w apache jest prosta. Do bezpiecznych stron potrzebujemy pakietu mod_ssl więc jeśli nie ma go w systemie trzeba go zainstalować. Jeżeli pakiet zostanie zainstalowany w systemie będziemy mieć dostęp do pliku konfiguracyjnego /etc/httpd/conf.d/ssl.conf w którym znajdują sie parametry konfiguracyjne zabezpieczające serwer www. 

Sprawdźmy co takiego możemy skonfigurować w tym pliku :

# grep -v ^# /etc/httpd/conf.d/ssl.conf

LoadModule ssl_module modules/mod_ssl.so

Listen 443

SSLPassPhraseDialog  builtin
SSLSessionCache         shmcb:/var/cache/mod_ssl/scache(512000)
SSLSessionCacheTimeout  300
SSLMutex default
SSLRandomSeed startup file:/dev/urandom  256
SSLRandomSeed connect builtin
SSLCryptoDevice builtin
<VirtualHost _default_:443>
ErrorLog logs/ssl_error_log
TransferLog logs/ssl_access_log
LogLevel warn
SSLEngine on
SSLProtocol all -SSLv2
SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW
SSLCertificateFile /etc/pki/tls/certs/localhost.crt
SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
<Files ~ "\.(cgi|shtml|phtml|php3?)$">
    SSLOptions +StdEnvVars
</Files>
<Directory "/var/www/cgi-bin">
    SSLOptions +StdEnvVars
</Directory>
SetEnvIf User-Agent ".*MSIE.*" \
         nokeepalive ssl-unclean-shutdown \
         downgrade-1.0 force-response-1.0
CustomLog logs/ssl_request_log \
          "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
</VirtualHost>


Najważniejszymi opcjami jakie są w tym pliku są : Listen oraz parametry zdefiniowane pomiędzy znacznikami <VirtualHost _default_:443></VirtualHost>.

Domyślnie bezpieczne strony umieszcza się na wirtualnych hostach ( co jest bardzo dobre bo mogą działać niezależnie od istniejących stron)

Należy również zwrócić uwagę na dwie opcję :

SSLCertificateFile /etc/pki/tls/certs/localhost.crt
SSLCertificateKeyFile /etc/pki/tls/private/localhost.key


Opcje te definiują i wskazują na lokalizację plików zawierających klucze jakie używane są dla udostępniania zabezpieczonych stron. Chociaż domyślne opcje będą działać w postaci po instalacji to jeżeli zmienimy adres IP lub nazwę pary domen zachodzi potrzeba wygenerowania nowego certyfikatu i klucza. Do generowania certyfikatów i kluczy należy zainstalować pakiet crypto-utils. Generowanie kluczy i certyfikatów nie jest tematem egzaminu RHCE. 


Krok 1 - Utworzenie reguł zapory iptables

# iptables -I INPUT 5 -p tcp -m tcp --dport 443 -j ACCEPT
# iptables -I INPUT 5 -p tcp -m tcp --dport 80 -j ACCEPT   
      (jeżeli nie otworzono go wcześniej)

Krok 2 - Zapisanie ustawień iptables

# service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[ OK ]
[root@RHEL01 ~]# service iptables restart
iptables: Flushing firewall rules:                         [ OK ]
iptables: Setting chains to policy ACCEPT: filter          [ OK ]
iptables: Unloading modules:                               [ OK ]
iptables: Applying firewall rules:                         [ OK ]

Krok 3 - Restart usługi iptables 

# service iptables restart
iptables: Flushing firewall rules:                         [ OK ]
iptables: Setting chains to policy ACCEPT: filter          [ OK ]
iptables: Unloading modules:                               [ OK ]
iptables: Applying firewall rules:                         [ OK ]


APLIKACJA CGI 


W tym miejscu w kilku krokach pokażę jak uruchomić aplikację CGI w serwerze apache. 

Krok 1 - Utworzenie katalogu dla aplikacji 

# mkdir /var/www/web-app

Krok 2 - W utworzonym katalogu umieszczamy plik z przykładową aplikacją 

# cd /var/www/webapp 

# vim app.sh 

app.sh 

            #!/usr/bin/perl

            print "Content-type: text/html\n\n";

            print "Hello, world!\n";

Krok 3 - W pliku konfiguracyjnym /etc/httpd/conf/httpd.conf dodajemy wpis : 

ScriptAlias /webapp "/var/www/webapp"
<Directory "/var/www/webapp/">

        Options ExecCGI FollowSymLinks
        Order allow,deny
        Allow from all

</Directory>

Krok 4 - Sprawdzamy czy składnia pliku jest poprawna 

# service httpd configtest
Syntax OK

Krok 5 - Ustawiamy odpowiednie uprawnienia na katalogu 

# chmod -R 755 /var/www/webapp/

Krok 6 - Restartujemy usługę serwera WWW 

# service httpd restart 


HOSTY WIRTUALNE 

Dużą zaletą serwera WWW Apache jest możliwość uruchamiania wielu stron na jednym serwerze www. Robi się to poprzez skonfigurowanie wirtualnych hostów. Konfiguracja znajduje się w głównym pliku konfiguracyjnym apache httpd.conf w trzeciej sekcji : 

NameVirtualHost - Określa nazwę lub adres IP dla wirtualnego hosta 

ServerAdmin - Określa adres email dla webmastera 

DocumentRoot - określa katalog dla plików wirtualnego hosta 

ServerName - Definiuje URL dla wirtualnego hosta 

ErrorLog - określa lokalizacje pliku error logu 

CustomLog - określa lokalizacje custom logu 

By uruchomić wirtualny host w serwerze Apache należy w pliku konfiguracyjnym httpd.conf w ostatniej części dodać wpis :

Usuwamy komentarz z linii : NameVirtualHost *:80


<VirtualHost *:80>

</VirtualHost>

Tworząc pusty wirtualny host zapobiegamy nadpisaniu ustawień dla lokalnego serwera www dzięki czemu po podaniu adresu strony prowadzącego do plików znajdujących się w domyślnej lokalizacji /var/www/html strony będą działać poprawnie. Następnie konfigurujemy wirtualnego hosta.

<VirtualHost *:80>

    ServerAdmin webmaster@station1.example.com
    DocumentRoot /StronyWWW/
    ServerName stronywww.example.com
    ErrorLog logs/stronywww.example.com-error_log
    CustomLog logs/stronywww.example.com-access_log common

        <Directory "/StronyWWW" >

                AllowOverride None
                Order Allow,Deny
                Allow from 192.168.0

        </Directory>

</VirtualHost>

Należy zwrócić uwagę na linie :

ServerName - adres strony pod jaką widoczne będą pliki

<Directory "/lokalizacja plików" > - ścieżka do plików www dla danego wirtualnego hosta

Allow from - określenie kto ma uprawnienia do oglądania stron. 


Należy pamiętać również aby utworzony katalog w tym przypadku /Stronywww posiadał odpowiedni kontekst SELinux.

 system_u:object_r:httpd_sys_content_t:s0 StronyWWW

O odpowiedni kontekst możemy zadbać odwołując się referencyjnie poleceniem chcon :

chcon --reference /var/www/html/ /StronyWWW/

Powyższa konfiguracja umożliwia oglądanie stron z katalogu domyślnego oraz z katalogu /Stronywww pod adresem http://stronywww.example.com (pamiętajmy by dodać odpowiednie wpisy do plików /etc/hosts na maszynach z których będziemy testować działanie). 

Zabezpieczenie dostępu do wirtualnego hosta wykonujemy tak samo jak w domyślnym serwerze czyli ustawiając odpowiednie parametry w dyrektywie <Directory>. 

AllowOverride authconfig

oraz tworząc plik .htaccess w którym dodajemy przykładowy wpisy: 

AuthType Basic
AuthName "Nie masz dostepu do tego pliku bez logowania"
AuthUserFile /Stronywww/.userfile
Require user user01


Utworzenie pliku .userfile 


# htpasswd -cm /Stronywww/.userfile user01
New password:
Re-type new password:
Adding password for user user01

Aplikacje CGI w hostach wirtualnych

Krok 1 - Tworzymy katalog dla własnej aplikacji 

# mkdir /var/www/moje-cgi 

Krok 2 - Ustawiamy właściwy kontekst 

# chcon --reference /var/www/cgi-bin /var/www/moje-cgi

Krok 3 - Tworzymy aplikację i umieszczamy ją w katalogu /var/www/moje-cgi

# vim /var/www/moje-cgi/app.pl 

w pliku app.pl wpisujemy :


#!/usr/bin/perl

print "Content-type: text/html\n\n";

print "Hello, world!\n";

Krok 4 - Nadajemy aplikacji uprawnienia do uruchamiania 

# chmod +x /var/www/moje-cgi/app.pl

Krok 5 - W pliku /etc/httpd/conf/httpd.conf tworzymy wirtualny host dodając wpis : 

<VirtualHost *:80>
    ServerAdmin webmaster@aplikacja.example.com
    DocumentRoot /var/www/moje-cgi
    ServerName aplikacja.example.com
    ErrorLog logs/aplikacja.example.com-error_log
    CustomLog logs/aplikacja.example.com-access_log common

        ScriptAlias /cgi-bin/ /var/www/moje-cgi/

        <Directory "/var/www/moje-cgi/">

                Options +ExecCGI
                AddHandler cgi-script cgi pl

        </Directory>
</VirtualHost>

Szczególną uwagę należy zwrócić na wpisy zawarte pomiędzy znacznikami <Directory></Directory>. Ważne jest by pamiętać o myślniku jaki pojawia się w linii AddHandler cgi-script cgi pl. Bez myślnika podczas restartu usługi http nie zobaczymy żadnego błędu ani informacji o złej składni. Inaczej rzecz się ma jeżeli zabraknie końcowych cgi pl i w takim przypadku zobaczymy błąd.   

Po zapisaniu pliku httpd.conf i restarcie usługi httpd można zobaczyć wynik działania : 

# elinks http://aplikacja.example.com/app.pl

Pamiętając by dodać odpowiedni wpis w pliku /etc/hosts 

192.168.56.101 host1.example.com  strona1.example.com strona2.example.com aplikacja.example.com


Komentarze

Prześlij komentarz

Najczęściej czytane w tym miesiącu

50 popularnych pytań dotyczących systemu Linux zadawanych na rozmowach kwalifikacyjnych. (Pytania & Odpowiedzi)

Jak dodać użytkownika w systemie Windows z poziomu konsoli CMD? (net user, net localgroup)

Generowanie testowych plików o określonej wielkości