Press "Enter" to skip to content

Debian 12 – Jak nainstalovat Apache, MariaDB, PHP (LAMP)?

Obsah:

Balíček LAMP, kombinující Linux, Apache, MariaDB a PHP, představuje jednu z nejpopulárnějších a nejrozšířenějších platform pro vývoj a hostování dynamických webových aplikací. Ve svém jádru LAMP spojuje flexibilitu a výkon open-source technologií, aby poskytl robustní a škálovatelné řešení pro webové servery. V tomto článku se zaměřím na instalaci a konfiguraci každé komponenty LAMP stacku na nejnovějším Debianu 12. Představím, jak nainstalovat a nastavit Apache, což je populární webový server, spolu s konfigurací firewallu pro zajištění „základní“ bezpečnosti. Následně proberu kroky potřebné k instalaci MariaDB, výkonného a spolehlivého systému pro správu databází, který představuje alternativu k MySQL. Dále se zaměřím na PHP, dynamický skriptovací jazyk, který je základem pro generování obsahu webu v reálném čase. Po instalaci všech těchto komponent ukáži, jak nastavit virtuálního hostitele pro správu webových stránek a jak ověřit funkčnost PHP prostřednictvím jednoduchého testu. Cílem tohoto průvodce je poskytnout čtenářům přehledný základní návod, který jim umožní efektivně nasadit a spravovat LAMP stack na systému Debian 12 a posléze se zaměřit na další kapitoly, mezi něž jistě patří téma bytelnějšího zabezpečení.

Instalace Apache

Apache, oficiálně známý jako Apache HTTP Server, je jeden z nejpopulárnějších webových serverů, open-source a zdarma. Jeho hlavní úlohou je doručování webového obsahu – to znamená, že když uživatelé zadávají adresu webové stránky do svého prohlížeče, Apache server zpracovává tyto požadavky a odesílá jim odpovídající HTML stránky, obrázky, soubory atd. Apache podporuje různé jazyky a technologie jako PHP, Perl a Python, což umožňuje vytvářet dynamické webové stránky. Apache je známý svou stabilitou, flexibilitou, a možností rozšíření prostřednictvím modulů, které umožňují přidávat nové funkce.

Instalaci Apache zahájím aktualizací seznamu dostupných balíčků a jejich verzí (ale bez skutečné instalace nebo aktualizace samotných balíčků). Tento příkaz je základním krokem v procesu správy softwaru a je důležitý pro udržování systému bezpečného a aktualizovaného:

sudo apt update

K samotné instalaci Apache použiji:

sudo apt install apache2

Po dokončení instalace bude Apache nainstalován na a připraven k použití. Mohu potom provést další konfiguraci serveru, nastavit virtuální hostitele, zabezpečení a další aspekty podle potřeb.

Instalace firewallu (UFW)

UFW, což znamená Uncomplicated Firewall (Nekomplikovaný Firewall), je uživatelsky přívětivý nástroj pro správu firewallových pravidel na Linuxových distribucích, včetně Debianu. Jeho hlavním cílem je zjednodušit proces konfigurace firewallu, což je zásadní pro zabezpečení serveru. Firewall funguje jako ochranná bariéra, která kontroluje příchozí a odchozí síťový provoz na základě definovaných pravidel. UFW umožňuje administrátorům snadno povolovat nebo blokovat připojení na určité porty a služby, což je zásadní pro ochranu serveru před neoprávněným přístupem nebo útoky. Používání UFW na serveru s Apache zajišťuje, že pouze legitimní a bezpečný provoz může dosáhnout webového serveru, zatímco potenciálně škodlivé pokusy o připojení jsou blokovány.

Základním krokem pro zabezpečení síťové komunikace na serveru je instalace a nastavení UFW – je zvláště důležitá na systémech, které jsou připojeny k internetu a poskytují nebo využívají síťové služby, jako je webový server, databáze, e-mailový server atd. Instalace UFW je jednoduchá:

