Instalace MariaDB na Debian 12 (Bookworm) je poměrně (avšak relativně) přímočarý proces, který zahrnuje použití příkazové řádky a správce balíčků APT. MariaDB je populární open-source databázový server, který je vysoce kompatibilní s MySQL, což z něj činí vhodnou volbu pro mnoho aplikací. Níže je uveden krok za krokem proces instalace MariaDB na Debian 12:
Aktualizace seznamu balíčků
Před instalací jakéhokoliv nového softwaru je dobrým zvykem aktualizovat seznam dostupných balíčků a jejich verzí v repozitářích. To zajistí, že nainstaluji nejnovější dostupnou verzi MariaDB. Otevřu terminál a spustím následující příkaz:
sudo apt update
Pro Debian 12 (Bookworm) je dostupná MariaDB verze 10.11 (k datu psaní tohoto článku konkrétně 10.11.6 (10.11.6-MariaDB-0+deb12u1)) – viz Distributions Which Include MariaDB. Ačkoliv oficiální vydání MariaDB je nyní ve verzi 11.2, Debian 12 (Bookworm) nabízí verzi 10.11 zřejmě jako kompromis mezi stabilitou, bezpečností a kompatibilitou. Uživatelé, kteří potřebují nejnovější verzi MariaDB nebo jiného softwaru, mohou v některých případech např. přidat externí repozitáře nebo použít kontejnery (např. Docker) k běhu specifických verzí softwaru izolovaně od hlavního systému – je však zapotřebí zvážit možná pro a proti:
- Využití externích repozitářů:
- Možné výhody:
- Přístup k nejnovějším verzím: Umožňuje instalaci nejnovějších verzí softwaru, které nejsou dostupné v různých repozitářích Debianu.
- Vylepšené funkce: Novější verze často přinášejí nové funkce, vylepšení výkonu a opravy chyb, které nejsou dostupné ve starších verzích.
- Atd.
- Možné nevýhody:
- Stabilita a kompatibilita: Novější software nemusí být tak důkladně testován s ostatními balíčky v Debianu, což může vést k nestabilitě nebo problémům s kompatibilitou.
- Bezpečnost: Externí repozitáře mohou představovat bezpečnostní riziko, pokud jsou nedůvěryhodné či špatně udržované.
- Podpora: Uživatelé mohou čelit obtížím při hledání podpory při řešení problémů, které vznikají v důsledku používání software z externích zdrojů.
- Atd.
- Možné výhody:
- Využití kontejnerů:
- Možné výhody:
- Izolace: Kontejnery izolují software a jeho „závislosti“ (v uvozovkách) od hostitelského systému, což zjednodušuje správu verzí a minimalizuje konflikty mezi balíčky.
- Přenositelnost: Kontejnery mohou běžet konzistentně napříč různými prostředími, což usnadňuje vývoj a testování.
- Snadná instalace a odstranění: Kontejnery jsou snadno vytvářeny a odstraňovány, což umožňuje rychlé nasazení a odstranění aplikací bez ovlivnění hostitelského systému.
- Možné nevýhody:
- Naučná Křivka: Práce s kontejnery vyžaduje znalost nástrojů pro kontejnerizaci a jejich správnou konfiguraci.
- Výkon: Ačkoliv kontejnery jsou efektivní, může izolace a abstrakce přinést jisté režijní náklady na výkon ve srovnání s přímou instalací na hostitelském systému.
- Bezpečnost: Kontejnery sdílejí jádro hostitelského systému, což může představovat bezpečnostní riziko, pokud nejsou správně izolovány nebo konfigurovány.
- Možné výhody:
Při rozhodování mezi přímou instalací, pomocí externích repozitářů, použitím kontejnerů… je důležité zvážit specifické potřeby projektu nebo organizace, jakož i technické schopnosti a zdroje pro správu a udržování systému.
Je velmi důležité sledovat a zajistit, že verze softwaru, kterou používám (v tomto případě MariaDB na Debianu 12), neobsahuje známé zranitelnosti, a pokud ano, že tyto zranitelnosti jsou v podporovaných verzích opraveny. Debian a většina ostatních distribucí Linuxu poskytují bezpečnostní aktualizace pro opravu zranitelností v softwaru, který je součástí jejich oficiálních repozitářů. To zahrnuje i MariaDB. Může se jednat například o zranitelnost CVE-2023-515.
Instalace MariaDB
Po aktualizaci seznamu balíčků mohu pokračovat v instalaci MariaDB pomocí následujícího příkazu:
sudo apt install mariadb-server
Zabezpečení MariaDB
Po instalaci je důležité spustit skript pro zabezpečení, který mě provede několika otázkami, aby se zvýšila bezpečnost databázové instance MariaDB. Tento skript odstraní některé nebezpečné výchozí nastavení a omezí přístup k databázi. Spustím zabezpečovací skript pomocí příkazu:
sudo mysql_secure_installation
Během tohoto procesu mi bude položeno několik otázek, například zda chci nastavit heslo pro uživatele root, odstranit anonymní uživatele, zakázat vzdálené přihlášení root uživatele, odstranit databázi test a načíst tabulky oprávnění. Doporučuje se odpovědět kladně na většinu těchto otázek pro zvýšení bezpečnosti.
Heslo pro root

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!
In order to log into MariaDB to secure it, we'll need the current password for the root user. If you've just installed MariaDB, and haven't set the root password yet, you should just press enter here.
Enter current password for root (enter for none):
---
POZNÁMKA: SPUŠTĚNÍ VŠECH ČÁSTÍ TOHOTO SKRIPTU DOPORUČUJEME PRO VŠECHNY SERVERY MariaDB, KTERÉ SE POUŽÍVAJÍ V PRODUKCI! PROSÍM, ČTĚTE POZORNĚ KAŽDÝ KROK!
Abychom se mohli přihlásit do MariaDB, abychom ji zabezpečili, budeme potřebovat aktuální heslo pro uživatele root. Pokud jste právě nainstalovali MariaDB a ještě jste nenastavili heslo root, měli byste zde stisknout enter.
Zadejte aktuální heslo pro root (zadejte žádné):
Zpráva mě informuje, že pro pokračování ve skriptu a zabezpečení MariaDB je potřeba zadat současné heslo pro uživatele root
. Pokud jsem MariaDB právě nainstaloval a ještě jsem pro root uživatele nenastavili heslo, měl bych jednoduše stisknout klávesu Enter, protože v tomto momentě by heslo pro root uživatele nemělo být nastaveno.
Tento krok je výzva k zadání hesla, aby skript mohl pokračovat v dalších bezpečnostních opatřeních, jako je nastavení nového hesla pro root uživatele (pokud ještě není nastaveno), odstranění anonymních uživatelů, zakázání vzdáleného root přístupu, odstranění testovací databáze a aplikování těchto změn. Pokud heslo pro root uživatele už bylo nastaveno, měl bych ho v tomto kroku zadat. Pokud ne, jednoduše stisknu Enter a pokračuji dle pokynů skriptu.
Poznámka k uživateli root: Uživatel root v kontextu MariaDB (nebo MySQL) je odlišný od uživatele root v Linuxu. I když oba mají významná oprávnění v rámci svých daných systémů, jedná se o zcela různé účty s různými účely:
- Linuxový
root
uživatel je superuživatel na úrovni operačního systému s neomezenými oprávněními k provedení jakékoli operace na Linuxovém systému. Tento účet může upravovat systémové soubory, instalovat a odstraňovat software, měnit nastavení systému, a v podstatě dělat cokoliv na serveru nebo počítači. - MariaDB
root
uživatel je superuživatel v rámci databázového systému MariaDB (nebo MySQL). Tento účet má plná oprávnění pro provádění všech operací nad databázemi, včetně vytváření a mazání databází, udělování a odebírání oprávnění ostatním uživatelům, a provádění jakýchkoliv SQL příkazů. Oprávnění tohoto uživatele jsou omezena pouze na rámec databázového systému a nemají žádný vliv na zbytek operačního systému.
Když skript mysql_secure_installation
nebo jakýkoli jiný proces v rámci MariaDB žádá o heslo pro root
, vždy se jedná o heslo pro uživatele root
specifického pro databázový systém MariaDB, nikoliv o heslo pro Linuxového superuživatele.
Pokud stisknu Enter, protože jsem heslo ještě nenastavil:
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!
In order to log into MariaDB to secure it, we'll need the current password for the root user. If you've just installed MariaDB, and haven't set the root password yet, you should just press enter here.
Enter current password for root (enter for none):
OK, successfully used password, moving on...
Setting the root password or using the unix_socket ensures that nobody can log into the MariaDB root user without th proper authorisation.
You already have your root account protected, so you can safely ansver 'n'.
Switch to unix_socket authentication [Y/n]
---
POZNÁMKA: SPUŠTĚNÍ VŠECH ČÁSTÍ TOHOTO SKRIPTU DOPORUČUJEME PRO VŠECHNY SERVERY MariaDB, KTERÉ SE POUŽÍVAJÍ V PRODUKCI! PROSÍM, ČTĚTE POZORNĚ KAŽDÝ KROK!
Abychom se mohli přihlásit do MariaDB, abychom ji zabezpečili, budeme potřebovat aktuální heslo pro uživatele root. Pokud jste právě nainstalovali MariaDB a ještě jste nenastavili heslo root, měli byste zde stisknout enter.
Zadejte aktuální heslo pro root (zadejte žádné):
OK, úspěšně použité heslo, pokračujem...
Nastavení hesla uživatele root nebo použití unix_socket zajistí, že se nikdo nemůže přihlásit k uživateli root v MariaDB bez řádné autorizace.
Už máte svůj root účet chráněný, takže můžete bezpečně odpovědět 'n'.
Přepnout na ověřování unix_socket [A/n]
Hláška „Setting the root password or using the unix_socket ensures that nobody can log into the MariaDB root user without the proper authorization“ informuje o dvou hlavních způsobech, jak zabezpečit přístup k uživateli root
v databázi MariaDB, aby se zajistilo, že k němu nemůže získat přístup nikdo, kdo k tomu nemá oprávnění.
- Nastavení hesla root uživatele: Je tradičním způsobem, jak zabezpečit účet. Nastavením silného hesla pro uživatele
root
databáze se zajistí, že se k databázi může přihlásit pouze někdo, kdo toto heslo zná. Je to základní zabezpečení, které by mělo být provedeno během počátečního nastavení MariaDB. - Použití ověřování unix_socket: Unix_socket ověřování je metoda, která umožňuje uživatelům systému se přihlásit do MariaDB bez hesla, pokud jejich systémový uživatelský účet odpovídá uživatelskému účtu MariaDB a pokud je připojení prováděno přes Unix socket. To znamená, že pokud mám oprávnění roota v operačním systému (tj. mohu používat sudo) a je pro MariaDB nastaveno ověřování unix_socket, mohu se přihlásit k MariaDB jako root bez zadání databázového hesla (avšak pro získání těchto oprávnění v operačním systému je obvykle potřeba zadat heslo uživatele systému). Tato metoda využívá ověření na základě operačního systému a je považována za velmi bezpečnou v prostředích, kde kvalitní správa uživatelů systému.
Jsem dotázán, zda chci přepnout na ověřování unixových soketů. Potvrdím, že ano „Y“ (Téma, jak k se k zabezpečení v této části postavit, je téma rozsáhlejší, proto se k němu vrátím později).

