szabad szoftver keretrendszer

53
Webes környezet kialakítása szabad szoftverek segítségével Szabad szoftver keretrendszer Készítette a Közigazgatási és Igazságügyi minisztérium E-közigazgatási Szabad Szoftver Kompetencia Köz- pontja, Budapest, 2013 Kódszám: EKOP–1.2.15 – Ez a Mű a Creative Commons Nevezd meg! Így add tovább! 3.0 Unported License feltételeinek megfele- lően szabadon felhasználható. A dokumentum legfrissebb változata letölthető a honlapunkról: http://szabadszoftver.kormany.hu/szabad-szoftver-keretrendszer/

Upload: others

Post on 11-May-2022

8 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Szabad szoftver keretrendszer

Webes környezet kialakítása szabadszoftverek segítségével

Szabad szoftver keretrendszer

Készítette a Közigazgatási és Igazságügyi minisztériumE-közigazgatási Szabad Szoftver Kompetencia Köz-

pontja, Budapest, 2013

Kódszám: EKOP–1.2.15 – Ez a Mű a Creative Commons Nevezdmeg! Így add tovább! 3.0 Unported License feltételeinek megfele-

lően szabadon felhasználható.A dokumentum legfrissebb változata letölthető a honlapunkról:

http://szabadszoftver.kormany.hu/szabad-szoftver-keretrendszer/

Page 2: Szabad szoftver keretrendszer

EKOP-1.2.15-2011-2011-0001 „E-KÖZIGAZGATÁSI SZABAD SZOFTVER

KOMPETENCIA KÖZPONT LÉTREHOZÁSA”CÍMŰ KIEMELT PROJEKT

Tartalomjegyzék

Webszerverek...................................................................................4Apache.......................................................................................4

Az apache2.conf fájl.............................................................6A ports.conf fájl..................................................................12A security fájl.....................................................................13A charset fájl.......................................................................15Az Apache kiterjesztése.....................................................15Egy tartomány kiszolgálásának beállítása..........................17Egy biztonságos tartomány beállítása................................22

Lighttpd....................................................................................24Nginx........................................................................................25

Webszerver üzemeltetéséhez szükséges komponensek.................26PHP..........................................................................................26

A PHP telepítése.................................................................28Phpmyadmin............................................................................34OpenSSL..................................................................................35

FTP megoldások............................................................................36Pure-FTPd................................................................................37Vsftpd ......................................................................................47ProFTPD .................................................................................48SFTP ........................................................................................48

Webstatisztika-készítő szoftverek..................................................50AWStats...................................................................................50Webalizer.................................................................................51Piwik........................................................................................52BBclone....................................................................................53

2

Page 3: Szabad szoftver keretrendszer

Webes környezet kialakítása szabad szoftverek segítségével

Egy átlagos webes kiszolgáló a legtöbb esetben1 egyúgynevezett LAMP2 környezetből áll, amelynek részeiaz operációs rendszer, a webszerver, valamilyen szer-veroldali szerver szkriptnyelv, mint például a PHP és azadatbázis-kezelő. Egész pontosan így kapjuk meg aLAMP rövidítés betűit. A legtöbb statisztikai mérésszerint a Linux+Apache+MySQL+PHP környezet aleginkább elterjedt (lásd az adatbázis fejezetet3). Egyátlagosan feltelepített környezetben tehát a fenti megol-dás segítségével kialakíthatunk dinamikus és statikus,szabad szoftverekkel működtetett oldalakat. Ez a feje-zet segít a webszerverek és a hozzájuk szorosan kap-csolódó szolgáltatások kiválasztásában. Ilyen például azFTP szerver vagy az SFTP szerver, hiszen a legtöbbesetben az oldalak karbantartására ma is ezt a megol-dást használják azok karbantartói, természetesen a szá-mos egyéb lehetőség mellett. Ez a fejezet a webes ki-szolgálás köré csoportosítható eszközöket ismerteti.

1 http://news.netcraft.com/2 http://hu.wikipedia.org/wiki/LAMP_(szoftvercsomag)3 http://szabadszoftver.kormany.hu/szabad-szoftver-

keretrendszer/

3

Page 4: Szabad szoftver keretrendszer

Webes környezet kialakítása szabad szoftverek segítségével

Webszerverek

Apache

Az Apache4 hosszú évek óta a legnépszerűbb5 web-szerver a független kutatások szerint. Az Apache pro-jektet az ASF alapítvány keltette életre, és többek kö-zött6 a webszervert is ők fejlesztik, tartják karban. Azalapítvány védőernyője alatt tevékenykedik számtalanszabad szoftveres programozó, akik az 1999-es indulásóta fejlesztik a webszervert. A kezdetekben a cél azvolt, hogy az NCSA HTTPd7 bővítésén dolgozzanak,majd 1999. június 1-jén hivatalosan is létrejött az ASF.Az Apache egy igen kifinomult, moduláris és rugalma-san bővíthető webszerver, amely kompatibilis aHTTP/1.1 (RFC 2616) protokollal. A projekt nyilvános-ságra bocsátása után dinamikusan fejlődött, és hamar

4 http://www.apache.org/5 http://news.netcraft.com/archives/2013/09/05/september-2013-

web-server-survey.html6 http://projects.apache.org/7 http://hu.wikipedia.org/wiki/NCSA_HTTPd

4

Page 5: Szabad szoftver keretrendszer

Webszerverek

valós alternatívát kínált az akkor előnyös pozícióban lé-vő Netscape Communications Corporation webszerver-rel szemben. Azóta is folyamatosan fejlődik, és gyakor-latilag uralja a piacot. Moduláris felépítésének köszön-hetően mi magunk dönthetünk arról, hogy az alap tele-pítés után milyen funkciókat akarunk használni, példáulaz SSL vagy a mode_rewrite modult. Megfelelő hard-vertámogatás mellett jól skálázható, kis- és nagyvállala-ti megoldásokra is. A legtöbb szkriptnyelvet támogatja,mint a PHP8, Perl9, Python10, Ruby on Rails11. Több ke-reskedelmi cég felhasználja az Apache-ot termékeiben:Oracle, IBM WebSphere, OSX beépített webszerver-ként. Számos router, gateway, NAS megoldás szervesrésze. Teheti mindezt a nagyon is megengedő ApacheSzoftver Licenc miatt. Telepítése Ubuntu LTS alatt isigen egyszerű, az:apt-get install apache2

parancs kiadásával az alap függőségek kezelése mellettfog települni a webszerver. Gyakorlatilag a parancs le-

8 http://www.php.net/9 http://www.perl.org/

10 http://www.python.org/11 http://rubyonrails.org/

5

Page 6: Szabad szoftver keretrendszer

Webes környezet kialakítása szabad szoftverek segítségével

futtatása után van egy teljesen alap szinten működőweb szerverünk, amely létrehozza a /var/www könyv-tárban az alap „It works!” oldalt, és innentől kezdve awebszerver alap beállítások szerint a 80-as porton fo-gadja a kéréseket. Mint oly sok hálózati kiszolgálószolgáltatást, az Apache-ot sem érdemes alapbeállítá-sokkal használni, hiszen egyrészt nem túl biztonságos,valamint jellemzően több tartományt vagy oldalt szol-gál ki az Apache, így mindenféleképpen nézzük meg,milyen beállításokat érdemes átállítanunk. A konfigurá-ciós fájlok az /etc/apache2/ könyvtárban találhatóak.apache2.conf httpd.conf mods-enabled/

sites-enabled/ conf.d/ magic ports.conf ssl/ envvars mods-available/ sites-available/

Az apache2.conf fájl

Az ismerkedést kezdjük az apache2.conf fájllal,amelyben a legfontosabb központi paraméterek12 meg-találhatóak, itt paraméterezhetünk az Apache alapvetőviselkedésével kapcsolatban sok mindent, valamint iga-

12 http://httpd.apache.org/docs/current/mod/core.html

6

Page 7: Szabad szoftver keretrendszer

Webszerverek

zából ide van belinkelve a többi konfigurációs fájl is,azaz az Apache innen olvassa be például a mods/site-enabled konfigokat is. Nézzük, mihez érdemes hozzá-nyúlni és miért:Timeout 300