sudo apt install ufw

Následující příkaz zobrazí seznam předdefinovaných aplikačních profilů. Tyto profily jsou sady pravidel pro firewall, které jsou předem nakonfigurovány pro specifické aplikace nebo služby. Každý profil obsahuje pravidla týkající se portů a protokolů, které daná aplikace nebo služba potřebuje pro svůj běh.

sudo ufw app list

UFW zkontroluje své konfigurační soubory a zobrazí seznam dostupných aplikačních profilů. Tato funkce je užitečná, protože umožňuje administrátorům rychle a snadno zjistit, jaké přednastavené konfigurace jsou dostupné pro běžné aplikace a služby, jako je Apache, OpenSSH, Samba a další.

Použití těchto předdefinovaných profilů zjednodušuje proces nastavení firewallu, protože nemusím manuálně specifikovat porty a protokoly pro každou aplikaci. Místo toho mohu jednoduše povolit nebo zakázat příslušný aplikační profil a UFW automaticky aplikuje všechna potřebná pravidla pro danou aplikaci.

Seznam předdefinovaných aplikačních profilů je například následující:

Available applications:
AIM
Bonjour
CIFS
DNS
Deluge
IMAP
IMAPS
IPP
KTorrent
Kerberos Admin
Kerberos Full
Kerberos KDC
Kerberos Password
LDAP
LDAPS
LPD
MSN
MSN SSL
Mail submission
NFS
OpenSSH
POP3
POP3S
PeopleNearby
SMTP
SSH
Socks
Telnet
Transmission
Transparent Proxy
VNC
WWW
WWW Cache
WWW Full
WWW Secure
XMPP
Yahoo
qBittorrent
svnserve

Profily WWW slouží ke správě portů používaných webovými servery:

...
WWW
WWW Cache
WWW Full
WWW Secure
...

Průzkumem WWW Full zjistíme, jestli je povolen provoz na portech 80 a 443:

sudo ufw app info "WWW Full"

Výstup může být například:

Profile: WWW Full
Title: Web Server (HTTP,HTTPS)
Description: Web Server (HTTP,HTTPS)

Ports:
80,443/tcp

Mezi další důležité příkazy patří:

  • sudo ufw status: Tento příkaz se používá k zobrazení aktuálního stavu UFW a seznamu všech aktivních pravidel firewallu. Umožňuje vám zjistit, zda je firewall zapnutý nebo vypnutý, a také zobrazit, které porty jsou otevřené a jaká pravidla jsou aplikována pro příchozí a odchozí síťový provoz.
  • sudo ufw enable: aktivuje UFW a zapíná firewall na systému. Po jeho spuštění začne UFW aplikovat pravidla, která jsem nastavil, a chránit systém před neoprávněným síťovým provozem. Obvykle je to jeden z prvních kroků při nastavování firewallu na novém systému.
  • sudo ufw allow 'WWW Full': Povoluje veškerý příchozí webový provoz (WWW), což zahrnuje jak HTTP (port 80), tak HTTPS (port 443). Příkaz WWW Full je jedním z předdefinovaných profilů v UFW, který usnadňuje povolení běžně používaných portů pro webové servery. Toto nastavení je užitečné pro servery hostující webové stránky, protože umožňuje uživatelům přistupovat k webovým stránkám přes běžné webové protokoly.
  • Atd.

Ověření, že nastavení proběhlo podle očekávání

To, že nastavení proběhlo podle očekávání, můžeme ověřit tak, že v prohlížeči zadáme veřejnou IP adresu (na obrázku namísto xx.xx.xx.xx je třeba mít skutečnou IPv4, případně IPv6 vloženou do hranatých závorek – např. [2a05:3b40:ff:34f::1]) – jestliže prohlížeč vrátí níže uvedenou stránku, nyní webový server správně nainstalován a přístupný přes bránu firewall.

Instalace MariaDB

