Zabezpečení je nutností pro všechny systémy, aby byla vaše data co nejvíce chráněna. I když vždy existuje riziko hacknutí, dodržování kontrolního seznamu zabezpečení toto riziko výrazně sníží. Základní bezpečnostní kontrolní seznam zahrnuje konfiguraci firewallu, šifrování dat, politiku ověřování atd. Dalším důležitým nástrojem pro ochranu vašich dat na operačních systémech založených na Debianu je AppArmor. V tomto blogu uvidíme, co to je a jak to nakonfigurovat pro databáze PostgreSQL a TimescaleDB.
Co je AppArmor?
AppArmor, který je standardně součástí operačních systémů Ubuntu a Debian (mimo jiné), je systém povinného řízení přístupu (MAC), který omezuje programy na omezenou sadu zdrojů. Funguje pomocí profilů načtených do jádra. Tyto profily lze konfigurovat ve dvou režimech:
-
Vynucení:Profily načtené v tomto režimu budou vynucovat zásady definované v profilu a také hlásit porušení zásad pokusy.
-
Stížnost:Profily v tomto režimu nebudou prosazovat zásady, ale místo toho hlásit pokusy o porušení zásad.
Aplikace AppArmor také umožňuje kombinovat profily režimu vymáhání a stížností.
Jak nakonfigurovat AppArmor
Profily AppArmor jsou v /etc/apparmor.d/. Můžete si vytvořit vlastní profily a přesunout je tam nebo zkontrolovat úložiště AppArmor. Podívejme se, jak vytvořit nový profil AppArmor.
Nejprve nainstalujme potřebné balíčky, abychom to zvládli:
$ apt install apparmor-profiles apparmor-utils
A podívejte se, zda je AppArmor povolen:
$ systemctl status apparmor.service
nebo
$ aa-status
apparmor module is loaded.
31 profiles are loaded.
29 profiles are in enforce mode.
/snap/snapd/11588/usr/lib/snapd/snap-confine
/snap/snapd/11588/usr/lib/snapd/snap-confine//mount-namespace-capture-helper
...
Pokud zaškrtnete zmíněnou cestu /etc/apparmor.d/, uvidíte některé základní profily jako usr.sbin.tcpdump nebo usr.sbin.traceroute. Nyní vytvoříme nový profil pro PostgreSQL nebo TimescaleDB. K tomu můžete použít tento profil jako příklad. Na základě tohoto profilu nahradíme verzi PostgreSQL, aby byla konkrétnější. V tomto případě použijeme PostgreSQL 13.
# Author: Felix Geyer <[email protected]>
#include <tunables/global>
/usr/lib/postgresql/13/bin/postgres {
#include <abstractions/base>
#include <abstractions/nameservice>
#include <abstractions/ssl_keys>
/etc/postgresql/** r,
/usr/share/postgresql/** r,
/var/lib/postgresql/** rwl,
/{,var/}run/postgresql/** rw,
owner @{PROC}/13/oom_adj rw,
}
Uložte jej do /etc/apparmor.d/usr.lib.postgresql.13.bin.postgres. Poté načtěte nový profil pomocí apparmor_parser -a:
$ cat /etc/apparmor.d/usr.lib.postgresql.13.bin.postgres | sudo apparmor_parser -a
Pokud chcete v tomto profilu něco změnit, budete jej muset znovu načíst:
$ apparmor_parser -r /etc/apparmor.d/usr.lib.postgresql.13.bin.postgres
Režim stížnosti můžete profilu přiřadit pomocí následujícího příkazu:
$ aa-complain /usr/lib/postgresql/13/bin/postgres
Potom můžete zkontrolovat soubor syslog v /var/log, abyste zjistili, zda je konfigurace AppArmor správná, nebo zda potřebujete něco upravit. Až to bude bezpečné, můžete režim změnit na Vynutit spuštěním:
$ aa-enforce /usr/lib/postgresql/13/bin/postgres
Protokol můžete filtrovat a hledat akce POVOLENÉ nebo ZAMÍTNUTÉ:
Jun 25 19:48:02 ip-172-31-18-94 kernel: [ 5160.111028] audit: type=1400 audit(1624650482.537:103): apparmor="ALLOWED" operation="open" profile="/usr/lib/postgresql/13/bin/postgres" name="/proc/17405/oom_score_adj" pid=17405 comm="postgres" requested_mask="w" denied_mask="w" fsuid=113 ouid=113
Jun 25 19:48:02 ip-172-31-18-94 kernel: [ 5160.112524] audit: type=1400 audit(1624650482.541:104): apparmor="ALLOWED" operation="open" profile="/usr/lib/postgresql/13/bin/postgres" name="/proc/17404/oom_score_adj" pid=17404 comm="postgres" requested_mask="w" denied_mask="w" fsuid=113 ouid=113
Jun 25 19:50:02 ip-172-31-18-94 kernel: [ 5280.141262] audit: type=1400 audit(1624650602.569:112): apparmor="DENIED" operation="open" profile="/usr/lib/postgresql/13/bin/postgres" name="/proc/17518/oom_score_adj" pid=17518 comm="postgres" requested_mask="w" denied_mask="w" fsuid=113 ouid=113
Profily můžete také deaktivovat tímto způsobem:
$ aa-disable /etc/apparmor.d/usr.lib.postgresql.13.bin.postgres
A budete muset znovu načíst službu:
$ systemctl reload apparmor.service
V případě, že chcete aplikaci AppArmor deaktivovat, můžete spustit:
$ systemctl stop apparmor
$ systemctl disable apparmor
To se samozřejmě nedoporučuje pro produkční prostředí a měli byste to nechat běžet, alespoň pomocí režimu stížností ve všech profilech, abyste mohli zkontrolovat protokoly a hledat neočekávané chování.
Jak používat PostgreSQL a TimescaleDB s ClusterControl a AppArmor
ClusterControl nespravuje žádné bezpečnostní moduly jádra Linuxu, jako je AppArmor. Při nasazování clusteru PostgreSQL nebo TimescaleDB pomocí ClusterControl můžete určit, zda chcete, aby ClusterControl během procesu nasazení zakázal AppArmor, aby se snížilo riziko chyb:
Pokud jej nechcete deaktivovat, což je doporučeno pro produkci prostředí, můžete použít režim stížnosti a sledovat protokol na vašich serverech, abyste se ujistili, že máte správnou konfiguraci AppArmor. Poté jej můžete změnit na Vynutit podle výše uvedených pokynů.
Více informací o konfiguraci AppArmor můžete najít na oficiálních stránkách Ubuntu.