Másodpercben kifejezve megmondjuk, hogy azApache mennyi időt várjon mielőtt Timeout hibával le-zárja a kapcsolatot. Főként nagy forgalmú, vagy I/Oterhelt szerverek esetében lehet ez érdekes. Alapbeállí-táson célszerű hagyni, illetve ha szükséges változtatni(általában lefele irányban, azaz némileg csökkenteni)akkor minden esetben tesztelni érdemes, hogy az adottterheltség és az adott kiszolgálási stílus mellett szá-munkra mi a megfelelő: nem mindegy, hogy egy nagyterhelésű fórum szervert paraméterezünk, vagy egy 200MB-os letöltőközpontot.KeepAlive OnMaxKeepAliveRequests 100KeepAliveTimeout 5

Ezen 3 paraméter segítségével állítható be, hogy aszerver egy TCP kapcsolat nyitva tartása mellett többkérést is kiszolgál. Ilyen eset, amikor egy oldalon sokkép van, és az Apache ilyen beállítások mellett csak

7

Page 8: Szabad szoftver keretrendszer

Webes környezet kialakítása szabad szoftverek segítségével

egy TCP kapcsolatot használ fel arra, hogy esetleg azösszes adatot a kliens felé továbbítsa. Az értékeket ez-redmásodpercben tudjuk megadni. Megint csak: nagyterhelés esetén az oldal felépítése és a felhasználók szo-kásai alapján érdemes próbálkozni a ki/be kapcsolásá-val, és Munin segítségével folyamatosan monitorozni avégeredményt.<IfModule mpm_prefork_module>

StartServers 5 MinSpareServers 5 MaxSpareServers 10 MaxClients 150 MaxRequestsPerChild 0</IfModule>

Alap telepítés szerint az mpm_prefork_module-thasználjuk, hiszen a libapache2-mod-php5 kiterjesztésezzel kompatibilis. Amit érdemes tudni róla, hogy eb-ben az esetben a kéréseket egy szál szolgálja ki, és amemóriaigénye is magasabb a workerhez13 képest.Beállítása és üzemben tartása átlagos esetben egy-szerűbb, és javasolt is a prefork+libapache2-mod-phpesetén. Érdemes tudni róla, hogy ha mégis a workert

13 http://httpd.apache.org/docs/2.2/mod/worker.html

8

Page 9: Szabad szoftver keretrendszer

Webszerverek

akarnánk választani, akkor lehetőségünk lenne amod_fcgi-vel PHP-futtatásra. Nézzük a paramétereket:

StartServers: meghatározza, hogy az Apache indu-lásakor hány szerverfolyamat induljon el. Általában ér-demes az alapértelmezett beállításon hagyni, azaz 5-ön.

MinSpareServers, MaxSpareServers: a minimum ésmaximum SpareServer opciókkal szabályozhatjuk,hogy hány tartalék kiszolgáló fusson a háttérben, ame-lyek a várakoznak az új csatlakozók kiszolgálására. Ígyha a szabad folyamatok száma eléri a MaxSpareSer-vers értéket, akkor az Apache le fogja kapcsolni a fe-leslegesen futó folyamatokat.

MaxClients: meghatározhatjuk, hogy mennyi klienstszolgáljon ki az Apache egy időben maximum. Tipiku-san ha egy kliensnek sokat kell várakozni az oldal be-töltéséig, akkor vélhetőleg ez a szám túl alacsony.

MaxRequestsPerChild: ezzel szabályozzuk, hogyegy gyermek folyamat összesen mennyi kérést szol-gálhat ki. Alapértéke nulla, de néha – főleg memória-szivárgás esetén – érdemes ezt az értéket terheléstőlfüggően 5000-10000 közé állítani, de csak teszt jelleg-gel.AccessFileName .htaccess

9

Page 10: Szabad szoftver keretrendszer

Webes környezet kialakítása szabad szoftverek segítségével

<Files ~ "^\.ht"> Order allow,deny Deny from all Satisfy all</Files>

Rögzítjük, hogy a .htaccess fájlt hogyan ismerje fel aszerver, valamint megmondjuk, hogy a .htaccess és a.htpasswd fájlok kliensek által való lekérhetőségét aka-dályozzuk meg. A .htpasswd fájlokat amúgy sem prak-tikus publikus könyvtárba elhelyezni, de erről későbbmég bővebben értekezünk.HostnameLookups Off

A direktíva segítségével megmondhatjuk, hogy a kli-ensek IP-címének rögzítését hogyan akarjuk látni anaplóban. Paraméterei: On|Off|Double. ON esetén azIP-hez kapcsolódó reverse érték is rögzítve lesz. Érde-mes azonban figyelembe venni, hogy akár már egy kislátogatottságú weboldalon is rengeteg nslookup-oteredményezhet, azaz nem véletlen, hogy az alapértel-mezett paramétere az OFF.ErrorLog ${APACHE_LOG_DIR}/error.log

LogLevel warnLogFormat "%v:%p %h %l %u %t \"%r\" %>s %O\"%{Referer}i\" \"%{User-Agent}i\""

10

Page 11: Szabad szoftver keretrendszer

Webszerverek

vhost_combinedLogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combinedLogFormat "%h %l %u %t \"%r\" %>s %O" commonLogFormat "%{Referer}i -> %U" refererLogFormat "%{User-agent}i" agent

Itt határozzuk meg a naplózással kapcsolatos formaiés fájl igényeinket. Azaz, hol legyen a központi error.-log. Ebbe a fájlba fogja rögzíteni az Apache a működé-se során fellépő hibákat, ide fognak kerülni (ha máskéntnem rendelkezünk) a PHP-ból eredő hibák, illetve anem létező fájlok és egyéb természetű hibák. Ezért cél-szerű oldalanként definiálni egy error.log fájlt. A többiparaméter segítségével pedig a látogatói kliensekrőlmegszerezhető információk rögzítési formátumát állít-juk be. Mivel alapesetben a felhasználók gépei és bön-gészői túlságosan közlékenyek (User Agent14), ezért hanincs szükségünk minden információra, itt tudjuk szű-kíteni a kívánt információhalmazt.Include ports.conf

14 http://hu.wikipedia.org/wiki/User_agent

11

Page 12: Szabad szoftver keretrendszer

Webes környezet kialakítása szabad szoftverek segítségével

Itt történik a fejezet elején felsorolt konfigurációsfájlok meghívása, azaz gyakorlatilag ezek is azapache2.conf részét képezik, csak egy strukturált mó-don.

A ports.conf fájl

A következő konfigurációs fájl tehát a ports.conf,amelyben azt rögzítjük, hogy a webszerver milyen IP-címeken és milyen portokon hallgasson a világ felé:NameVirtualHost *:80NameVirtualHost *:443

Jellemzően egy webszerver nem csak egy tarto-mányt szolgál ki, hanem többet. Ebben az esetben bekell kapcsolnunk a NameVirtualHost direktívát, amelyazonban a 2.3.11-es verzió óta szükségtelenné vált, mi-vel már az Apache úgy értelmezi, hogy bármelyik IPvagy port több tartományt szolgál ki. Itt jelenleg azértszerepel, mivel a jelenleg használatos Ubuntu LTS ver-zióban még kötelező direktíva.Listen 80<IfModule mod_ssl.c>

Listen 443</IfModule>

12

Page 13: Szabad szoftver keretrendszer

Webszerverek

Ezzel megmondjuk a webszervernek, hogy a stan-dard 80-as és 443-as portokon működjön. A 80-as porttermészetesen az alap, a 443-ashoz viszont SSL tanúsít-ványt kell készíteni és be is kell konfigurálni az Apacheszámára, amelyet később teszünk meg, ezért van felté-telek között. Azaz ha az SSL modult bekapcsoltuk, ak-kor a Listen paraméter is élni fog, ha nem akkor termé-szetesen nem. Megadható még így is:Listen 192.168.1.1:80

A security fájl

A következő fájl, amelyet az Apache az/etc/apache2/conf.d-ből olvas fel a security. Nevébőladódóan a biztonsági beállítások egy jó részét tartal-mazza:ServerTokens Prod (Full | OS | Minimal |

Minor | Major | Prod)

Meghatározza, hogy a webszerver milyen fejlécetadjon vissza a kliensek felé. Értelemszerűen itt is igazaz, hogy ha nem tesztelés jelleggel szükséges a teljesinformáció visszaadása, akkor a lehető legkevesebbetkell magunkról elárulnunk, azaz érdemes Prod-ra állíta-

13

Page 14: Szabad szoftver keretrendszer

Webes környezet kialakítása szabad szoftverek segítségével

