InterMatrix

VirtualHost-ok létrehozása, beállítása

Név alapú virtuális hosztok optimális könyvtárszerkezete, működétetése, alapvető biztonsági beállításokkal.

(Frissítve: 2012-01-28 09:12)

VirtualHost-ok létrehozása Linux Apache, PHP, MySQL szerveren

Linux Apache Virtual HostA teszt szerver kialakítása cikk alapján, remélhetőleg egy működő HTTP kiszolgáló rendszert hoztunk létre. A rendszer, ugyan működik, de sok mindenre ebben a formában még nem alkalmas, nehezen kezelhető. Gondoljunk csak bele, ahány honlap, annyi igény és a rendszer biztonságáról sem szabad megfeledkezni.

A következőkben szó lesz arról, hogyan lehet végrehajtani a minimálisan szükséges finomításokat, továbbá, hogyan lehet elérni szerverünket saját gépnév alól, hogyan lehet létrehozni fejlesztés szempontjából is egy optimális könyvtárszerkezetet, hogyan lehet létrehozni név alapú virtuális hosztokat, és azokat működésre bírni, alapvető biztonsági beállításokkal.

Vegyük figyelembe, hogy egy éles rendszernél, sokkal több dologra kell tekintettel lenni az itt leírtaknál! Az alábbi leírás Debian/Ubuntu Linuxra vonatkozik, de átvihető más disztribúcióra is, azonban egyes telepítési könyvtárak, konfigurációs állományok különbözhetnek. A leírás-sorozat helyi sajátosságok, könnyebb kezelhetőség, kockázatok mérséklése miatt sok helyen eltér egy „standard” változattól!

public_html könyvtár létrehozása, beállítása:

  1. A könnyebb kezelhetőség kedvéért létrehozunk egy munka könyvtárat majdani a honlapok számára. (sudo használata nem kell saját könyvtárban. A user helyett, saját bejelentkező/könyvtár nevünket használjuk.):
    ~$ mkdir /home/user/public_html
  2. test.php fájl másolása az új munka könyvtárba:
    # cp /var/www/test.php /home/user/public_html/ 
    A „/var/www” könyvtár a továbbiak szerint szükségtelen, de törlése nem kötelező.

public_html könyvtár feltöltése, beállítása:

  1. Könyvtárak létrehozása (bármilyen ékezet nélküli név lehet) a tesztoldalak elhelyezésére, minden egyes honlap számára (sudo használata saját könyvtárban nem kell):
    ~$ mkdir /home/user/public_html/site1 /home/user/public_html/site2 /home/user/public_html/site3 
  2. Mindhárom új könyvtárba létre kell hozni egy-egy cgi-bin könyvtárat:
    ~$ mkdir /home/user/public_html/cgi-bin /home/user/public_html/site1/cgi-bin /home/user/public_html/site2/cgi-bin /home/user/public_html/site3/cgi-bin
  3. Az site1, site2, site3 könyvtárakat (az egyes honlapok gyökér könyvtárai) fel kell tölteni tartalommal, de legalább egy-egy index.html, vagy index.* fájl mindenképpen kell. Egy egyszerű trükkel pl.: ingyenes tárhelynél, ahol a konfigurációs állományok módosítására csekély lehetőség van, az alkönyvtárak tartalmának listázása is megakadályozható egy benne levő index.* állomány létezésével! Kivétel a cgi-bin könyvtár, ide szerver oldali szkriptek kerülnek, ezt az Apache2 védi. Szolgáltatónál elhelyezett honlapnál érdemes próbát tenni.
  4. Könyvtár jogosultságok beállítása (oktális; hozzáférési jogosultságok helyes formája):
    ~$ chmod -R 0775 /home/user/public_html/site1 /home/user/public_html/site2 /home/user/public_html/site3 
    vagy elég ennyi is:
    ~$ chmod -R 0775 /home/user/public_html
    Ha később dinamikusan szeretnénk létrehozni fájlokat, vagy fájlba írni, 0777 jogosultság szükséges:
    ~$ chmod -R 0777 /home/user/public_html
    Archív állományból való feltöltés esetén, ezt a műveletet újra el kell végezni.
  5. Könyvtár létrehozása log fájloknak (ajánlott rendszergazdaként):
    # mkdir /home/user/szerver_log

localhost konfiguráció:

