[[oktatas:linux:webszerver|< Webszerver]]
====== Apache ======
* **Szerző:** Sallai András
* Copyright (c) Sallai András, 2009, 2011, 2013, 2014, 2015, 2018
* Licenc: [[https://creativecommons.org/licenses/by-sa/4.0/|CC Attribution-Share Alike 4.0 International]]
* Web: https://szit.hu
===== A webszerverről =====
A webszerver HTML oldalakat szolgál ki http protokollon keresztül.
Alapértelmezetten a 80-as porton. Titkosított adatátvitelre is képes
SSL vagy TLS felett, a 443-as porton (https protokoll).
Az Apache weboldala http://apache.org. Az Apache valójában egy alapítvány, amelynek
nagyon sok projektje van. A webszerver (httpd) csak az egyik projekt a sok közül.
A webszervert a főoldalról kiindulva a következő útvonalon lehet megtalálni:
Project -> Project Listing -> Apache HTTP Server
Persze egyszerűen azt is írhatjuk:
* http://httpd.apache.org
A Debian GNU/Linux 6.x verzión, az apache2 csomagban a 2.2 verziójú apache található.
Ennek dokumentációja:
* http://httpd.apache.org/docs/2.2/
===== Telepítés =====
apt install apache2
Az apache weboldaláról letölthető a legújabb verzió is. 2012. májusban ez a 2.4-es verzió.
===== A telepítés ellenőrzése =====
Az apache két proton szokott webhelyeket szolgáltatni, a 80-as és a 443-as porton.
Alapértelmezetten csak a 80-as port használható. Ellenőrizzük, hogy figyel-e a
80-as porton a telepített apache2:
ss -lt
A kimenet ehhez hasonló lehet:
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:ssh *:*
LISTEN 0 128 :::http :::*
LISTEN 0 128 :::ssh :::*
A kettő darab kettőspontból láthatjuk, hogy az apache2 csak a IPv6 foglalaton figyel.
(A harmadik kettőspont csak szeparátor)
Ennek ellenére működik IPv4-en is, mivel az IPv4 az IPv6 foglalaton is képes
fogadni a kapcsolatokat. Ehhez a Debian készítői az apache2 fordítását a következő
kapcsolóval végezték:
--enable-v4-mapped
Hogy valóban, így van-e, kérdezzük le az apache-ot, milyen kapcsolókkal fordították:
apache2ctl -V
A következő sornak kell szerepelnie:
...
-D ARP_HAVE_IPV6 (IPv4-mapped addresses enabled)
...
===== A weblapok helye =====
Alapértelmezetten a weblapok helye a következő.
/var/www/html
Ez persze megváltoztatható.
===== Vezérlés =====
==== Vezérlés systemd-ből ====
systemctl stop apache2
systemctl start apache2
systemctl restart apache2
systemctl reload apache2
==== apache2ctl ====
Az apache az apache2ctl paranccsal is vezérelhető.
A következő parancsok adhatok:
* start
* stop
* restart
* fullstatus
* status
* graceful
* graceful-stop
* configtest
Például az apache indítása:
apache2ctl start
Például az apache leállítása:
apache2ctl stop
A graceful parancs a SIGUSR1 jelzést küldi az apache-nak.
Ennek hatására, ha az apache nem volt elindítva, akkor elindul.
Ha el volt indítva, akkor nem szakítja meg a meglévő kapcsolatokat.
Ha leállítjuk a graceful-stop paranccsal az sem szakítja meg a kapcsolatokat.
==== a2enmod, a2dismod ====
A modulok engedélyezése, tiltása.
Használata:
Engedélyezés:
a2enmod modulnév
Engedélyezésre példa:
a2enmod php5
Tiltás:
a2dismod mdoulnév
Milyen modulok engedélyezhetők? Nézzük meg a mods-available könyvtár tartalmát:
ls /etc/apache2/mods-available
==== a2ensite, a2dissite ====
Site vagy virtualhost engedélyezése, tiltása
a2ensite [site]
a2dissite [site]
Például az alapértelmezett site leállítása:
a2dissite default
Milyen sit-ok engedélyezhetők? Nézzük meg a sites-available könyvtár tartalmát:
ls /etc/apache2/sites-available
Milyen sit-ok vannak engedélyezve? Nézzük meg a sites-enabled könyvtár tartalmát:
ls /etc/apache2/sites-enabled
==== Állapot lekérdezése ====
/etc/init.d/apache2 status
Apache2 is running (pid 3064).
Ha a webszerver nem fut, akkor csak visszakapjuk a promptot.
Több információt kaphatunk az apache2ctl parancs segítségével:
apache2ctl status
apache2ctl fullstatus
===== Beállítás =====
A konfigurációs állományok szimpla szöveges fájlok (plain text).
A fő konfigurációs fájl a httpd.conf, amelynek a helye fordítási
időben van beállítva. A "-f" kapcsolóval az "apache2" programnak
más konfigurációs fájlok is megadhatók.
Változtatás után az apache újratöltése vagy újraindítása előtt
ellenőrizzük a konfigurációs fájl szintaktikáját:
apache2ctl configtest
Egy konfigurációs fájlhoz újabb konfigurációs fájlok illeszthetők
az "Include" kulcsszóval. A konfigurációs mondatok nem
case sensitvek. A nagy- és kisbetűk használata csak az átláthatóságot
szolgálják. A konfiguráció minden módosítása után újra kell
töltetni azokat az Apache webszerverrel a következő paranccsal:
service apache2 reload
Telepítés után a beállítások a következő helyen találhatók:
/etc/apache2/
Ezen belül újabb könyvtárakat és állományokat találunk:
* **conf-available**
* Ebben a könyvtárban elhelyezett állományok konfigurációs fájlként beolvasásra kerülnek.
* **conf-enabled**
* Ebben a könyvtárban az előző könyvtárból vannak szimbolikus linkek.
* **mods-available**
* Ebben a könyvtárban az engedélyezhető modulok konfigurációs állományi vannak.
* **mods-enabled**
* Eebben a könyvtárban az előző könyvtárból vannak szimbolikus linkek.
* Ha itt megtalálható egy modulhoz egy szimbolikus link akkor az engedélyezve van.
* **sites-available**
* Hozzáférhető webhelyek beállításai
* **sites-enabled**
* Engedélyezett webhelyek (előző könyvtárból szimbolikus link)
* **apache2.conf**
* Általános beállítások
* **envvars**
* Környezeti változók
* **httpd.conf**
* Saját beállításink helye
* **magic**
* Kiterjesztések kezelése
* **ports.conf**
* Használt portok
===== Naplófájlok =====
A naplófájlok helye:
/var/log/apache2
Háromféle naplófájl van:
Hibanapló:
/var/log/apache2/error.log
Hozzáférési napló:
/var/log/apach2/access.log
===== Gyakorlat =====
Válaszoljon a következő kérdésekre:
- Hogyan telepítjük Debian GNU/Linuxon az Apache webszervert?
- Debian GNU/Linuxon, Apache webszerver esetén hol van a weboldalak alapértelmezett helye?
- Hogyan állíthatom le initscripttel az apache webszervert?
- Hogyan tilthatom le a php5 modult?
- Hogyan kérdezhetem le a webszerver állapotát?
- Debian GNU/Linux alatt hol van az alapértelmezett konfigurációs fájl?
- Hova kerülnek a naplófájlok?
===== Alapbeállítások =====
A Debian GNU/Linux rendszeren települő Apache2 azonnal használható.
A naplóállományokban azonban hibaüzenet van, mert egy ikonfájlt vár,
amelyet megjelenít a böngészők fülein, ha az adott weblaphoz nincs
semmi megadva. Alapértelmezetten azt várja, hogy készítsünk egy
16x16-os ico kiterjesztésű képfájlt.
Az ikonfájlt elkészíthetjük például a GIMP rajzoló, képszerkesztő
programmal. Az elkészült ico kiterjesztésű fájlt a szerveren a
következő helyre kell menteni, az alábbi néven:
/var/www/favicon.ico
Ha változtatunk az apache beállításain, akkor ellenőrizzük szintaktikailag:
apachectl configtest
===== Beállítások alkalmazási köre =====
A beállításokat alkalmazhatjuk könyvtárakra:
...
A beállításokat alkalmazhatjuk könyvtárakra, szabályos kifejezéseket is használva:
...
A beállításokat alkalmazhatjuk fájlokra:
...
A beállításokat alkalmazhatjuk fájlokra, szabályos kifejezéseket is használva:
...
A beállításokat alkalmazhatjuk webhelyre:
...
A beállításokat alkalmazhatjuk webhelyre, szabályos kifejezéseket is használva:
......
A beállításokat alkalmazhatjuk virtuális hostokra:
...
===== Modulok =====
Az apache moduláris felépítésű. Alapértelmezetten csak az alapfunkciók vannak telepítve.
A modulok betöltésére példa:
LoadModule php5_module /usr/lib/apache2/modules/libphp5.so
Elsőként megadtunk egy utasítást, ez után egy modulnevet, a végén pedig a modul elérhetőségének útvonalát.
Fentebb már láttuk, hogy a modulok kezelésére létezik két remek utasítás:
* a2enmod
* a2dismod
Az engedélyezhető modulok megtekintése:
ls /etc/apache2/mods-available
A példakedvéért a PHP5 engedélyezése:
a2enmod php5
Ellenőrzés:
ls /etc/apache2/mods-enabled/php5.load
===== A core modul =====
==== Options ====
Mindig alapból betöltődő modul.
Lehetővé teszi az //Options// és az //AllowOverride// beállíátsokat
Options kapcsoló1 kapcsoló2
Options ExecCGI FollowSymlinks Indexes SymlinksIfOwnerMatch
* ExecCGI
* CGI programok futtathatók
* FollowSymlinks
* Szimbolikus linkek követése
* Location direktívában hatástalan
* Indexes
* Az autoindex modul használatát engedélyezi, vagy tiltja
* SymlinksIfOwnerMatch
* A webkiszolgáló követi a szimbolikus linkeket, ha tulajdonos azonos
* Location direktívában nem használható
=== A "+" és "-" karakterek használata ===
A plusz karakterek engedélyeznek valamit, a mínusz karakterek tiltanak egy beállítást.
Ezeket a karaktereket nem kötelező kitenni. Ha nem teszem ki a "+" vagy a "-" karaktert, az
alapértelmezett a "+", vagyis engedélyezett.
Options +Indexes
Ennek megfelelően egy tiltás:
Options -Indexes
Természetesen ha nem írom oda az "Indexes" kapcsolót, akkor sem lesz engedélyezve.
==== AllowOverride ====
AllowOverride jog1 jog2
A könyvtárakban elhelyezett .htaccess fájlok mit írhatnak felül.
* None
* A .htaccess állomány semmit sem bírálhat felül
* All
* A .htaccess állomány minden felülbírálhat
* Indexes
* A könyvtárindexeléshez kapcsolódó vezérlések lehetősége (A Options Indexes nem tartozik ide! Az az Options-al kell állítani)
* Limit
* Szabályozható, melyik számítógépről érhető el (access modul)
* FileInfo
* Például: Rewrite engedélyezése.
* Options
* felülbírálhatja a biztonsági kapcsolókat
==== .htaccess használata ====
A beállítások két módon tehetők meg:
* központi (centralizált) httpd.conf
* helyi (decentralizált) .htaccess
A .htaccess akkor használjuk, ha egy könyvtárnak a beállításait nem központilag akarjuk
megoldani. Ez jellemzően akkor van, ha azt egy másik rendszergazdára, vagy a webmesterre
bízzuk (továbbiakban a webmesterre fogok hivatkozni).
A webmester létrehoz ezen a néven egy állományt az adott könyvtárban, amiben elhelyezi a
beállításait. Hogy mi az amit beállíthat mi határozzuk meg az "AllowOverride" beállítással
központilag.
Ha virtuális domainről van szó, akkor szerkesszük a virtuális domain beállításait,
ha saját domainünk akkor httpd.conf fájlt:
Szerkesszük a httpd.conf állományt:
mcedit /etc/apache2/http.conf
Az engedélyezést (mint azt fentebb már csináltuk) Directory direktívák között használhatjuk, például:
AllowOverride AuthConfig
Az AuthConfig teszi lehetővé, hogy a webmester a .htaccess fájlban apache azonosítást állítson be.
Álljon itt egy lista miket szoktunk engedélyezni:
* None
* All
* AuthConfig
* Indexes
* Limit
* Options
Ha több lehetőséget szeretnénk megadni, azt írjuk szóközökkel tagolva egymás után:
AllowOverride AuthConfig Options Limit
=== A .htaccess példa ===
A fájl az aktuális könyvtárra vonatkozik, így nem kell Directory direktíva:
Options +Indexes
ErrorDocument 403 /error.php
ErrorDocument 404 /error.php
ErrorDocument 500 /error.php
===== Apache azonosítás =====
Az apache képes weboldalak hozzáférését szabályozni azonosítással.
Vagyis nem kell a webmesternek megírni az azonosítási eljárást
valamilyen néven, mert az alapból a rendelkezésünkre áll.
A következőkben az **auth_basic** modul használatával megnézzük hogyan állítsunk be
egy azonosítást.
==== Jelszófájl létrehozása ====
Az első felhasználót így vesszük fel:
htpasswd -c /etc/apache2/auth/pass joska
A -c kapcsoló a jelszó fájl létrehozására ad utasítást.
A futtatás eredménye:
htpasswd -c /etc/apache2/auth/pass joska
New password: titok
Re-type new password: titok
Adding password for user joska
A következő felhasználónál már nem szükséges a -c kapcsoló:
htpasswd /etc/apache2/auth/pass mari
Ha használjuk mégis a -c kapcsolót, akkor felülírjuk a pass állományt tartalmát.
==== Beállítás ====
Az apache konfigurációs állományában be kell állítanunk az azonosítást:
AuthType Basic
AuthName "Vedett tartomany"
AuthUserFile /etc/apache2/auth/pass
Require valid-user
==== További lehetőségek ====
* Require valid-user
* Require user userid [userid2] ...
* Require group csoportnev [csportnev2] ...
Ha csak mari felhasználó léphet be:
Require user mari
==== Csoportfájl ====
A csoportfájl használatának lehetősége a 2.4 apache verzióban külön modulba került, ami
alapértelmezetten Debian9-en nincs engedélyezve. Először engedélyezzük az authz_groupfile
modult:
a2enmod authz_groupfile
Az apache konfigurációban meg kell adni a csoportfájl helyét:
AuthGroupFile /etc/apache2/auth/groups
A csoportfájl szintaxisa:
csoportnev: nev1 nev2 nev3
Egy csoportfájl így nézhet ki:
informatika: joska mari kati
gazdasagi: tibi gabor lajos
A példában két csoport van. Az informatika és a gazdasagi. Az informatika csoportba tartozik
joska, mari és kati. A gazdasagi csoportba tartozik tibi, gabor és lajos.
==== Karakterkódolás ====
Az apache konfigurációs fájlok kódolása iso-8859-1.
file -i /etc/apache2/apache2.conf
Ezért ha itt kell létrehoznunk egy AuthName értéket, akkor
az helytelenül jelenik meg a böngészőben.
Az UTF-8 környezetben megírt szöveget vissza kell kódolnunk iso-8859-1-be.
Kódoljuk át az utf-8 karaktert iso-8859-1-es karakterré:
echo "ékezet" | iconv -f utf8 -t iso-8859-1//TRANSLIT
A kimeneteben valami ilyesmit kell látnunk:
�kezet
===== Gyakorlat =====
- Milyen hatókörökre készíthetünk beállításokat?
- Hogyan engedélyezzük egy könyvtár listázását?
- Milyen direktívákat használhatunk a különböző hatókörökre?
- Hogyan állíthatom be mi legyen az alapértelmezetten kiszolgátl fájlnév?
- Hogyan hozok létre egy jelszófájlt?
- Milyen modul kell a basic azonsításhoz?
- Mit jelent a Require valid-user?
- Mit jelent az AuthName ".." értéke?
- Hogyan adjuk meg a csoportfájl helyét?
- Az AllowOverride beállítást, hol és miért alkalmazzuk?
===== Az authz_host modul =====
A authz_host modul a 2.0-ás apacheban még access modul néven szerepel!
==== Allow,Deny ====
Célja a hozzáférés szabályozása.
Az Allow és a Deny direktívákkal szabályozhatjuk milyen hostról vagy IP címről érhetik el az egyes weboldalakat.
Figyelem! A beállítások alapértelmezetten csak a /var/www/ könyvtárban működnek.
Ha a rendszergazda egy új könyvtárat szeretne, például: /home/www, akkor
vagy a /etc/apach2/apache2.conf fájlban, vagy az új könyvtárra hivatkozásnál
be kell ezt állítani külön:
Require all granted
Allow from all
Allow from piros.and
Allow from 10.252.46.165
Deny from 10.252.46.165
Allow from 192.168.1.104 192.168.1.205
Minden számítógép számára: all
Deny from all
Allow from 192.168.5.0/255.255.255.0
Allow from 192.168.5.0/24
Allow from 10.1.0.0/255.255.0.0
Allow from 10.1.0.0/16
Allow from 2001:db8::a00:20ff:fea7:ccea
Allow from 2001:db8::a00:20ff:fea7:ccea/10
==== Order ====
Order sorrend
=== Szigorúbb ===
Alapértelmezés szerint mindenkinek tiltott az elérés.
Order Allow,Deny
Először megnézzük az Allow részt. Ha egyetlen Allow rész sem illeszkedik akkor tiltás.
Másodszor megnézzük a Deny részt. Ha illeszkedik egy Deny-re akkor hiába volt engedélyezve, tiltva lesz.
=== Enyhébb ===
Alapértelmezés szerint minden ügyfél jöhet.
Order Deny,Allow
Először megnézzük a Deny részt. Ha nincs illeszkedés akkor elérhető a könyvtár.
Másodszor megnézzük a Allow-ot. Ez felül írja a Deny részt is, ha meg volt tiltva,
de most szerepel az Allow részben, akkor hozzáférhető.
==== Hozzférés példa ====
Order Allow,Deny
Allow from piros.and
Deny from sarga.and
Order Deny,Allow
Deny from 192.168.5.0/24
Allow from 192.168.5.3
A 192.168.5.0 hálózatból nem jöhet senki, csak a 192.168.5.3-as címről.
===== Webhelyek kezelése =====
A webhelyeket (sites) a következő két paranccsal kezelhetők:
* a2ensite
* a2dissite
A webhelyek konfigurációs állományait az alábbi könyvtárban tartjuk:
/etc/apache2/sites-available
Mindig létezik egy alapértelmezett webhely "default" néven.
/etc/apache2/sites-available/default
===== Konfigurációk kezelése =====
Konfigurációt egy-egy könyvtár számára szoktunk beállítani.
Legyen például a **/home/janos/valami** könyvtár amit szeretnénk kiszolgálni.
A /etc/apache2/conf-available/ könyvtárban hozzunk létre egy valami.conf nevű állományt a következő tartalommal:
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
Engedélyezzük az konfigurációt:
a2enconf valami
Töltsük újra a szervert:
systemctl restart apache2
===== Virtualhost beállítása =====
==== Minimum ====
Hozzunk létre például a piros.and domain számára egy állományt:
mcedit /etc/apache2/sites-available/piros.and
Minimális tartalma:
ServerAdmin webmaster@piros.and
ServerName piros.and
ServerAlias www.piros.and
DocumentRoot /home/virtual-web/piros.and/htdocs/
# Naplófájlok
ErrorLog /home/virtual-web/piros.and/logs/error.log
CustomLog /home/virtual-web/piros.and/logs/access.log combined
Require all granted
ServerAdmin webmaster@piros.and
ServerName piros.and
ServerAlias www.piros.and
DirectoryIndex index.html
DocumentRoot /home/virtual-web/piros.and/htdocs/
# CGI könyvtár
ScriptAlias /cgi-bin/ /home/virtual-web/piros.and/cgi-bin/
Options +ExecCGI
# Naplófájlok
ErrorLog /home/virtual-web/piros.and/logs/error.log
CustomLog /home/virtual-web/piros.and/logs/access.log combined
Ez után töltsük újra a konfigurációt:
/etc/init.d/apache2 reload
Ellenőrizzük milyen hibák vannak:
tail /var/log/apache2/error.log
Engedélyezzük a domaint:
a2ensite piros.and
Ez után töltsük újra a konfigurációt:
/etc/init.d/apache2 reload
Ellenőrizzük a weblap elérhetőségét:
lynx http://piros.and
A website elérésével kapcsolatos hibák ez után itt:
ErrorLog /home/virtual-web/piros.and/logs/error.log
A weblapról elérési adatok:
CustomLog /home/virtual-web/piros.and/logs/access.log combined
==== IP alapú virtualhost ====
ServerAdmin valaki@zold.and
DocumentRoot /home/www/tanar
Require all granted
ServerAdmin valaki@zold.and
DocumentRoot /home/www/diak
Require all granted
Engedélyezzük a beállítást:
a2ensite
systemctl restart apache2
===== Ellenőrző eszközök =====
==== Böngésző ====
apt-get install lynx
A lynx egy karakteres böngésző.
==== Terhelés ====
apt-get install apachetop
===== MySQL azonosítás =====
apt-get install libapache2-mod-auth-mysql
a2enmod auth_mysql
mysql -u root -p
grant all on auth.* to auth_user@localhost identified by 'titok';
create database auth;
use auth;
CREATE TABLE `clients` (
`username` varchar(30) NOT NULL default '',
`passwd` varchar(25) NOT NULL default '',
`groups` varchar(25) NOT NULL default '',
PRIMARY KEY (`username`),
KEY `groups` (`groups`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `clients` VALUES ('joska', 'titok', 'info');
mcedit /etc/apache2/httpd.conf
Auth_MySQL_Info localhost auth_user titok
AuthName "Azonositas"
AuthType Basic
AuthBasicAuthoritative off
AuthMySQL On
AuthMySQL_Authoritative on
AuthMySQL_DB auth
AuthMySQL_Password_Table clients
AuthMySQL_Group_Table clients
AuthMySQL_Empty_Passwords off
AuthMySQL_Encryption_Types Plaintext Crypt_DES
AuthMySQL_Username_Field username
AuthMySQL_Password_Field passwd
require valid-user
===== ASP =====
Néha a webmesterek ASP-t szeretnének futtatni a webszerverünkön. Ehhez Mono nevű csomag
telepítésére van szükség:
apt-get install libapache2-mod-mono
===== SSL =====
==== SSL engedélyezése ====
SSL modul engedélyezése:
a2enmod ssl
# a2enmod ssl
Considering dependency setenvif for ssl:
Module setenvif already enabled
Considering dependency mime for ssl:
Module mime already enabled
Considering dependency socache_shmcb for ssl:
Enabling module socache_shmcb.
Enabling module ssl.
See /usr/share/doc/apache2/README.Debian.gz on how to configure SSL and create self-signed certificates.
To activate the new configuration, you need to run:
systemctl restart apache2
Az SSL site engedélyezése:
a2ensite default-ssl
# a2ensite default-ssl
Enabling site default-ssl.
To activate the new configuration, you need to run:
systemctl reload apache2
==== Tanúsítvány elkészítése ====
Csináljunk a tanúsítványoknak helyet:
# mkdir /etc/apache2/ssl
A tanúsítványok másik szokásos helye lehet:
/etc/ssl/certs/
Tanúsítvány készítése:
# openssl req -x509 -nodes \
-days 365 -newkey rsa:2048 \
-keyout /etc/apache2/ssl/apache.key \
-out /etc/apache2/ssl/apache.crt
A futtatás eredménye, egy konkrét példán:
# openssl req -x509 -nodes \
-days 365 -newkey rsa:2048 \
-keyout /etc/apache2/ssl/apache.key \
-out /etc/apache2/ssl/apache.crt
Generating a 2048 bit RSA private key
..................+++
........+++
writing new private key to '/etc/apache2/ssl/apache.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:HU
State or Province Name (full name) [Some-State]:Hungary
Locality Name (eg, city) []:Budapest
Organization Name (eg, company) [Internet Widgits Pty Ltd]:ZoldRt
Organizational Unit Name (eg, section) []:Informatika
Common Name (e.g. server FQDN or YOUR name) []:zold.and
Email Address []:admin@zold.and
A kapcsolók rendre:
* -x509 -- A tanúsítvány típusa
* -nodes -- A titkos kulcs ne legyen DES algoritmussal titkosítva.
* Ha elhagyjuk, akkor 3DES-CBC-el titkosítva lesz kulcs és a jelszót pedig bekéri.
* Ha le lenne titkosítva, meg kellene adni szerver indulásakor a jelszót.
* -days 365 -- Egy évig legyen érvényes a tanúsítvány
* -newkey rsa:2048 -- A kulcs RSA algoritmussal készüljön, legyen 2048 bites
* -keyout /etc/apache2/ssl/apache.key -- a titkos kulcs helye és neve
* -out /etc/apache2/ssl/apache.crt -- a tanúsítvány helye és neve
Kulcsok védelme:
# chmod 600 /etc/apache2/ssl/*
==== Kulcsok beállítása az apache-ban ====
Kulcsok beállítása az apache-ban.
nano /etc/apache2/sites-available/default-ssl.conf
Tartalmában javítjuk:
[...]
SSLCertificateFile /etc/apache2/ssl/apache.crt
SSLCertificateKeyFile /etc/apache2/ssl/apache.key
[...]
==== Végül ====
Apache újraindítása:
systemctl restart apache2
Ellenőrzés:
https://zold.and
===== Rewrite =====
==== A rewritingról ====
Egy címet, útvonalat újraírhatunk segítségével. Felhasználásának számtalan módja lehet, mi most csak
egy egyszerű http https átirányítást fogunk megnézni a példa kedvéért.
==== A rewrite modul engedélyezése ====
a2enmod rewrite
systemctl restart apache2
==== Átirányítás ====
Először engedélyezzük az átírást:
RewriteEngine On
Ellenőrizzük, hogy nincs HTTPS kapcsolat:
RewriteCond %{HTTPS} !=on
Ezek után a kérést átirányítjuk ugyanarra a címre, de https protokollal.
RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]
Például:
http://zold.and -> https://zold.and
A beállításoknak két helye legyen:
* httpd.conf
* .htaccess
A .htaccess fájlban való használathoz be kell állítani a httpd.conf fájlban a következő tulajdonságot:
AllowOverride
Esetleg az alábbi sor helyettesíthető:
RewriteCond %{HTTPS} !=on
ezzel:
RewriteCond %{HTTPS} off
==== Könyvtár megadása ====
A következő sorokat tegyük a .htaccess fájlba.
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^/?secure/(.*) https://%{SERVER_NAME}/secure/$1 [R,L]
Például:
http://zold.and/titkos/ -> https://zold.and/titkos/
==== Favicon példa ====
# REDIRECT FAVICON REQUESTS
RewriteEngine on
RewriteCond %{REQUEST_URI} !^/favicon\.ico [NC]
RewriteCond %{REQUEST_URI} favicon\.ico [NC]
RewriteRule (.*) http://domain.tld/favicon.ico [R=301,L]
===== Átirányítás =====
Minden hivatkozást átirányítunk egy másik címre. Lehet /etc/apache2/httpd.conf, vagy egy helyi .htaccess fájlban.
Lehet Directory direktíva között:
RedirectMatch permanent ^(.*)$ http://masikdomain.valahol
Lehet Location direktíva között:
RedirectMatch permanent ^(.*)$ http://masikdomain.valahol
A következő példában ha a blog könyvtár vagy annak egy alkönyvtárrára hivatkozik valaki, akkor
átirányítás történik:
RedirectMatch 301 ^/blog/.*$ http://domain.tld/target.html
Ha csak a blog könyvtárra szeretnénk:
RedirectMatch 301 ^/blog/$ http://domain.tld/target.html
Esetleg csak domainnel:
RedirectMatch 301 ^/blog/$ http://domain.tld/
Más variációk, amelyekben benne van az ideiglenes (302) és a tartós (301) átirányítás:
# Tartós átirányítás
RedirectMatch 301 ^/blog/.*$ http://domain.tld/target.html
# Ideiglenes átirányitás:
RedirectMatch 302 ^/blog/.*$ http://domain.tld/target.html
Ilyeneket is írhatunk:
# Állandó átirányítás:
RedirectMatch permanent ^/blog/.*$ http://domain.tld/target.html
# Ideigelnes átirányítás:
RedirectMatch temp ^/blog/.*$ http://domain.tld/target.html
===== Port és IP cím =====
Az /etc/apache2/ports.conf állományban alapértelmezetten be van állítva a 80-as port használatra.
Ebben az állományban megadhatunk más portokat is a "Listen" direktívával.
Listen 80
A Listen direktíva többször is használható, megadhatunk újabb portokat is:
Listen 80
Listen 8000
Egyszerre megadható IP cím is:
Listen 192.168.1.1:80
Megahdató IPv6-os cím is:
Listen 2001:db8::
Minden IP címen figyelünk:
Listen 0:0:0:0:80
===== CGI =====
CGI futtatható a könyvtárból.
Options +ExecCGI
CGI scriptek kiterjesztésének megadása:
AddHandler cgi-script .cgi .pl
A .cgi és a .pl kiterjesztéseket szeretnénk használni.
Options +ExecCGI
AddHandler cgi-script .cgi
Options +ExecCGI
SetHandler cgi-script
Egy CGI program:
#!/usr/bin/perl
print "Content-type: text/html\n\n";
print "Helló Világ";
===== Ellenőrzés =====
apt-get install apache2-utils
ab http://domainnev.hu/konyvtar
Sebesség teszt. Csak domainre nem működik, alkönyvtárra használjuk.
===== Userdir =====
A felhasználóknak szeretnénk lehetővé tenni, hogy saját weblapjaikat a public_html könyvtárban
elhelyezhessék, azokra így hivatkozhassanak a böngészőben:
http://domainnev/~felhasznalonev/
Ehhez engedélyeznünk kell a userdir modult:
a2enmod userdir
service apache2 restart
Ha PHP is szeretnénk nekik engedélyezni, akkor:
mcedit /etc/apache2/mods-available/php5.conf
Megkeressük a következő részt:
php_admin_value engine Off
A php_admin_flag engine On sort be kell szúrni.
php_admin_value engine Off
php_admin_flag engine On
Biztonsági okokból, konkrétan, hogy egyik felhasználó ne lásson a másik könyvtárába,
a joska felhasználónak lehet be van állítva a következő:
chmod o-x /home/joska
Ebben az esetben nem fog működni a böngészőben a http://servernev/~joska/
Sajnos engedélyezni kell:
chmod o+x /home/joska
===== PHP modulok =====
# apt install php7.0 php7.0-mysql php7.0-xml
===== PHP kezelése =====
Telepítése után nem minden modul kerül engedélyezésre.
PHP modulok engedélyezése:
php5enmod imap
service apache2 restart
Modulok megtekintése:
php -m
===== Teljesítmnyteszt =====
Az ab parancs az apache2-utils csomag része. Az ab parancs segítségével
teljesítményteszteket végezhetünk a webszerverünkön:
ab -n 1000 -c 100 http://localhost/
| -n | a kérések száma |
| -c | a konkurens kérések száma |
===== Konfig =====
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
sudo service apache2 restart
===== Feladatok =====
==== Feladat 001 ====
Készítse el a következő könyvtárat:
/var/www/szamvitel
Állítsa be a következőket:
* nem indexelhető
* könyvtárlista látszik
* kezdőlap: elso.html
==== Feladat 002 ====
Készítse el a következő könyvtárat:
/var/www/info
Állítsa be a következőket:
* indexelhető
* könyvtárlista látszik
* kezdőlap nincs
Hozza létre a következő két állományt:
* jelszo.html
* telepites.html
==== Feladat 003 ====
Készítse el a következő könyvtárat:
/usr/local/ets
Hozza létre a következő tartalmú állományt:
Hozzon létre Aliast a könyvtárra.
==== Feladat 004 ====
Készítse el a következő könyvtárat:
/var/www/raktar
Állítsa be a következőket:
* legyen listázható
* kiinduló állomány: kezdes.html
* Hozza létre még a következő két állományt
* torzs.html
* selejt.html
==== Feladat 005 ====
Készítse el a következő könyvtárat:
/var/www/kommunikacio
Állítsa be a következőket:
* ne legyen listázható
* kiindulási állomány: index.html
==== Feladat 006 ====
* Tartomány A 192.168.8.
* Tartomány B 192.168.5.
==== Feladat 101 ====
Vegyen fel egy új Virtualhostot:
lila.org
Dokumentumroot:
/home/virtual-www/lila.org/htdocs
Naplózás:
/home/virtual-www/lila.org/
Alias:
* www.lila.org
* w3.lila.org
* kekespiros.org
/etc/hosts
==== Feladat 102 ====
Vegyen fel egy új Virtualhostot:
gomb.hu
Docroot:
/home/virtual-www/gomb.hu/www
Naplózás:
/home/virtual-www/gomb.hu/
Alias:
* www
* kis
* nagy
* perem
Azonosítás:
/home/virtual-www/gomb.hu/www/vedett
A következő felhasználók legyenek:
* tamas
* lori
* peti
Jelszó fájl:
/home/virtual-www/gomb.hu/jelszo
==== Feladat 103 ====
Vegyen fel egy új Virtualhostot:
pater.hu
DocRoot:
/home/vhosts/pater.hu/www/
Naplózás:
/home/vhosts/pater.hu/error.log
/home/vhosts/pater.hu/access.log
Alias:
* www.pater.hu
* arend.pater.hu
Állítsa be a következőket:
/home/vhosts/pater.hu/www/novicius
* A "rend" nevű csoport csak olvashatja
* A "novicius" csoport csak azonosítással olvashatja
Csoportok:
* rend tagjai
* apat
* peter
* tibor
* elemer tagjai:
* izsak
* feri
==== Feladat 104 ====
Vegyen fel egy új Virtualhostot:
pirosszolo.hu
DocRoot:
/home/vhosts/pirosszolo.hu/public_html
Naplózás:
/home/vhosts/pirosszolo.hu/
Alias:
* redszolo.hu
* www.redszolo.hu
* www.pirosszolo.hu
A következő könyvtárszerkezetet alakítsa ki:
../public_html
|-- html
|-- arak
|-- bevetel
Azonosításhoz csoportok:
* Csoportok
* ugyfel
* mankft
* jozsibt
* vker
* borasz
* juli
* mari
* tercsi
===== Irodalom =====
==== Könyv ====
* Daniel Lopez: Apache zsebkönyv
* ISBN: 9789639637320
* Ken Coar, Rich Bowen: Apache receptek
* Megoldások és példák Apache-rendszergazdáknak
* ISBN: 9789639637481
* Ben Laurie, Peter Laurie: Apache
* ISBN: 963-09-4265-8
==== Linkek ====
* http://httpd.apache.org/docs/2.2/howto/auth.html
* http://httpd.apache.org/docs/2.2/mod/mod_authz_host.html
* http://www.howtoforge.com/mod_auth_mysql_apache2_debian
* http://modauthmysql.sourceforge.net/CONFIGURE
* http://www.akadia.com/services/ssh_test_certificate.html (SSL)
* http://www.netlock.net/docs/segedletek/szerver_apache_tanusitvanyigenyles_sha256.pdf (Tanúsítvány igénylése)
* https://httpd.apache.org/docs/2.4/bind.html (2018)
SSL:
* https://www.digitalocean.com/community/tutorials/how-to-create-a-ssl-certificate-on-apache-for-debian-8 (2018)
* https://wiki.debian.org/Self-Signed_Certificate (2018)