ni az értéket, amely így csak a Product értéket fogja el-árulni, azaz Apache lesz.

Nézzük meg mi történik, ha Full értéken van:telnet localhost 80

Trying 127.0.0.1...Connected to localhost.Escape character is '^]'.HEAD // HTTP/1.0 \n\n

HTTP/1.1 401 Authorization RequiredDate: Mon, 13 May 2013 11:01:07 GMTServer: Apache/2.2.22 (Ubuntu) mod_ssl/2.2.22 OpenSSL/1.0.1WWW-Authenticate: Basic realm="ByPassword"Vary: Accept-EncodingConnection: closeContent-Type: text/html; charset=iso-8859-1

Connection closed by foreign host.ServerSignature Off

Bekapcsolva (jellemzően hiba esetén van így) ver-zió- és egyén-szenzitív információt (signature) szolgál-tat, természetesen nem hibakereső üzemmódban ezt isérdemes kikapcsolva tartani, főként biztonsági megfon-tolásból.

14

Page 15: Szabad szoftver keretrendszer

Webszerverek

TraceEnable Off

Főként teszt és diagnosztikai esetekben érdemes be-kapcsolva tartani.

A charset fájl

Ugyancsak a conf.d/ alatt található a charset fájl,amely ma már igen egyszerű, hiszen jellemzően UTF-8kódolás támogatásával dolgozunk:AddDefaultCharset UTF-8

Itt azonban szükség esetén megadható egyéb kódo-lás külön támogatása is.

Az Apache kiterjesztése

A következő fontosabb lépés az Apache kiterjesztésilehetőségeinek megismerése, azaz a hozzá kapcsolhatómodulszerkezet, illetve azok ki-be kapcsolása. Ha pél-dául PHP-t telepítünk a rendszerre – mint ahogy azt afejezet vége felé a PHP részletezésénél fogunk is – azUbuntu telepítőrendszere, miután feltelepítette a szük-séges függőségeket, köztük az apache2 modult is, az/etc/apache2/mods-available alá fogja elhelyezni a PHPmodulfájl helyét és a betöltéshez szükséges konfigurá-ciót tartalmazó fájlt, amely így fog kinézni:

15

Page 16: Szabad szoftver keretrendszer

Webes környezet kialakítása szabad szoftverek segítségével

cat /etc/apache2/mods-available/php5.load LoadModule php5_module /usr/lib/apache2/modules/libphp5.so

cat /etc/apache2/mods-available/php5.conf <IfModule mod_php5.c> <FilesMatch "\.ph(p3?|tml)$"> SetHandler application/x-httpd-php </FilesMatch> <FilesMatch "\.phps$"> SetHandler application/x-httpd-php-source </FilesMatch> # To re-enable php in user directoriescomment the following lines # (from <IfModule ...> to </IfModule>.) Do NOT set it to On as it # prevents .htaccess files from disabling it. <IfModule mod_userdir.c> <Directory /home/*/public_html> php_admin_value engine Off </Directory> </IfModule></IfModule>

A PHP-vel nincs teendőnk, hiszen azt majd a telepí-tőrendszer elintézi, azonban az /etc/apache2/mods-avai-

16

Page 17: Szabad szoftver keretrendszer

Webszerverek

lable könyvtárban van sok olyan modul, amely telepítvevan, működésre kész, de jelenleg nem használja a web-szerver. Az egyik ilyen például az SSL, amelyet egy-szerűen az Apache számára használhatóvá tehetünk,csak létre kell hoznunk egy szimbolikus linket az/etc/apache2/mods-enabled/ssl.load ->/etc/apache2/mods-available/ssl.load között, azaz amods-enabled alá linkeljük a modes-available/ alatt lé-vő ssl.log és ssl.conf fájlokat, majd az apache2ctl con-figtest és az apache2ctl restart parancsok segítségévelérvényesítjük. A ports.conf-ban rögzítettek szerint ígymár fel fogja ismerni az Apache, hogy az SSL modul bevan töltve. Az SSL további konfigurációját pedig a nor-mál Virtualhost konfigurálás után részletezzük.

Egy tartomány kiszolgálásának beállítása

Nézzük, hogyan tudunk bekonfigurálni egy www.is-kola.hu és iskola.hu tartományt. Első lépésben szüksé-ges, hogy a DNS szerverünkben beállítsuk (vagy kérjükannak karbantartójától, hogy a www.iskola.hu a szerve-rünk IP-címére mutasson – „A” rekord), valamint cél-szerű az Origin (@)-t, azaz az iskola.hu (www nélküli)címet ugyanerre az IP-re irányítani. Ha ezzel megva-gyunk, akkor az /etc/apache2/sites-available könyvtárba

17

Page 18: Szabad szoftver keretrendszer

Webes környezet kialakítása szabad szoftverek segítségével

helyezzük el a soron következő virtualhost leírófájlját.Ha ez lesz az első, akkor célszerű (a nullás foglalt, azaz alapértelmezett) a 001-iskola.hu nevet adni neki. Azegyszerűség kedvéért, mivel itt egyszerre értelmezhetőa konfiguráció, minden sor után #-tel kezdve olvashatóa magyarázat, értelemszerűen ezeket nem kell a végle-ges fájlba másolni:<VirtualHost *:80>

#Itt határozzuk meg, hogy milyen IP-címekre és portokra vonatkozzon ez a virtualhost. Mi most a csillag karaktert használtuk, hogy ne okozzon gondot, ha a gépnek több IP-címe van, vagy le kell cserélni. Megadhatunk IP-címet is, például: <VirtualHost 192.168.1.1:80>

ServerAdmin [email protected]#Meghatározzuk a virtualhost által hirdetett rendszergazdai címet

ServerName www.iskola.huServerAlias iskola.hu

#A ServerName direktíva mondja meg, hogy milyen DNS névre hallgat majd, a ServerAlias-hoz pedig felvehetjük a szükséges többit, jelen esetben a www

18

Page 19: Szabad szoftver keretrendszer

Webszerverek

nélküli címet, de lehetne itt a mail.iskola.hu is.

DocumentRoot /var/www/iskola/#A DocumentRoot direktívával meghatározzuk, hogy honnan kezdődik a virtualhost nyilvános könyvtárszerkezete. Ide rakjuk az index.html, index.php stb. fájljainkat.

<Directory />Options FollowSymLinks IndexesAllowOverride AuthConfig All</Directory>#Az adott könyvtárra meghatározzuk az

Options15 segítségével, hogy ha nincs index.html vagy index.php fájl az adott könyvtárban, akkor kilistázza-e a könyvtárfájljait (Indexes opció), illetve beállítjuk, hogy kövesse a szimbolikus linkeket. Majd az AllowOverride opcióval lehetővé tesszük, hogy ha .htaccess fájl található egy könyvtárban, akkor az abban lévő paramétereket figyelembe vegye, mintha csak például az Options-ök között szerepelt volna. Ez a paraméter barátunk és ellenségünk is lehet. Fontos, hogy akkor engedjük All opciókkal, ha erre a

15 http://httpd.apache.org/docs/current/mod/core.html#options

19

Page 20: Szabad szoftver keretrendszer

Webes környezet kialakítása szabad szoftverek segítségével

PHP programozóknak egyedileg szükségük vanés megbízunk bennük, minden más esetben érdemes virtualhostonként és könyvtáranként egyénileg szabályozni, engedni vagy tiltani bizonyos opciókat. AzAuthConfig opcióval pedig a .htaccess-ből megvalósított felhasználó/jelszó bekérésétengedélyezzük.

<Directory /var/www/>Options FollowSymLinks MultiViewsAllowOverride Authconfig Order allow,denyallow from all

</Directory>#Mint látható a /var/www könyvtárra, amely a

DocumentRoot alatt helyezkedik el, részbeneltérő hozzáférési beállításokat eszközöltünk. Tiltottuk az Indexes beállítást, azaz nem engedjük a listázást,illetve hiányzik az All paraméter, azaz ott már nem dönthet a .htaccess-ben utólagbeállított felülíró paraméter. Az egészre akkor lehet szükség például, ha a weboldalunknak szüksége lehet a DocumentRoot-on kívülről írni vagy olvasni, ilyen eset amikor 2 oldal egy szerveren részben közös PHP kódot használ,vagy csak biztonsági okokból elkülönítünk

20

Page 21: Szabad szoftver keretrendszer

Webszerverek

