Prvé spustenie Lynisu na čerstvom VPS zvyčajne dá okolo 60 a dlhý zoznam odporúčaní, pri ktorom nie je jasné, čoho sa chytiť. Dobrá správa: na 80–85 sa dostanete za jeden večer a väčšina cesty nie je kozmetika, ale veci, ktoré sú naozaj potrebné. Zlá: posledných pätnásť bodov na prenajatom virtuálnom stroji vôbec nezískate a nemá zmysel ich naháňať.
Čo index ukazuje a čo nie
Hardening index je pomer splnených testov k ich celkovému počtu s váhami — nie percento zabezpečenia. Lynis vykonáva okolo troch stoviek testov a vydáva dva rôzne zoznamy: warnings, čo vyzerá ako skutočný problém, a suggestions, čo sú možné zlepšenia. Vždy začínajte varovaniami; bývajú len jednotky.
Sto bodov neexistuje: časť odporúčaní vyžaduje rozhodnutia prijímané pri inštalácii systému (samostatné oddiely pre /home, /tmp a /var), časť prístup k zavádzaču, ktorý VPS nemá, a časť si navzájom odporuje. Porovnávať svoj index s cudzím je rovnako zbytočné: Lynis strháva body za to, čo na stroji beží. Každá spustená služba je ďalší otvorený port, vlastná konfigurácia a desiatka nových odporúčaní, takže vysoké hodnoty sa častejšie vyskytujú tam, kde okrem SSH nebeží nič. Pre prevádzkový server s webom, databázou a poštou je 85 dobrý výsledok.
Spúšťajte ako root
sudo lynis audit system
Bez sudo Lynis preskočí všetky testy, ktoré potrebujú systémové súbory, a ukáže podhodnotený index — nie preto, že by bol server zlý, ale preto, že kontroly nebolo možné vykonať. Správa sa ukladá do /var/log/lynis-report.dat, čitateľný log do /var/log/lynis.log.
Každý riadok výstupu začína identifikátorom testu typu SSH-7408 alebo KRNL-6000. Podľa tohto identifikátora sa hľadá aj vysvetlenie, aj spôsob vypnutia — zapamätajte si jeho tvar, všetko ostatné sa točí okolo neho.
Čo prináša nárast
SSH (SSH-7408). Najvýznamnejší blok: jediný test kontroluje hneď desiatku parametrov. Neupravujte celý sshd_config, položte samostatný súbor — aktualizácia balíka potom nič neprepíše:
sudo tee /etc/ssh/sshd_config.d/10-hardening.conf <<'EOF'
PermitRootLogin no
PasswordAuthentication no
MaxAuthTries 3
MaxSessions 2
X11Forwarding no
AllowTcpForwarding no
ClientAliveInterval 300
ClientAliveCountMax 2
LogLevel VERBOSE
TCPKeepAlive no
EOF
sudo sshd -t && sudo systemctl reload ssh
sshd -t pred znovunačítaním služby je povinný: chyba v konfigurácii pri živej relácii vás nechá vonku. A skôr než nastavíte PasswordAuthentication no, overte z druhého otvoreného terminálu, že kľúč naozaj funguje.
Parametre jadra (KRNL-6000). Test kontroluje dve desiatky hodnôt sysctl. Súbor pre ne:
sudo tee /etc/sysctl.d/99-hardening.conf <<'EOF'
kernel.dmesg_restrict = 1
kernel.kptr_restrict = 2
kernel.sysrq = 0
fs.protected_hardlinks = 1
fs.protected_symlinks = 1
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.all.log_martians = 1
EOF
sudo sysctl --system
Chýbajúce nástroje. Nemalá časť odporúčaní je jednoducho „nainštalujte to, čo chýba“: auditd (log systémových udalostí), aide (kontrola integrity súborov), debsums (integrita balíkov), unattended-upgrades (automatické bezpečnostné aktualizácie), sysstat a acct (evidencia procesov), antivírusový skener. Každý uzavrie jedno až dve odporúčania, ale inštalovať ich sa oplatí nie kvôli bodom, ale preto, že bez nich po incidente nič nezrekonštruujete.
Drobnosti s dobrým pomerom úsilia. umask 027 v /etc/login.defs; doby platnosti hesiel tamtiež; bannery /etc/issue a /etc/issue.net; prekladače dostupné len rootovi (chmod 700 /usr/bin/gcc). O banneroch povedzme úprimne: na zabezpečenie nemajú vplyv vôbec, ide o právnu formalitu — ale bod dávajú.
Jedna pasca pri login.defs
Úprava umask cez sed s nahradením riadka nezriedka ponechá v súbore niekoľko riadkov UMASK naraz. Lynis potom hodnotu nezapočíta a test AUTH-9328 zostane červený, hoci nastavenie vyzerá hotovo. Po úprave overte:
grep -c '^UMASK' /etc/login.defs
Má byť presne jedna. To isté platí pre všetky ďalšie parametre tohto súboru.
Falošné poplachy a ako ich správne umlčať
Niektoré varovania sa vášho servera vôbec netýkajú. Živý príklad: na VPS jedného veľkého poskytovateľa test PKGS-7388 hlási, že bezpečnostný repozitár nebol nájdený — jednoducho preto, že repozitáre sú opísané vo formáte deb822 s odkazom na súbor zrkadiel, kým Lynis hľadá starý riadok. Bezpečnostné aktualizácie pritom chodia bez problémov.
Takéto veci sa neumlčujú mazaním riadkov zo správy, ale profilom. Súbory profilov majú príponu .prf (nie .prof, na tom sa dá ľahko stratiť pol hodiny) a vlastné pravidlá sa píšu do /etc/lynis/custom.prf:
skip-test=PKGS-7388
skip-test=KRNL-5788
Platí jedno pravidlo: vedľa každého riadka má byť komentár, prečo sa test preskakuje. O pol roka si nespomeniete, či je vypnutý preto, že sa neuplatní, alebo preto, že sa vám nechcelo to opraviť — a rozdiel medzi týmito prípadmi je celý zmysel.
Čo nerobiť
Nenaháňajte číslo. Index sa dá ľahko nafúknuť vypnutím nepohodlných testov a je to jediný spôsob, ako sa dostať nad určitú úroveň — lenže bezpečnejším sa tým server nestane. Užitočné je niečo iné: zaznamenať si svoju hodnotu a sledovať zmeny. Index, ktorý klesol po aktualizácii alebo po cudzej úprave konfigurácie, je oveľa cennejší signál než jeho absolútna veľkosť.
Práve preto má zmysel spúšťať Lynis nie jednorazovo, ale podľa rozvrhu a správy ukladať, aby bolo s čím porovnávať. Ako to vyzerá zhromaždené na jednej stránke, ukazuje ukážka nižšie: index, zoznam varovaní s identifikátormi testov a to, čo sa zmenilo od minulého behu.