MariaDB je relační databázový správcovský systém (RDBMS), který vznikl jako fork (odnož) MySQL. Byl vyvinut komunitou vývojářů a je podporován komerčně, ale zároveň zůstává volným a open-source softwarem. Vývoj MariaDB vede několik původních vývojářů MySQL, kteří se rozhodli pro fork v reakci na obavy ohledně akvizice MySQL společností Oracle Corporation v roce 2009.

MariaDB je populární volbou pro mnoho organizací a vývojářů, kteří hledají robustní, efektivní a ekonomicky výhodnou alternativu k tradičním databázovým systémům.

K instalaci hlavního balíčku MariaDB serveru na Debianu použiji:

sudo apt install mariadb-server

Po instalace MariaDB (nebo MySQL) na Linuxových systémech se obvkle spouští následuující skript. Aby se zvýšila bezpečnost databázového serveru. Skript provede několik kroků, které odstraňují některá nezabezpečená výchozí nastavení a zabezpečují přístup k databázovému systému:

sudo mysql_secure_installation

Zde jsou základní popisy toho, co skript dělá:

  • Změna hesla pro root uživatele databáze: Skript vyzve k zadání hesla pro ‚root‘ uživatele databáze. Tento uživatel má plné oprávnění nad celým databázovým systémem. Pokud jstem MariaDB právě nainstaloval a ještě jsem nekonfigurovali žádné heslo, heslo pro root uživatele databáze bude prázdné.
  • Odstranění anonymních uživatelů: MariaDB standardně obsahuje anonymní uživatele, což může představovat bezpečnostní riziko. Skript nabídne odstranění těchto anonymních uživatelů.
  • Zakázání vzdáleného přihlášení pro root uživatele: Z bezpečnostních důvodů je doporučeno, aby root uživatel databáze neměl možnost se přihlásit z jiného počítače než je server. Skript se zeptá, zda chci tuto možnost zakázat.
  • Odstranění testovací databáze: MariaDB obsahuje testovací databázi, která je přístupná všem uživatelům. Skript nabídne její odstranění, protože může představovat bezpečnostní riziko.
  • Přenačtení tabulek oprávnění: Nakonec skript provede přenačtení tabulek oprávnění, aby se všechny změny projevily ihned.

Instalace PHP

PHP je populární open-source skriptovací jazyk, primárně určený pro vývoj webových aplikací. Je prováděn na serveru a umožňuje vytváření dynamického obsahu webových stránek, jako jsou formuláře, fóra nebo e-shopové systémy. PHP může být snadno integrován s databázemi, nejčastěji s MySQL nebo MariaDB, a spolupracuje s HTML k vytváření interaktivních a uživatelsky přizpůsobených webových stránek. Ba toho umí mnohem více – ale o tom snad jindy 🙂

Pro efektivní spolupráci PHP s webovým serverem a databází budu potřebovat několik doplňujících balíčků. Balíček php-mysql je modul PHP, který umožňuje komunikaci PHP s databázemi založenými na MySQL, jako je MariaDB. Dále je nezbytný libapache2-mod-php, což je modul, který umožňuje Apache zpracovávat PHP soubory. Základní balíčky PHP budou automaticky nainstalovány jako závislosti. Pro instalaci těchto balíčků použijete následující příkaz:

apt install php libapache2-mod-php php-mysql

Po dokončení instalace zkontroluji, jestli se nainstalovala správná verze. Tento příkaz je užitečný pro rychlou kontrolu, která verze PHP je nainstalována, a pro zjištění, zda je systém aktuální nebo zda je potřeba aktualizace:

php -v

Když konfiguruji Apache webový server pro své PHP aplikace, jedním z klíčových úprav je změna výchozího chování serveru při vyhledávání indexových souborů. Apache má tendenci automaticky vyhledávat soubor index.html jako první v adresářích, ale pro projekty založené na PHP je často preferováno, aby server našel index.php jako hlavní indexový soubor.