bizonyos dolgokat a DocumentRoot-tól szeparálva.

ErrorLog ${APACHE_LOG_DIR}/error.logLogLevel warnCustomLog ${APACHE_LOG_DIR}/iskola.hu-access.log combined

#A korábban már tárgyalt naplózási lehetőségeket rögzítjük, azaz hol legyen asite error.log fájlja, milyen részletesen legyen a napló, illetve a sima hozzáférésinapló hol tárolódjon.

</VirtualHost>#itt ér véget a virtualhostunk.

Ha elmentettük, akkor következő lépésként be kelllinkelnünk most létrehozott fájlt a sites-enabled könyv-tárba, hogy az Apache tudja, most már használnia kell:ln -s /etc/apache2/sites-available/001-iskola.hu/etc/apache2/sites-enabled/001-iskola.hu

Majd futtassuk le a tesztet, hogy nem írtunk-e el va-lamit, vagy véletlenül nem hagytunk ki esetleg egy le-záró </Virtualhost> címkét:sudo apache2ctl configtest

Ha a válasz a következő:Syntax OK

21

Page 22: Szabad szoftver keretrendszer

Webes környezet kialakítása szabad szoftverek segítségével

Akkor minden rendben van, ebben az esetben kiad-hatjuk a sudo apache2ctl restart parancsot. Ha az is hibanélkül futott le, akkor az iskola.hu és a www.iskola.hutartományokat is ki fogja szolgálni az így beállítottApache.

Egy biztonságos tartomány beállítása

Nézzük, mi a teendő, ha HTTPS alatt szeretnénk azugyancsak a példában szereplő www.iskola.hu és isko-la.hu oldalakat konfigurálni, értelemszerűen itt mostcsak az előző normál 80-as porton működő Apache-hozviszonyított különbséget fogjuk taglalni. Azt tehát márbeállítottuk korábban, hogy a mods-enabled könyvtárbabe legyen linkelve az SSL config és load fájl is, vala-mint az Apache port szinten is tudja, hogy ha a modulbe van töltve, akkor a 443-as porton szükséges figyel-nie, azért másoljuk az iskola.hu konfigurációs fájljátegy új fájlba, amelyet hívhatunk /etc/apache2/sites-ava-ilable/002-iskola.huSSL-nek. A következő változtatáso-kat eszközöljük:A Virtualhost direktíva értelemszerűen ne 80-as hanem

443-as legyen:<VirtualHost *:443>

22

Page 23: Szabad szoftver keretrendszer

Webszerverek

A szerver név és alias meghatározás után, de még aDocumentRoot előtt a következő sorokat helyezzük el:SSLEngine on

SSLCertificateFile /etc/apache2/ssl/iskoal.hu.crtSSLCertificateKeyFile /etc/apache2/ssl/iskola.hu.private.key

Értelemszerűen előtte az SSL fejezetben (a fejezetjelenleg készítés alatt van, amint elkészülünk a webol-dalunkon megtalálható lesz) leírtak szerint készítsük ela kulcspárokat. Ezek után ne felejtsük belinkelni a simaiskola.hu-hoz hasonlóan az iskola.huSSL fájlt ugyan-úgy a sites-enabled könyvtárba, majd azapache2ctl configtest

parancs futtatásával győződjünk meg róla, hogy semmitnem írtunk el, és csak ezek után indítsuk újra azApache-ot, amelyet ezúttal az SSL konfiguráció bővü-lése miatt egy teljes értékű restart kiadásával érdemesmegejteni:service apache2 restart

Ha mindent jól csináltunk, és az error.log fájlban sincs je-lezve semmi hiba, akkor a 443-as porton a https://www.is-kola.hu oldalon meg fog jelenni pontosan ugyanaz a tarta-

23

Page 24: Szabad szoftver keretrendszer

Webes környezet kialakítása szabad szoftverek segítségével

lom, mint a sima iskola.hu oldalon. Mivel a HTTP és aHTTPS virtualhost konfigurációja nem egy fájlba lett bele-rakva, ezért figyeljünk oda arra, hogy később amikor változ-tatni kell a HTTP konfiguráción, akár egy PHP-beállítást,akár egy log vagy Directory bejegyzést, akkor ezt a HTTPSfájlba is vezessük át.

Lighttpd

A Lighttpd16 egy kicsi és rendkívül gyors alternatívwebszerver motor. A fejlesztését 2003-ban teljesen azalap koncepció lefektetésével kezdték, a C10K17 prob-léma köré építve. Fő jellemzője, hogy kifejezetten biz-tonságos és rendkívül gyors, az erőforrásokat teljesmértékben kíméli, így például egy statikus tartalom ki-szolgálásához jóval kevesebb RAM- és processzorka-pacitást igényel. A mostanában igen elterjedt bérelhetőVPS18 megoldásokban gyakran használják, a szűköserőforrások optimális kihasználása érdekében. Támo-gatja a FastCGI, CGI, Auth, Output-Compression,URL-Rewriting, SSL opciókat és még számos más

16 http://www.lighttpd.net/17 http://en.wikipedia.org/wiki/C10k_problem18 http://en.wikipedia.org/wiki/Virtual_private_server

24

Page 25: Szabad szoftver keretrendszer

Webszerverek

megoldást is. Sok esetben használják kirakat webszer-vernek, azaz felépítenek egy LAMP környezetet, amelycsak a dinamikus tartalmat szolgálja és a statikus tartal-mat egyfajta terheléscsökkentő pajzsként ugyanezen agépen a Lighttpd veszi át. De ugyanezt a megoldásthasználják fordítva is, vagy csak képek kiszolgálására.Jelenleg olyan oldalak használják kiszolgálásra mint aYouTube, Wikipedia vagy a meebo.

Nginx

A Nginx19 elveiben nagyon hasonló a Lighttpd-hez.2004-ben Igor Sziszojev, egy orosz rendszer- és szoft-vermérnök publikálta az első verziót belőle. Elképesztőterhelhetőség jellemzi, pontosan ugyanazon szempon-tok mentén, mint a Lighttpd-t. Felépítése moduláris, éselképesztően sok funkciót támogat20. Felhasználása na-gyon hasonló a Lighttpd-éhez, főként cache proxy ésterheléselosztó funkciókat valósítanak meg vele. Gya-kori felhasználás, hogy a statikus képeket kiszervezikegy külön Nginx szerver alá, ezzel sokszorozva meg a

19 http://nginx.org/20 http://nginx.org/en/docs/

25

Page 26: Szabad szoftver keretrendszer

Webes környezet kialakítása szabad szoftverek segítségével

hardver lehetőségeit. A szakmai fórumok tele vannakajánlásokkal és gyakorlati tapasztalatokkal, hogy mi-lyen feladatra melyik szervert érdemes és lehet használ-ni. Mindenképpen érdemes átolvasni21 ezeket egy bo-nyolultabb rendszer esetén, mert nem egyértelmű, hogyhosszú távon melyik a jobb. Jelenleg a Nginx a világmásodik legtöbbet futtatott webszervere (a saját doku-mentációja szerint).

Webszerver üzemeltetéséhez

szükséges komponensek

PHP

A PHP22 (Personal Home Page Tools) egy szerveroldali szkriptnyelv, amely egyike az első olyan szkript-nyelveknek, amelyet HTML kódba lehet ágyazni külsőfájl használata helyett. A webszerverhez kapcsolódó

21 http://www.wikivs.com/wiki/Lighttpd_vs_nginx22 http://www.php.net/

26

Page 27: Szabad szoftver keretrendszer

Webszerver üzemeltetéséhez szükséges komponensek

modulként egy PHP-feldolgozó értelmezi a kódot. Azévek során akkora felhasználói és fejlesztői bázisra ta-lált, hogy Rasmus Lerdorf az alkotója a The PHP Gro-up23-ra bízta a PHP-t. Mára a legelterjedtebb szkript-nyelv lett, amely messze a legtöbb lehetőséget támogat-ja modulrendszerével, mint például adatbázis-kezelésszámtalan változata, képmanipuláció, cache lehetősé-gek, távoli szerver kapcsolatok stb. A kezdetekben csakegy szkript gyűjtemény volt, de mára iparági standardlett, amelyet számtalan területen használnak fel. A kez-deti „Personal Home Page Tools” megnevezést megvál-toztatták, és ma már a PHP: Hypertext Preprocessor el-nevezést használják. Lehetőség van nem csak webszer-veren keresztüli használatára, hanem kiszolgáló oldaliparancssori munkára is, ezzel nagyrészt átvéve az előtteegyeduralkodó shell és Perl szkriptes megoldásokat, hi-szen ugyan úgy crontab-ból24 is ütemezhető a PHP. APHP biztonsága híresen kétes, pedig főként nem a PHP-t fejlesztők által elkövetett tervezési hibák jellemzőek,hanem inkább a PHP-t használó fejlesztők nem tartjákbe a megfelelő direktívákat, és alapvető biztonsági sza-