Megjegyzés: Egyes disztribúciók a hostokra vonatkozó a külön-külön konfigurációs tartalom tárolása helyett, az /etc/apache2/httpd.conf körülményesebben karbantartható állományt részesítik előnybe. A továbbiakban nem lesz rá szükség, átnevezhető vagy törölhető.

  1. localhost konfigurációs fájl szerkesztése:
    # gedit /etc/apache2/sites-available/localhost 
  2. A fájl tartalma (Minden elírásból működésképtelenség következhet!):
    <VirtualHost *:80>
    ServerName localhost
    ServerAdmin opcionális@megadni.hu
    DocumentRoot /home/user/public_html/
    AddDefaultCharset UTF-8
    AddCharset ISO-8859-2  .iso8859-2  .latin2 .cen
    ErrorLog /home/user/szerver_log/localhost.error_log
    CustomLog /home/user/szerver_log/localhost.access_log combined
    
    ### Ezt a részt innen minden host-hoz be kell tenni!!! ###
    HostnameLookups Off
    UseCanonicalName Off
    ServerSignature Off
    # Könyvtár listázás tiltása:
    IndexIgnore *
    
    # szerver hiba:
    ErrorDocument 500 "Szerver hiba, ne piszk&#x00E1;ld!"
    # ErrorDocument 500 "Szerver hiba, ne piszkáld!"
    
    # Tiltott:
    ErrorDocument 403 "Nincs jogosults&#x00E1;god! Ne piszk&#x00E1;ld!"
    # ErrorDocument 403 "Nincs jogosultságod! Ne piszkáld!"
    ### Eddig illeszteni!!! ###
    
    ScriptAlias /cgi-bin/ "/home/user/public_html/cgi-bin/"
    <Directory "/home/user/public_html/cgi-bin">
    	AllowOverride None
    	Options +ExecCGI -Includes
    	Order allow,deny
    	Allow from all
    </Directory>
    <Directory "/home/user/public_html/">
    	Options Indexes FollowSymLinks MultiViews
    	AllowOverride All
    	Order allow,deny
    	Allow from all
    </Directory>
    </VirtualHost>
    
    # phpMyAdmin elérése a http://localhost/phpmyadmin/ címen:
    Alias /phpmyadmin /usr/share/phpmyadmin
  3. Fájl mentése, bezárása.
  4. Alapértelmezett konfigurációs fájl kikapcsolása, ettől a ponttól az egyes szájtok működését kizárólag az alábbiak szerint, egyedileg szerkesztett konfigurációs állományok határozzák meg.:
    # a2dissite default 
  5. Az új konfigurációs fájl bekapcsolása:
    # a2ensite localhost 
  6. Tesztelés:
    # apache2ctl configtest
    Erre a parancsra újra jelezni fogja a domain-név hiányát!
  7. Apache2 újraolvasás:
    # /etc/init.d/apache2 reload

home-host konfiguráció

  1. Gép név megállapítása:
    uname -n
    Az itt megtalált nevet kell alkalmazni a home-host helyett!
  2. home-host konfigurációs fájl szerkesztése:
    # gedit /etc/apache2/sites-available/home-host 
  3. A fájl tartalma:
    <VirtualHost *:80>
    ServerName home-host.home
    ServerAlias home-host
    ServerAdmin opcionális@megadni.hu
    DocumentRoot /home/user/public_html/
    AddDefaultCharset UTF-8
    AddCharset ISO-8859-2  .iso8859-2  .latin2 .cen
    ErrorLog /home/user/szerver_log/home-host.error_log
    CustomLog /home/user/szerver_log/home-host.access_log combined
    
    ### A /etc/apache2/sites-available/localhost fájlból, a kommentek közti részt ide illeszteni! ###
    
    ScriptAlias /cgi-bin/ "/home/user/public_html/cgi-bin/"
    <Directory "/home/user/public_html/cgi-bin">
    	AllowOverride None
    	Options +ExecCGI -Includes
    	Order allow,deny
    	Allow from all
    </Directory>
    <Directory "/home/user/public_html/">
    	Options Indexes FollowSymLinks MultiViews
    	AllowOverride All
    	Order allow,deny
    	Allow from all
    </Directory>
    </VirtualHost>
  4. Fájl mentése, bezárása.
  5. Az új konfigurációs fájl bekapcsolása:
    # a2ensite home-host 
  6. Tesztelés:
    # apache2ctl configtest
    Erre a parancsra újra jelezni fogja a domain-név hiányát!
  7. Apache2 újraolvasás:
    # /etc/init.d/apache2 reload