Enabled successfully'
Reloading privilege tables..
... Success!
You already have your root account protected, so you can safely answer 'n'
---
Úspěšně povoleno'
Znovu načítání tabulek oprávnění...
... Úspěch!
Už máte svůj root účet chráněný, takže můžete bezpečně odpovědět 'n'
Když skript mysql_secure_installation
naznačuje, že root účet je již chráněný a mohu bezpečně odpovědět ‚n‘ na otázku o změně hesla, znamená to, že nastavení zabezpečení je již na dobré úrovni. Tedy potvrdím ‚n‘.

By default, a MariaDB installation has an anonymous user, allowing anyoune to log into MariaDB without having to have a user account created for them. This is intended only for testing, and to make the installation go a bit smoother. You should remove them before moving into a production environment.
Remove anonymous users? [Y/n]
---
Ve výchozím nastavení má instalace MariaDB anonymního uživatele, který umožňuje komukoli přihlásit se do MariaDB, aniž by pro něj musel mít vytvořený uživatelský účet. Toto je určeno pouze pro testování a aby instalace probíhala trochu hladce. Před přesunem do produkčního prostředí byste je měli odstranit.
Odebrat anonymní uživatele? [A/n]
Odpověď „Yes“ (ano, tedy ‚Y‘) na tuto otázku je doporučeným postupem pro zvýšení bezpečnosti MariaDB instalace. Anonymní uživatelé v MariaDB (nebo MySQL) jsou vytvořeni výchozí instalací a umožňují komukoliv se přihlásit k databázovému serveru bez zadání uživatelského jména a hesla. Jakmile se přihlásí, mohou mít omezený přístup k databázím, ale jejich přítomnost představuje potenciální bezpečnostní riziko, zejména v produkčním prostředí.
Odstranění anonymních uživatelů zabrání neautorizovaným osobám v přístupu k databázi, což je důležitý krok k zajištění, že pouze oprávnění uživatelé s definovanými přihlašovacími údaji mohou interagovat s databázovým serverem. To pomáhá zabránit neoprávněným pokusům o přístup a potenciálním útokům.
Takže, když skript mysql_secure_installation
položí otázku „Remove anonymous users?“, odpovím ‚Y‘ a pokračuji s doporučenými bezpečnostními opatřeními pro nastavení MariaDB databáze.