23 http://hu1.php.net/manual/en/history.php.php24 http://en.wikipedia.org/wiki/Cron

27

Page 28: Szabad szoftver keretrendszer

Webes környezet kialakítása szabad szoftverek segítségével

bályokat (bevitelkezelés stb.). Sokáig a PHP beépítettlehetősége volt a safe_mode és a köré csoportosulóegyéb függvények. Sajnos vagy szerencsére az 5.3-asverzió kiadásával ezek kivezetése fokozatosan megkez-dődött, így az üzemeltetőknek és a programozóknakkell más megoldások után nézni. A safe_mode megol-dás egyébként egy igen kötött programozói viselkedéstkövetelt meg, viszont nagyobb látszólagos biztonságotnyújtott, mint amilyen az a valóságban volt.

A PHP telepítése

Telepítése igen egyszerű, ugyanakkor sokan nemfordítanak elég figyelmet a telepítés utáni részletes be-állítására, az Apache-csal való összehangolásra. Ugyan-is alapbeállításokkal a PHP igen megengedő üzemmód-ban fut, amelyen érdemes szigorítani. Az alapszintű te-lepítése tehát Ubuntu LTS rendszeren:apt-get install libapache2-mod-php5 php5

A php5 ezzel automatikusan települ, és a telepítő-rendszer be is linkeli a PHP moduljait az Apache meg-felelő könyvtárába, majd újra is indítja az Apache-ot,azaz a telepítés után a PHP rendszer működőképes. Ek-kor kell elkezdenünk a finomhangolást:

28

Page 29: Szabad szoftver keretrendszer

Webszerver üzemeltetéséhez szükséges komponensek

A PHP Apache-hoz kapcsolódó beállításait az/etc/php5/apache2/php.ini fájlban találhatjuk, a fonto-sabb beállítások, amelyeket érdemes módosítani a tele-pítés után:engine = On

Ezzel ki-be kapcsolhatjuk globális szinten a PHP-t.Ezt megtehetjük virtualhostonként is az Apache-ból,úgy hogy abba a virtualhostba, amelyben le szeretnénktiltani a PHP-t, beírjuk a következőt: php_flag engineoff

Ennek főként akkor van jelentősége, ha egy webhe-lyet átmenetileg karbantartó üzemmódba teszünk, pél-dául egy nagyobb átállás időtartamára azt akarjuk, hogya látogatók egy index.html-ből tudomást szerezzenekróla, hogy az átállás meddig fog tartani, de ne érjék el akönyvjelzőzött direkt linkeken a PHP tartalmat. safe_mode =Off

A Safe Mode egy remek próbálkozás arra, hogy rá-kényszerítse a programozókat a játékszabályok betartá-sára. Sajnálatosan azonban a PHP 5.2-es változatátólmár nem támogatott, de még részben használható. Ter-mészetesen a Safe Mode nem kínált jó megoldást a biz-tonsági hibás kódokra és részben olyan érzetet kellett az

29

Page 30: Szabad szoftver keretrendszer

Webes környezet kialakítása szabad szoftverek segítségével

üzemeltetőkben, hogy a PHP-n keresztül az esetlegestámadók nem tudnak majd kitörni a Document-Root-ból. Azaz sok esetben illúzió volt, de sok esetbenegy fajta alternatíva volt arra az esetre, ha egy webszer-veren eltérő tulajdonosú, vagy fejlesztőjű oldalak futot-tak. Ilyenkor egy bizonyos szeparációs biztonságot je-lentett az üzemeltetőnek és igen nagy kötöttséget a fej-lesztőknek. Mivel használata a továbbiakban nem taná-csos, itt eltekintünk a részletezésétől25.disable_functions = pcntl_alarm,pcntl_fork,pcntl_wait-pid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwait-info,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority

A disable_functions egy remek változó arra az eshe-tőségre, ha szeretnénk tiltani számos programozók általkedvelt, de általunk nem szükségesnek vélt (vagy éppenbiztonsági megfontolásból) funkciót. Erre remek példalehet a phpinfo26 függvény, amely sok esetben a fejlesz-

25 http://php.net/manual/en/features.safe-mode.php26 http://php.net/manual/en/function.phpinfo.php

30

Page 31: Szabad szoftver keretrendszer

Webszerver üzemeltetéséhez szükséges komponensek

téshez elengedhetetlen, de véletlen hanyagságból kintfelejtett phpinfo kimenete gyakorlatilag a szerver ösz-szes lényeges és támadható paraméterét kiszolgáltatja,azaz érdemes a fejlesztési szakaszt követően tiltani. Adisable_classes is hasonló opció.expose_php = Off

Nagyon hasonló az Apache-nál már alkalmazott be-állításhoz, azaz a HTTP Header-ben megjelenő tényle-ges PHP fő- és alverziót lehet vele elrejteni. Alapvetőenérdemes Off értéket megadni.max_execution_time = 30

Meghatározhatjuk, hogy minden egyes PHP folya-mat maximum mennyi időt futhat, mielőtt az elemző ki-lövi. Sok esetben a 30 másodperc kevés szokott lenni,ezért érdemes a saját igényeinkhez igazítani, de figyel-ve arra, hogy maximum annyit adjunk, amennyi tényle-gesen szükséges.max_input_time = 60

Az előző opcióhoz hasonlóan másodpercben hatá-rozzuk meg, hogy az INPUT meddig tarthat.memory_limit = 128M

Ezzel meghatározzuk, hogy a PHP folyamatokmennyi tényleges memóriát fogyaszthatnak a rendsze-

31

Page 32: Szabad szoftver keretrendszer

Webes környezet kialakítása szabad szoftverek segítségével

rünkön. Sok esetben a 128MB kevés, szintén kis lép-csőkben emeljük, és arra a tényleges maximumra amimég éppen elég, de a rendszert sem lehet kikészítenimég vele. A jó beállításhoz a Munin grafikonjait és atop, htop parancsokat is segítségül hívhatjuk.error_reporting = E_ALL & ~E_NOTICE

Ezzel meghatározhatjuk, hogy a hibanaplózás mi-lyen szinteken legyen bekapcsolva. Fejlesztési időszak-ban az alap beállítást érdemes meghagyni, később pedigszigorítani27 kell rajta, mivel túl sok információt árulha-tunk el így egy esetleges támadó számára.display_errors = Off

Ezzel engedhetjük vagy tilthatjuk, hogy a felhaszná-ló a PHP szkript által okozott hibát megjelenítheti-e.Megint csak fejlesztési szakaszban, amikor az oldalnem publikus (például jelszóval védett), akkor érdemesbekapcsolva tartani, de később kikapcsolni és inkábbnaplófájlba terelni az ilyen üzeneteket.log_errors = On

Ennek használatával megmondhatjuk, hogy az er-ror.log-ban szeretnénk inkább látni a PHP szkriptek hi-baüzeneteit.

27 http://php.net/manual/en/function.error-reporting.php

32

Page 33: Szabad szoftver keretrendszer

Webszerver üzemeltetéséhez szükséges komponensek

file_uploads = Onupload_max_filesize = 20M

Ezekkel a beállításokkal engedhetjük vagy tilthatjuka fájlfeltöltéseket PHP-n keresztül, valamint meghatá-rozhatjuk azok maximális méretét. Érdemes összehan-golni a max_execution_time és a max_input_time = 60beállítással, mivel ha engedünk több száz MB adatfel-töltést, akkor az vélhetőleg nem fog beleférni az alapbeállításoknál meghatározott 30/60-as keretbe, figye-lembe véve az itthoni aszimmetrikus internetsebessége-ket (azaz a feltöltés a legtöbb esetben lassabb mint a le-töltési irány).allow_url_fopen = Off

A PHP szkript számára tilthatjuk vagy engedhetjükpéldául a HTTP vagy FTP távoli fopen hívást. Ha nincsrá szükségünk (a programozók nem igénylik), akkor ér-demes Off értékre állítani.