Abych toho dosáhl, musím upravit konfigurační soubor nazvaný dir.conf, který určuje pořadí, v jakém Apache vyhledává tyto indexové soubory. Tato úprava vyžaduje oprávnění na úrovni správce systému, protože se jedná o zásadní změnu v konfiguraci serveru.

K provedení této změny využiji například Nano, což je jednoduchý, ale účinný textový editor, přístupný přímo z příkazové řádky:

sudo nano /etc/apache2/mods-enabled/dir.conf

Tím otevřu konfigurační soubor , což mi umožní provést potřebné změny v pořadí indexových souborů.

Původní:

DirectoryIndex index.html index.cgi index.pl index.php index.xhtml index.htm

změním na (index.php dám na první místo):

DirectoryIndex index.php index.html index.cgi index.pl index.xhtml index.htm

Teď můžeme znovunačíst konfiguraci Apache:

sudo systemctl reload apache2

A zkontroluji stav služby Apache:

sudo systemctl status apache2

Vytvoření virtuálního hostitele (Virtual Host) pro web

LAMP stack je nyní plně funkční. Než však vyzkouším první PHP skript, nastavím virtuálního hostitele Apaceh, ve kterém budu mít jednotlivé soubory a adresáře webu.

Defaultně Apache obsluhuje obsah z adresáře

/var/www/html

prostřednictvím konfigurace umístěné v souboru

/etc/apache2/sites-available/000-default.conf

Začnu vytvořením adresáře pro můj web

sudo mkdir /var/www/muj_web

Přiřadím vlastnictví adresáře pomocí proměnné prostředí $USER, která bude odkazovat na aktuálního systémového uživatele:

sudo chown -R $USER:$USER /var/www/muj_web

Editorem otevřu nový konfigurační soubor v adresáři sites-available serveru Apache pomocí:

sudo nano /etc/apache2/sites-available/muj_web.conf

To vytvoří prázdný soubor, který doplním o následující obsah:

<VirtualHost *:80>
ServerName muj_web
ServerAlias www.muj_web
ServerAdmin webmaster@localhost
DocumentRoot /var/www/muj_web
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Touto konfigurací VirtualHost Apache bude obsluhovat muj_web prostřednitvím kořenového adresáře /var/www/muj_web. Nechci-li používat název domény, zakomentuji (pomocí #) nebo odstraním volby ServerName a ServerAlias.

Vytvořeného virtuálního hostitele pak povolím pomocí:

sudo a2ensite muj_web

Pokud chci vypnout defaultní konfiguraci pro výchozí web (zejména pokud nepoužívám vlastní název domény – v takovém případě by výchozí konfigurace Apache přepsala mého virtuální hostitele):

sudo a2dissite 000-default

Chci-li zkontrolovat, jestli má konfigurace neobsahuje syntaktické chyby:

sudo apache2ctl configtest

A opět je nutné znovunačíst konfiguraci:

sudo systemctl reload apache2

Ověření funkčnosti PHP

V adresáři /var/www/muj_web si vytvořím soubor:

index.php

Do tohoto souboru napíši například jednoduchý skript:

<?php
phpinfo();
?>

V prohlížeči pak zadám buď

http://moje_domena/

nebo

http://moje_domena/info.php

Tato stránka zobrazí informace o serverovém nastavení z pohledu PHP – hodí se pro ladění (ale v produkčním prostředí ji nenechávejte veřejnou – poskytnete tak cenné informace útočníkům):

Po zkontrolování tedy mohu soubor index.php odstranit:

sudo rm /var/www/muj_web/info.php

Závěr

Ukázal jsem, jak provést základní nastavení LAMP (Apache, MariaDB, PHP) na Debianu 12. Mezi další kroky jistě patří zabezpečení – ať zajištění šifrovaného přenosu pomocí HTTPS nebo další zabezpečení proti různým slabinám či útokům. O tom však v dalších kapitolách.