... Success!
Normally, root should only by allowed to connect from 'localhost'. This ensure that someone cannot guess at the root password from the network.
Disallow root login remotely? [Y/n]
---
... Úspěch!
Normálně by měl mít root povoleno připojení pouze z 'localhost'. Tím je zajištěno, že nikdo nemůže uhodnout heslo root ze sítě.
Zakázat vzdálené přihlášení root? [A/n]
Odpovědí „Y“ (ano) na otázku „Disallow root login remotely?“ se zvýší bezpečnost MariaDB instalace tím, že se zabrání vzdálenému přihlášení uživatele root. To znamená, že uživatel root bude moci přistupovat k databázi pouze z lokálního stroje, na kterém běží MariaDB. Toto omezení je důležitým bezpečnostním opatřením, protože uživatel root má plná oprávnění a jeho kompromitace by mohla vést k závažným bezpečnostním problémům.
Vzdálený přístup pro účty root je často cílem útoků, protože uživatelé root mají neomezený přístup ke všem databázím a tabulkám. Zablokování vzdáleného přístupu pro root snižuje riziko neoprávněného přístupu z internetu.
Pokud budu potřebovat v budoucnu vzdáleně spravovat k databázi, doporučuje se vytvořit specifické uživatelské účty s omezenými oprávněními pro konkrétní úkoly nebo databáze a vždy používat bezpečné metody připojení, jako je VPN nebo SSH tunel.