A php.ini fájlban, illetve az Apache virtualhoston-ként állítható változói még számos lehetőséget kínálnakszámunkra, amelyeket most nem részletezünk28.

28 http://hu1.php.net/manual/en/

33

Page 34: Szabad szoftver keretrendszer

Webes környezet kialakítása szabad szoftverek segítségével

Phpmyadmin

A Phpmyadmin29 egy nyílt forrású, PHP nyelven írteszköz, amely képes webes felületen a MySQL adatbá-zis-kezelő majdnem teljes körű menedzselésére. Hasz-nálatával lehetséges adatbázist kezelni és törölni, illetvea különböző egyéb adatbázissal kapcsolatos műveleteknagy részét is elérhetjük ezen a felületen. Híres a biz-tonsági incidenseiről, ezért kifejezetten fontos, hogy nealapbeállításokkal használjuk. A szerverem-neve.hu/phpmyadmin alap hivatkozást ne hagyjuk megneki (nagyon könnyen megváltoztatható, hiszen a leg-több esetben a telepítés a disztribúció csomagkezelőjé-vel zajlik. Így ebben az esetben csak egy Apache Aliasbeállítás módosítása szükséges. Ha pedig letöltjük, ak-kor ne olyan könyvtárba rakjuk be, ami a neve.), illetveérdemes eleve HTTPS felület alatt engedélyezni a hasz-nálatát csak, valamint egy .htaccess fájlal30 pluszbanvédeni. A legtöbb esetben használata szükségszerű, hi-szen a távoli MySQL port engedélyezése a programozó

29 http://www.phpmyadmin.net/home_page/index.php30 http://en.wikipedia.org/wiki/Htaccess

34

Page 35: Szabad szoftver keretrendszer

Webszerver üzemeltetéséhez szükséges komponensek

számára, ha lehet még kevésbé ajánlatos, mint aphpmyadmin maga.

OpenSSL

Az OpenSSL31 egy nyílt forrású programcsomag- éskönyvtár-gyűjtemény, amely segítségével nagyon sok-fajta kriptográfiai műveletet végezhetünk el. A legtöbbLinux disztribúció alaptelepítésének része, valamintWindows alatt is elérhető. Az Apache számára tudunk asegítségével egy önaláírt kulcsot készíteni, amelyet amode_ssl bekapcsolása után megfelelően befűzve le-hallgatással szemben ellenállóbbá tehetjük a hálózatikapcsolatot. Azaz a gyakorlatban egy HTTPS felületethozhatunk létre, illetve ugyanezt az elkészített kulcsotakár az FTP kapcsolat biztonságosabbá tételére is fel-használhatjuk később.

31 http://www.openssl.org/

35

Page 36: Szabad szoftver keretrendszer

Webes környezet kialakítása szabad szoftverek segítségével

FTP megoldások

A weboldalak adminisztrálására számtalan megoldáslétezik, egyszerűbb esetben a tartalomkezelő felület kí-nál erre lehetőséget valamilyen bővítmény segítségével,vagy eleve elégséges az a funkcionalitás (cikkek és ké-pek közzététele stb.) amely adott, plusz a phpmyadmin.Ha ennél többet szeretnénk, például hozzáférni a PHPés egyéb fájlokhoz közvetlen módon, akkor kerülnekképbe a különböző hozzáférést biztosító szolgáltatások.A legtöbb esetben még mindig az FTP protokollt32

használjuk erre, de sokan az OpenSSH beépített megol-dását az SFTP-t, vagy az SCP-t alkalmazzák. Elterjedtmegoldás volt régebben az scp-only shell használata is,de szerencsére ezt az SFTP már jobbára kiszorította.Manapság még inkább fontosabb alapkövetelmény,hogy akármilyen megoldást is használunk, a lehetőség aszeparációra meglegyen. Azaz mindenki csak a sajátkönyvtárát láthassa, amikor becsatlakozik a kliensével,illetve mi adhassunk meg kivételeket. Ugyanígy alap-követelmény ma már az is, hogy ha FTP-t használunk,

32 http://hu.wikipedia.org/wiki/File_Transfer_Protocol

36

Page 37: Szabad szoftver keretrendszer

FTP megoldások

akkor képes legyen SSL vagy TLS alatt működni, és necsak az azonosítás menjen az SSL réteg alatt, hanem azadatkapcsolat többi része is. Ezért most olyan kliense-ket fogunk bemutatni, ahol ezek a dolgok megvalósít-hatóak.

Pure-FTPd33

Ahogyan a weboldal első kiemelt része is említi „Se-curity first”, azaz a megalkotóknak a legfontosabb abiztonság volt. Támogatja a chroot-ot34, a virtuális szer-vereket, az SSL/TLS kapcsolatot vegyes és kizártüzemben is. Azaz beállítható, hogy csak az azonosításvagy az azonosítás és az adat is titkosított réteg alattmenjen. Könnyen konfigurálható és virtuális felhaszná-lói adatbázisával együtt egészen nagy rendszerek kiala-kítására is kényelmesen használható. Segítségével akára www-data felhasználó nevében felvett virtuális fel-használókat tudunk létrehozni, így biztosítva, hogy asafe mode-ban futó PHP szkriptek se álljanak le bizo-nyos esetekben a futtató környezet (Apache esetén a

33 http://www.pureftpd.org/project/pure-ftpd34 http://hu.wikipedia.org/wiki/Chroot

37

Page 38: Szabad szoftver keretrendszer

Webes környezet kialakítása szabad szoftverek segítségével

www-data) és a fájljogosultságok eltérése miatt (safemode gid). Szabályozható vele az anonymous és a tény-leges felhasználók sávszélessége is, ezzel biztosítva,hogy egy-egy nagyobb feltöltési sávszélességgel ren-delkező felhasználó ne tudja a végletekig leterhelni aszervert, valamint megmondható az is, hogy a Pure-FTPd mekkora terhelés35 mellett szolgáljon még ki. Tá-mogatja az FXP (server-to-server) protokollt, amely se-gítségével 2 szerver között tudunk nagyobb mennyisé-gű adatot úgy mozgatni, hogy az otthoni kis sávszéles-ségű vonalunkon nem megy át az adat, ezzel is nagybangyorsítva az adatátvitelt. Nagyon hasznos funkció to-vábbá, hogy a Passive Port Range opcióval meghatá-rozható azon portok tartománya, ahol a passzív módesetén kiszolgál. Így rögzíthetjük ezen portokat egyegyszerű Iptables szabály segítségével, ezzel is meg-könnyítve a másik oldalról jövő NAT mögüli kapcsola-tok dolgát.

Telepíteni a már megszokott apt-get install pure-ftpdparanccsal lehet, ez telepíteni fogja a pure-ftpd-com-mon csomagot is mint függőséget. A telepítés után a

35 http://hu.wikipedia.org/wiki/Load_(sz%C3%A1m%C3%ADt%C3%A1stechnika)

38

Page 39: Szabad szoftver keretrendszer

FTP megoldások

konfigurációs fájlokat az /etc/pure-ftpd/conf könyvtár-ban találjuk. A Pure-FTPd-t praktikusan ebbe a confkönyvtárba elhelyezett szöveges fájlok segítségével (ésa fájlokba beleírt opció állapotával36) tudjuk finomhan-golni, ez a gyakorlatban így néz ki (a conf könyvtár tar-talma):/etc/pure-ftpd/conf# ls -f

.. AnonymousCantUpload MaxLoadMaxClientsNumber PureDB FSCharsetDaemonize BrokenClientsCompatibility MaxIdleTime DisplayDotFiles MaxClientsPerIPAllowAnonymousFXP AnonymousCanCreateDirsAnonymousBandwidthPAMAuthentication AltLog UserBandwidthTLS NoAnonymous AllowUserFXPUnixAuthentication ChrootEveryone MinUID

36 http://download.pureftpd.org/pure-ftpd/doc/README

39

Page 40: Szabad szoftver keretrendszer

Webes környezet kialakítása szabad szoftverek segítségével

Nézzük egyenként az opciók jelentését és a fájloktartalmát:

NoAnonymous [yes/no]Ezzel engedhetjük vagy tilthatjuk az anonymous

(névtelen) felhasználó bejelentkezését.AnonymousCantUpload [yes/no]Ezzel engedhetjük vagy tilthatjuk az anonymous fel-