site1, site2, site3... konfiguráció

  1. site1 konfigurációs fájl szerkesztése:
    # gedit /etc/apache2/sites-available/site1 
  2. A fájl tartalma:
    <VirtualHost *:80>
    ServerName site1.home
    ServerAlias site1
    ServerAdmin opcionális@megadni.hu
    DocumentRoot /home/user/public_html/site1/
    AddDefaultCharset UTF-8
    AddCharset ISO-8859-2  .iso8859-2  .latin2 .cen
    ErrorLog /home/user/szerver_log/site1.error_log
    CustomLog /home/user/szerver_log/site1.access_log combined
    
    ### A /etc/apache2/sites-available/localhost fájlból, a kommentek közti részt ide illeszteni! ###
    
    ScriptAlias /cgi-bin/ "/home/user/public_html/site1/cgi-bin/"
    <Directory "/home/user/public_html/site1/cgi-bin">
    	AllowOverride None
    	Options +ExecCGI -Includes
    	Order allow,deny
    	Allow from all
    </Directory>
    <Directory "/home/user/public_html/site1/">
    	Options Indexes FollowSymLinks MultiViews
    	AllowOverride All
    	Order allow,deny
    	Allow from all
    </Directory>
    </VirtualHost>
  3. Fájl mentése, bezárása.
  4. Az új konfigurációs fájl bekapcsolása:
    # a2ensite site1 
  5. Tesztelés:
    # apache2ctl configtest
    Erre a parancsra újra jelezni fogja a domain-név hiányát!
  6. Apache2 újraolvasás:
    # /etc/init.d/apache2 reload
  7. A site2, site3 és minden további esetén, ez utóbbi eljárást kell megismételni, a kiemelt szövegrész értelemszerű megváltoztatásával.

A lokális domain nevek aktiválása

  1. hosts konfigurációs fájl megnyitása szerkesztésre:
    # gedit /etc/hosts
  2. A fájl tartalmának megváltoztatása:
    127.0.0.1		localhost
    127.0.1.1		home-host.home		home-host
    127.0.2.1		site1.home		site1
    127.0.2.2		site2.home		site2
    127.0.2.3		site3.home		site3
    
    # The following lines are desirable for IPv6 capable hosts
    ::1     	ip6-localhost ip6-loopback
    fe00::0 	ip6-localnet
    ff00::0 	ip6-mcastprefix
    ff02::1 	ip6-allnodes
    ff02::2 	ip6-allrouters
    ff02::3 	ip6-allhosts
  3. Fájl mentése és bezárása. A domain név hiányát többé már nem jelzi.
  4. ports konfigurációs fájl megnyítása ellenőrzésre, szerkesztésre:
    # gedit /etc/apache2/ports.conf
  5. A fájl tartalma:
    # If you just change the port or add more ports here, you will likely also
    # have to change the VirtualHost statement in
    # /etc/apache2/sites-enabled/000-default
    
    NameVirtualHost *:80
    Listen 80
    
    <IfModule mod_ssl.c>
        # SSL name based virtual hosts are not yet supported, therefore no
        # NameVirtualHost statement here
        Listen 443
    </IfModule>
  6. Apache2 újraolvasás:
    # /etc/init.d/apache2 reload

Hosztok elérése, végső próba:

Az eddigi munka sikeressége könnyen ellenőrizhető egy egyszerű index fájl jelenlétével az alap szerver gyökér könyvtárába.

  1. Index fájl létrehozása az alap szerver gyökér könyvtárába:
    ~$ gedit /home/user/public_html/index.html
  2. Az index.html tartalma – ha más nevek voltak beállítva, értelemszerűen kell megváltoztatni:
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <head>
    	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    	<title>VirtualHostok</title>
    </head>
    <html>
    <ul>
    	<li><a href="http://site1">Site1</a></li>
    	<li><a href="http://site2">Site2</a></li>
    	<li><a href="http://site3">Site3</a></li>
    	<!-- A következő három sor külső támadási felületet eredményezhet erős jelszó és biztonsági beállítások hiányában! -->
    	<li><a href="http://home-host/phpmyadmin/">PhpMyAdmin home-hostról</a></li>
    	<li><a href="http://localhost/phpmyadmin/">PhpMyAdmin localhostról</a></li>
    	<li><a href="test.php">Szerver teszt</a></li>
    </ul>
    </html>
  3. Próba: http://localhost, vagy http://home-host