... Success!
By default, MariaDB comes with a database named 'test' that anyone can access. This is also intended only for testing, and should be removed before moving into a production anvironment.
Remove test database and access to into? [Y/n]
---
... Úspěch!
Ve výchozím nastavení přichází MariaDB s databází s názvem „test“, ke které má kdokoli přístup. Toto je také určeno pouze pro testování a před přesunem do produkčního prostředí by mělo být odstraněno.
Odebrat testovací databázi a přístup do? [A/n]
Odpovědí „Y“ (ano) na otázku „Remove test database and access to it?“ se odstraní testovací databáze, která je součástí výchozí instalace MariaDB, a zároveň se odebere přístup k ní. Tato akce je doporučena jako další bezpečnostní opatření před přechodem do produkčního prostředí.
Testovací databáze ‚test‘ a obecný přístup k ní jsou určeny pouze pro testovací účely a její přítomnost ve může představovat bezpečnostní riziko, protože umožňuje všem uživatelům (včetně anonymních) přístup. Odstraněním této databáze a omezením přístupu k ní zvýším bezpečnost databázové instance.
Tímto krokem se zabezpečí, že nebudou existovat žádné zbytečné databáze, které by mohly být zneužity pro neautorizované testování nebo útoky. Po odstranění testovací databáze a omezení přístupu k ní pokračuji v dalších doporučených krocích bezpečnostního nastavení a konfigurace MariaDB podle skriptu mysql_secure_installation
.

- Dropping test database...
... Success!
- Removin privileges on test database...
... Success!
Reloading the privilege tables will ensure that all changes made so far will take effect immediately.
Reload privilege tables now? [Y/n]
---
- Rušení testovací databáze...
... Úspěch!
- Odebrat oprávnění k testovací databázi...
... Úspěch!
Opětovné načtení tabulek oprávnění zajistí, že všechny dosud provedené změny se okamžitě projeví.
Znovu načíst tabulky oprávnění? [A/n]
Odpovědí „Y“ (ano) na otázku „Reload privilege tables now?“ zajistím, že všechny změny, které jsem provedli během procesu zabezpečení pomocí skriptu mysql_secure_installation
, včetně odstranění testovací databáze a změn oprávnění, okamžitě nabydou účinku. Tento krok je zásadní pro aplikování bezpečnostních nastavení, která jste provedli, na databázový systém MariaDB.
Reload tabulek oprávnění způsobí, že MariaDB znovu načte informace o oprávněních z interních tabulek, jako jsou mysql.user
, mysql.db
a další. To zajišťuje, že jakékoli změny v oprávněních nebo nově vytvořené uživatelské účty jsou okamžitě rozpoznány a aplikovány, takže nejsou zapotřebí žádné další restarty nebo manuální kroky k aktivaci změn.
Tento krok je důležitým závěrem procesu nastavení a zabezpečení vaší instalace MariaDB, a doporučuje se jej vždy provést po dokončení změn v oprávněních nebo konfiguraci související s bezpečností.