használónak a fájlfeltöltést. Ha megtiltjuk, akkor csakletöltheti az anonymous módban elérhető fájlokat éskönyvtárakat. Alapesetben állítsuk no-ra a fájl tartal-mát.

AnonymousCanCreateDirs [yes/no]Ezzel engedhetjük vagy tilthatjuk szintén a vendég

felhasználó számára a könyvtárak létrehozását, alap-esetben állítsuk no-ra.

AnonymousBandwidth [KB/Sec]Ezzel beállíthatjuk, hogy a vendég felhasználó mek-

kora sávszélességgel forgalmazhat. Ha például egy nép-szerű szabad szoftvert teszünk ki anonymous FTP-re,akkor mindenképpen érdemes ezt az értéket egy olyantapasztalati úton kipróbált maximumra hangolni, amelymég nem veszélyezteti a lemez I/O műveletekből faka-

40

Page 41: Szabad szoftver keretrendszer

FTP megoldások

dóan a gép stabil üzemét, még akkor sem ha nagyonnagy az érdeklődés az adott fájl iránt.

AllowAnonymousFXP [yes/no]Ezzel engedhetjük vagy tilthatjuk, hogy a vendég

felhasználó az FXP37 protokoll szerint, a kliens kiha-gyásával 2 szerver között mozgathasson direktben ada-tot.

AllowUserFXP [yes/no]Ez az előző opció normál, azaz beazonosított fel-

használókra szánt változata.AltLog [clf:/var/log/pure-ftpd/transfer.log]Ezzel beállíthatjuk az átviteli napló pontos helyét.

Alapesetben a /var/log/pure-ftpd/transfer.log fájlban ér-demes tárolni a felhasználók aktivitását.

ChrootEveryone [yes/no]Ezen opció segítségével beállíthatjuk, hogy minden

felhasználó csak a számára létrehozott home környeze-tet láthassa, gyakorlatilag / (gyökér) környezetként. Ezkülönösen hasznos, ha több esetleg „idegen” felhaszná-lót vagyunk kénytelenek beengedni a szerverre. A szer-ver biztonsága érdekében ez alapbeállítás kellene, hogylegyen, ezért állítsuk Yes-re.

37 http://en.wikipedia.org/wiki/File_eXchange_Protocol

41

Page 42: Szabad szoftver keretrendszer

Webes környezet kialakítása szabad szoftverek segítségével

Daemonize [yes/no]Ezzel adhatjuk meg, hogy a Pure-FTPd külön dé-

monként vagy az inetd38 részeként fusson. Javasolt dé-mon módban futtatni.

DisplayDotFiles [yes/no]Mutassa-e a ponttal kezdődő nevű, rejtett fájlokat,

mint például a .htaccess-t. Javasolt ezt kikapcsolni, azazno-ra állítani, és csak akkor engedni a klienseknek,hogy lássák például a .htaccess-t, ha erre ténylegesenszükségük van.

FSCharset [UTF-8]Ezzel beállítjuk az alapértelmezett karakterkódolást,

amely ma már praktikusan az UTF-8.MaxClientsNumber [szám]Ezzel meghatározhatjuk, maximum mennyi felhasz-

nálót enged be egy időben a rendszer. Nagy terheltségűrendszer esetén érdemes alulról felfele haladva tesztel-ve beállítani, hogy a túlterheltség ne akadályozza aszerver működését.

MaxClientsPerIP [szám]

38 http://manpages.ubuntu.com/manpages/precise/man8/inetd.8.html

42

Page 43: Szabad szoftver keretrendszer

FTP megoldások

Ezzel meghatározhatjuk, hány klienst engedjen egyadott IP-címről. Tekintve, hogy manapság már az ottho-ni hálózatok is NAT mögött vannak, távolról 1 IP-neklátszanak, ami azt jelenti, hogy akár egy egész alhálózatlehet 1 db IP-cím mögött (amely azért az otthoni fel-használókra nem jellemző), praktikusan érdemes 1-5közé tenni ezt a számot. Ha sok kérést kapunk Proxyvagy nagyvállalati tűzfal gépek mögül, akkor érdemesnövelni ezt a számot.

MaxIdleTime [perc]Ezzel percben megadhatjuk, mennyi inaktivitás után

szakítsa meg a kapcsolatot a szerver a klienssel. Mivelezt az opciót a legtöbb klienssel felül lehet bírálni, ezértnem érdemes túl nagy számot választani, praktikusan 5-15 perc közötti értéket adjunk meg.

MaxLoad [szám]A túlterhelés megakadályozására alkották meg ezt a

remek opciót, amely nem engedi a Pure-FTPd-nek,hogy egy bizonyos rendszerterheltség (load) felett to-vábbi erőforrásokat emésszen fel. Általánosságban el-mondható, hogy a load39 egy olyan iránymutató szám aUnix/Linux rendszerekben, amely esetében az 1-es alat-

39 http://en.wikipedia.org/wiki/Load_(computing)

43

Page 44: Szabad szoftver keretrendszer

Webes környezet kialakítása szabad szoftverek segítségével

ti érték jelképezi az üzemszerű erőforrás-felhasználást.Ez nem azt jelenti, hogy a MaxLoad értékének 1-et kel-lene beírnunk, de érdemes a top vagy a htop programsegítségével monitorozni az FTP szerver és a szerverterheltségét, és egy olyan értéket meghatároznunk,amely a felhasználók viselkedése és a hardver tűrésha-tárán belül egy ésszerű érték. Ez jelenti azt is, hogy ek-kor a lemez I/O várakozás még nem okoz nagyobb loa-dot és a memóriafelhasználás sem terelődik át a swaptartományba. A példa kedvéért, ez egy nagyobb terhelt-ségű FTP szerveren jelenleg 12-es érték, de ez teljesenszubjektív és egyedi mérésekre alapozott.

TLS [0-3]Ezzel engedhetjük vagy tilthatjuk, és meghatározhat-

juk az SSL használatát a következőképpen:0: az SSL/TLS réteg tiltva van.1: engedjük az SSL/TLS-t és a sima titkosításmentes

kapcsolatot is2: visszautasítja a nem SSL/TLS mechanizmussal

kezdődő azonosítási kísérleteket, anonymous kapcsolatesetében is.

3: visszautasítja a titkosításmentes kapcsolatot ésSSL/TLS alapú adatkapcsolatot épít ki.

44

Page 45: Szabad szoftver keretrendszer

FTP megoldások

Ugyanakkor az adatkapcsolati réteg esetében iskényszeríti az SSL/TLS kapcsolatot.

A 2-es és 3-as opció esetében első lépésben létre kellhoznunk az SSL kulcsot és bemásolnunk a következő-képpen:mkdir -p /etc/ssl/private