Rewrite modul bekapcsolása a .htaccess számára:

A .htaccess fájl segítségével lehet szabályozni szerver állományokhoz való hozzáféréseket, átirányításokat, hibaüzeneteket, tartalmak jelszavas védelmét. Az Apache2-ben alapból nincs engedélyezve a .htaccess.

  1. Rewrite engedélyezés:
    # a2enmod rewrite
  2. Apache2 újraindítás:
    # /etc/init.d/apache2 restart

A .htaccess fájlt mindig 644 jogosultsággal kell elmenteni. ~NIX rendszereken a ponttal kezdődő fájl rejtett!

PHP hibakeresés:

Eddig még, nem foglalkoztunk semmilyen hibakeresővel. Telepítése szándékosan maradt a végére, így a kész rendszerhez állíthatjuk be. Az Xdebug telepítése és beállítása következik:

  1. Terminálban adjuk ki a következő parancsot:
    # apt-get install php5-dev php-pear
  2. Amint végrehajtódott, jöhet a következő:
    # pecl install xdebug
  3. Megnyitjuk a php.ini fájlt szerkesztésre:
    # gedit /etc/php5/apache2/php.ini
  4. A fájl végéhez adjuk hozzá a következőket, és vigyázzunk a host-névre és ellenőrizzük a kiterjesztés útvonalát:
    [xdebug]
    zend_extension="/usr/lib/php5/20090626+lfs/xdebug.so"
    xdebug.remote_enable=1
    xdebug.remote_host="home-host"
    xdebug.remote_port=9000
    xdebug.remote_mode="req"
    xdebug.remote_handler="dbgp"
    extension="xdebug.so"
  5. Apache2 újraindítás:
    # /etc/init.d/apache2 restart

Tovább » MySQL adatbázisok beállítása phpMyAdmin-nal

Tovább » Az Apache szerver alapvető biztonsága, PHP verzió elrejtése:

LAMP szerver
(Frissítve: 2011-07-03 12:38)
Linux Apache MySQL PHP

A legtöbb tárhelyszolgáltató UNIX (Linux) alapú szervert működtet, éppen ezért érdemes minél jobban megismerni. Jól működő weboldalak elengedhetetlen kelléke, a fejlesztőgépen való tesztelés lehetősége, asztali…

phpMyAdmin
(Frissítve: 2010-04-12 12:07)
phpMyAdmin

A phpMyAdmin, MySQL adatbázisok internetes menedzselésére PHP nyelven írt grafikus felületű eszköz, mely támogatja a leggyakrabban használt adatbázis műveleteket: adatbázisok kezelése, táblázatok, mezők, kapcsolatok, indexek,…

Apache biztonság
(Frissítve: 2011-06-03 08:14)

Amint egy bármilyen számítógép internetes hálózatra kapcsolódik mindig fenn áll a veszélye, hogy valaki(k) adatokat próbálnak megszerezni, vagy még ezen is túl, megszerezni a számítógép irányítását. Példának okáért az…

.htaccess védekezés
(Frissítve: 2011-10-05 22:55)

A webszerverek különböző sorszámú kódokat küldenek a HTTP munkameneteknek, amelyek naplózási adatokból visszakövethetőek és biztonságtechnikailag felhasználhatóak. Egy részük a fellépő hibákra utalnak, míg más részük a…

PHP–MySQL statisztika
(Frissítve: 2012-02-02 13:52)
Operációs rendszerek megoszlása

Bármely web-oldal életképességének sikere megköveteli a folyamatosan változó látogatói tendenciák követését, a kliensektől érkező információk olyan elemzését, amely konstruktívabb következtetések levonására képeznek…

Karakterkódolások
(Frissítve: 2010-06-26 13:40)

Az informatika fejlődése során számos karakterkódolási eljárás primitív elképzelésre épűl, csak részben tudják kielégíteni a különböző nemzetek elvárásait. A változás folyamatát elősegítő technikai követelmények…