... Success!
Cleaning up...
All done! If you've completed all of the above steps, your MariaDB installation should now be secure.
Thanks for using MariaDB!
---
... Úspěch!
Čištění...
Vše hotovo! Pokud jste provedli všechny výše uvedené kroky, vaše instalace MariaDB by nyní měla být zabezpečená.
Děkujeme, že používáte MariaDB!
Po instalaci
Pokud mám oprávnění roota v operačním systému (tj. mohu používat sudo) a je pro MariaDB nastaveno ověřování unix_socket, mohu se přihlásit k MariaDB jako root bez zadání databázového hesla (avšak pro získání těchto oprávnění v operačním systému je obvykle potřeba zadat heslo uživatele systému):
sudo mysql
Zobrazím si existující tatabáze:
SHOW DATABASES;

Výstup příkazu SHOW DATABASES;, který jste spustili, zobrazuje seznam systémových a služebních databází, které jsou standardně přítomné v MariaDB:
- information_schema: Tato databáze obsahuje metadata o ostatních databázích. Informace o všech tabulkách, sloupcích, indexech atd. v serveru MariaDB jsou dostupné zde jako tabulky, které mohu dotazovat.
- mysql: Databáze
mysql
je velmi důležitá, protože obsahuje uživatelská data, jako jsou uživatelská jména, hesla (ve formě hashů), oprávnění a další informace potřebné pro ověřování a autorizaci uživatelů MariaDB. - performance_schema: Tato databáze slouží k monitorování výkonu MariaDB serveru. Obsahuje tabulky, které mohu dotazovat pro získání informací o výkonu, například informace o dotazech, které běží, zdroje zátěže a tak dále.
- sys: Databáze
sys
je nadstavba nadperformance_schema
a usnadňuje přístup k informacím o výkonu tím, že poskytuje pohledy a uložené procedury, které zjednodušují získávání a interpretaci těchto dat.
Vyberu databázi pro použití:
USE mysql;

Zobrazím si schéma tabulky user:
DESCRIBE user;

Atd. Doporučuji zkontrolovat, jestli v databázi jsou opravdu záznamy ve shodě s konfigurací.
Zobrazení verze databáze
SELECT VERSION();
Preventivní kontrola skutečného nastavení
I když jsem během instalace použili skript mysql_secure_installation
, je dobré zkontrolovat skutečné nastavení vaší MariaDB (nebo MySQL) databáze. Skript mysql_secure_installation
je užitečný nástroj pro základní zabezpečení databáze, ale může existovat několik dalších aspektů konfigurace a zabezpečení, které tento skript neřeší (anebo mohl vyřešit chybně). Kontrolou nastavení mohu zajistit, že databáze je co nejvíce zabezpečená a konfigurovaná podle nejlepších praktik a specifických potřeb dané aplikace.
Zde jsou některé aspekty a nastavení, které bych měl zvážit ke kontrole a optimalizaci:
Kontrola uživatelů a jejich oprávnění
Ujistím se, že všechny databázové účty mají nastavená silná hesla a jsou omezeny pouze na nezbytná oprávnění. Zkontroluji, zda neexistují žádné nepotřebné nebo anonymní účty:
SELECT User, Host, authentication_string FROM mysql.user;
Kontrola nastavení bind-address
Ujistím se, že MariaDB naslouchá pouze na bezpečných rozhraních. Nastavení bind-address
v konfiguračním souboru (/etc/mysql/mariadb.conf.d/50-server.cnf
nebo podobný soubor) by mělo být nastaveno na 127.0.0.1
pro lokální přístup nebo na specifickou bezpečnou síťovou adresu, pokud je vyžadován vzdálený přístup.
Použití šifrované komunikace
Pokud je aplikace připojena k MariaDB serveru přes síť, zvažím použití SSL/TLS pro šifrování komunikace mezi vaší aplikací a databázovým serverem.
Kontrola databázových záloh
Ujistím se, že mám nastavenou strategii pravidelného zálohování pro databáze a že zálohy jsou uloženy na bezpečném místě.
Aktualizace a patche
Pravidelně aktualizuji svůj MariaDB server na „nejnovější“ (hned na úvodu tohoto článku je představena relativnost pojmu „nejnovější“) verzi, abych získal nejnovější bezpečnostní opravy a vylepšení.
Omezení přístupu k databázi
Zkontroluji nastavení firewallu a jiných bezpečnostních mechanismů, aby byl přístup k databázovému serveru omezen pouze pro autorizované klienty.
Atd.
Tyto kroky jsou součástí komplexní strategie zabezpečení databáze, která přesahuje základní nastavení provedené skriptem mysql_secure_installation
. Doporučuje se pravidelně provádět revize zabezpečení a konfigurace, abych zajistil, že databázové prostředí zůstává bezpečné a efektivní. Snad :).