openssl req -x509 -nodes -newkey rsa:4096 -keyout \ /etc/ssl/private/pure-ftpd.pem \ -out /etc/ssl/private/pure-ftpd.pemchmod 600 /etc/ssl/private/*.pem

Az Ubuntu LTS-ben lévő Pure-FTPd TLS/SSL tá-mogatással kerül csomagolásra, így az SSL kulcs elké-szítése, valamint az opció bekapcsolása után további te-endőre nincs szükség.

UserBandwidth [KB/s]Akárcsak az anonymous esetében, itt is KB/Sec-ben

adhatjuk meg az azonosított felhasználó maximális át-viteli képességét. Vigyázzunk: az esetlegesen ugyanab-ban a hálózatban lévő felhasználók akár gigabites for-galmat is generálhatnak.

MinUID [uid]Ezzel az opcióval adhatjuk meg az azonosítás során,

hogy mely felhasználók csatlakozhatnak, hiszen jellem-

45

Page 46: Szabad szoftver keretrendszer

Webes környezet kialakítása szabad szoftverek segítségével

zően a sima felhasználói szint 1000-es UID-nál kezdő-dik, így a root és a többi 1000 alatti felhasználó még ajó jelszó megadása után sem tud csatlakozni, amely ki-fejezetten kívánatos óvintézkedés. Így tartalma legyen1000.

PassivePortRange [szám szám]Ez egy rendkívül fontos opció, mivel jelen esetben

kényszeríthetjük, hogy az FTP forgalom passzív üzem-mód40 esetén milyen tartományban üzemeljen, így atűzfalszabályokat is könnyedén mögé igazíthatjuk a kö-vetkező módon:

A fájl tartalma legyen „42000 42100”, sima szóköz-zel elválasztva, majd pedig helyezzünk el a tűzfalunk-ban egy ehhez hasonló szabályt:#FTP Passive Port + SSL

$IPTABLES -A INPUT -p tcp --sport 20 -m state --state ESTABLISHED,RELATED -j ACCEPT$IPTABLES -A OUTPUT -p tcp --dport 20 -m state --state ESTABLISHED -j ACCEPT$IPTABLES -A tcp_packets -i eth0 -p tcp -mtcp --dport 42000:42100 -j ACCEPT

40 http://en.wikipedia.org/wiki/File_Transfer_Protocol

46

Page 47: Szabad szoftver keretrendszer

FTP megoldások

Ezek után a kliensen az SSL/TLS és a passzív módkapcsolókat kell bekapcsoltatni a felhasználóval.

Természetesen számtalan egyéb41 opciója is létezikmég a Pure-Ftpd-nek, azonban a legfontosabb és leg-népszerűbb opciókat felsoroltuk.

Vsftpd42

A projekt weboldala szerint a Vsftpd valószínűleg alegbiztonságosabb és leggyorsabb FTP szerver a Unixrendszerű gépek esetében. Az biztos, hogy akárcsak aPure-FTPd esetében számtalan biztonsági és működéstsegítő opcióval rendelkezik43. Ugyancsak támogatja avirtuális felhasználókat és az SSL/TLS-t is. Érdekessé-ge, hogy a legnagyobb Linux terjesztések majdnem ki-vétel nélkül Vsftpd-t használnak a nagy terheltségű ISOés egyéb kiszolgálásaikra.

41 http://download.pureftpd.org/pure-ftpd/doc/README42 https://security.appspot.com/vsftpd.html43 https://security.appspot.com/vsftpd.html#features

47

Page 48: Szabad szoftver keretrendszer

Webes környezet kialakítása szabad szoftverek segítségével

ProFTPD44

Talán az egyik legtöbb platformon futó, rendkívülszéles körben konfigurálható FTP démon, amelynekhosszú múltja van. Sajnos azonban a hosszú múltbanadódtak kellemetlen biztonsági incidensek is, talánezért a projekt főoldalán csak a magas konfigurálható-ságot említik első sorban. Ennek ellenére a ProFTPDigen megbízható és sokoldalú FTP szerver megoldás.

Számtalan más szabad szoftveres FTP szerver meg-oldás létezik még, de ma ezek a leginkább elterjedtek.Amennyiben tájékozódni akarunk a többi megoldás tu-dását és elérhetőségét illetően, akkor a Wikipedia45 egyremek táblázatban ezt összefoglalja számunkra.

SFTP46

Az SFTP alrendszer részben az SCP utódja, valójá-ban az SSHD egy jól elkülönített alrendszere. Az SCPegy remek eljárás az SSH titkosított rétegein belül fájl-

44 http://proftpd.open-source-solution.org/45 http://en.wikipedia.org/wiki/List_of_FTP_server_software46 http://en.wikibooks.org/wiki/OpenSSH/Cookbook/SFTP

48

Page 49: Szabad szoftver keretrendszer

FTP megoldások

átvitelre. Ugyanúgy támogatja az SSH összes biztonsá-gi megoldását, mint a parancssori mód. Azaz érvényesrá az Allow Users direktíva, és a kényszerített kulcs-használat is, amikor a jelszavas azonosítást kikapcsol-juk, és RSA vagy DSA kulcsok segítségével végezzükel az azonosítást. De használható vele az OTP (one timepassword) azonosítás is. Gyengesége, hogy egy stan-dard SSH szerver felépítése esetén az SCP jogot nemlehet jól elkülöníteni az SSH parancssori felület jogai-tól, valamint nehéz chroot-ba kényszeríteni. Van ugyanrá egy megoldás az scponly shell47, amikor is egy speci-ális chroot-ba kényszerített, nagyon limitált shell kör-nyezetet kap a felhasználó, amely segítségével a simaSSH-t már nem tudja használni, csak egy adott könyv-tár fölötti részhez fér hozzá. Ezzel jellemzően az auto-matizált mentéseket lehet biztonságosabbá tenni. AzSFTP esetében azonban már az SSH konfigurációjábanmegmondhatjuk, hogy ki milyen séma szerint férhet ésmihez. Teljesen biztonságos, mivel minden adat az SSHBINARY csatornáján keresztül megy, így továbbra islehetőség van az összes biztonsági azonosítás és korlá-tozás használatára. Gyakorlatilag egy minimális odafi-

47 https://github.com/scponly/scponly/wiki

49

Page 50: Szabad szoftver keretrendszer

Webes környezet kialakítása szabad szoftverek segítségével

gyeléssel ma talán ez a legmegfelelőbb megoldás asima FTP kiváltására. Szerencsére a kliensek is számosplatformon támogatják, így a fejlesztőknek is sok esz-köz áll rendelkezésükre, sőt manapság már a kereske-delmi weblapfejlesztő és verziókövető rendszerek is tá-mogatják ezt a módot. Részletesebb beállítási útmutatóta Távoli adminisztráció fejezet SFTP részében találunk.

Webstatisztika-készítő szoftverek

AWStats48

Ez egy alapvetően Perl nyelven írt, igen részletesstatisztikakészítő program. Szükséges hozzá CGI támo-gatás az Apache szerveren belül, éppen ezért egy kicsitkomplikáltabb az üzemeltetése is egy sima HTML-t ke-zelő programnál. Viszont sokkal több és részletesebblehetőséget kapunk. Tudása gyakorlatilag a kereskedel-mi statisztikakészítő programok tudásával vetekszik. A

48 http://awstats.sourceforge.net/

50

Page 51: Szabad szoftver keretrendszer

Webstatisztika-készítő szoftverek

pontos funkciók részletezése a honlapján49 megtalálha-tó. Üzemeltetésénél érdemes számításba venni, hogyCGI módban fut, ezért érdemes korlátozni és védeniesetleg https és htaccess használatával az elérhetőségét.Rendelkezik magyar nyelv támogatással is.

Webalizer50

Az egyik legrégebbi és leggyorsabb (hiszen C nyel-ven írták) naplóelemző szoftver. Beállítása és üzemelte-tése is igen egyszerű. Az Awstats-szal ellentétben aWebalizer futtatását vagy emberi beavatkozással pa-rancssorból (vagy tömegesen szkriptelve) vagy pedigcron-ból időzítve végezhetjük. Nincsen tehát gyakorla-tilag támadási felülete, ugyanis sima HTML kódot +képeket publikál egy előre meghatározott könyvtárba.Honosított számtalan nyelvre, köztük a magyarra is.Tudása nagyon hasonló az Awstats-hoz, azonban a sta-tikus tartalom kezelése miatt kevesebb extrát tud. Egy-szerű felhasználású eszköznek igen kiváló. Bár a publi-kált területen a HTML oldalak támadási felületet nem

49 http://awstats.sourceforge.net/#FEATURES50 http://www.webalizer.org/

51

Page 52: Szabad szoftver keretrendszer

Webes környezet kialakítása szabad szoftverek segítségével

kínálnak, azonban maga a statisztika adhat lehetőségetvisszaélésre (például: egy azonosítás nélküli felület,amelyet sokszor használunk, benne lesz a publikus ada-tok között) ezért érdemes szintén https és htaccess vé-delemmel ellátni.

Piwik51

Egy PHP és MySQL alapokon nyugvó nyílt forrás-kódú, teljesen valós időben működő webforgalom-ana-lizáló szoftver. A weboldal tanúsága szerint több mint320.000 weboldal használja és alternatívái akarnak len-ni a Google Analytics-nek. Jelenleg 46 nyelvet támo-gat, köztük a magyart is. Tudása összetettebb és széle-sebb körű mint társaié, valamint nagy előnye, hogy azadatainkat nem szolgáltatjuk ki egy 3. félnek, azaz sajátrendszerünkön belül tároljuk az adatokat.

51 http://piwik.org/

52

Page 53: Szabad szoftver keretrendszer

Webstatisztika-készítő szoftverek

BBclone52

Akár csak a Piwik, PHP alapokon nyugvó valós ide-jű statisztikaszoftver, ahol szintén nem kell kiszolgáltat-ni az adatainkat egy kereskedelmi cégnek. Nyílt forrásúés számos nyelven támogatott, köztük magyarul is.

52 http://bbclone.de/

53