Lynisin ensimmäinen ajo tuoreella VPS:llä antaa yleensä noin 60 ja pitkän listan suosituksia, joista ei tiedä mihin tarttua. Hyvä uutinen: 80–85 saavutetaan yhdessä illassa, ja suurin osa matkasta ei ole kosmetiikkaa vaan asioita, joita todella tarvitaan. Huono uutinen: viimeistä viittätoista pistettä ei vuokratulla virtuaalikoneella saa lainkaan, eikä niitä kannata jahdata.
Mitä indeksi näyttää ja mitä ei
Hardening index on läpäistyjen testien suhde niiden kokonaismäärään painotettuna — ei prosenttiluku siitä, kuinka turvallinen kone on. Lynis ajaa noin kolmesataa testiä ja tuottaa kaksi eri listaa: warnings, jotka näyttävät todellisilta ongelmilta, ja suggestions, jotka ovat mahdollisia parannuksia. Aloita aina varoituksista; niitä on yleensä vähän.
Sataa pistettä ei ole: osa suosituksista vaatii päätöksiä, jotka tehdään järjestelmää asennettaessa (omat osiot hakemistoille /home, /tmp ja /var), osa vaatii pääsyä käynnistyslataimeen, jota VPS:llä ei ole, ja osa on keskenään ristiriidassa. Oman indeksin vertaaminen toisen indeksiin on sekin hyödytöntä: Lynis vähentää pisteitä siitä, mitä koneella on käynnissä. Jokainen käynnissä oleva palvelu on vielä yksi avoin portti, oma asetustiedosto ja kymmenkunta uutta suositusta, joten korkeita arvoja nähdään useimmiten siellä, missä SSH:n lisäksi ei ole mitään. Tuotantopalvelimelle, jolla on sivusto, tietokanta ja sähköposti, 85 on hyvä tulos.
Aja rootina
sudo lynis audit system
Ilman sudo-komentoa Lynis ohittaa kaikki testit, jotka tarvitsevat järjestelmätiedostoja, ja näyttää liian matalan indeksin — ei siksi että palvelin olisi huono, vaan siksi ettei tarkistuksia voitu tehdä. Raportti menee tiedostoon /var/log/lynis-report.dat, luettava loki tiedostoon /var/log/lynis.log.
Jokainen tulosterivi alkaa testin tunnuksella, esimerkiksi SSH-7408 tai KRNL-6000. Sen tunnuksen perusteella löytyy sekä selitys että tapa kytkeä testi pois — opettele muoto, kaikki muu pyörii sen ympärillä.
Mikä tuottaa hyötyä
SSH (SSH-7408). Painavin osio: yksi testi tarkistaa kymmenkunta parametria. Älä muokkaa koko sshd_config-tiedostoa, tee oma tiedosto — silloin paketin päivitys ei ylikirjoita mitään:
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 ennen uudelleenlatausta on pakollinen: virhe asetuksissa elävän istunnon aikana jättää sinut ulkopuolelle. Ja ennen kuin asetat PasswordAuthentication no — tarkista toisesta avoimesta päätteestä, että avain todella toimii.
Ytimen parametrit (KRNL-6000). Testi tarkistaa parikymmentä sysctl-arvoa. Tiedosto niitä varten:
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
Puuttuvat työkalut. Suuri osa kaikista suosituksista on yksinkertaisesti ”asenna se, mitä ei ole”: auditd (järjestelmätapahtumien loki), aide (tiedostojen eheys), debsums (pakettien eheys), unattended-upgrades (automaattiset tietoturvapäivitykset), sysstat ja acct (prosessikirjanpito), virustorjuntaskanneri. Kukin sulkee yhden tai kaksi suositusta, mutta syy asentaa ne ei ole pisteet vaan se, ettei ilman niitä pysty rekonstruoimaan mitään tapahtuman jälkeen.
Pienet asiat hyvällä tuotolla. umask 027 tiedostossa /etc/login.defs; salasanojen elinajat samassa paikassa; bannerit tiedostoissa /etc/issue ja /etc/issue.net; kääntäjät vain rootin käytettävissä (chmod 700 /usr/bin/gcc). Bannereista sanottakoon rehellisesti: ne eivät vaikuta turvallisuuteen lainkaan, ne ovat juridinen muodollisuus — mutta pisteitä ne antavat.
Yksi ansa login.defs-tiedostossa
umask-arvon muuttaminen sed-komennolla rivinkorvauksena jättää usein tiedostoon useita UMASK-rivejä kerralla. Silloin Lynis ei laske arvoa, ja testi AUTH-9328 pysyy punaisena, vaikka asetus näyttää tehdyltä. Tarkista jälkeenpäin:
grep -c '^UMASK' /etc/login.defs
Siinä pitää olla täsmälleen yksi. Sama koskee kaikkia muitakin tuon tiedoston parametreja.
Väärät hälytykset ja miten ne vaimennetaan oikein
Osa varoituksista ei koske palvelintasi lainkaan. Todellinen esimerkki: erään suuren hosting-palveluntarjoajan VPS:llä testi PKGS-7388 ilmoittaa, ettei tietoturvavarastoa löydy — yksinkertaisesti siksi, että varastot on kuvattu deb822-muodossa viittauksella peilitiedostoon, kun taas Lynis etsii vanhaa riviä. Tietoturvapäivitykset tulevat samaan aikaan asianmukaisesti.
Tällainen vaimennetaan profiililla, ei poistamalla rivejä raportista. Profiilitiedostojen pääte on .prf (ei .prof — siinä on helppo menettää puoli tuntia), ja omat säännöt kirjoitetaan tiedostoon /etc/lynis/custom.prf:
skip-test=PKGS-7388
skip-test=KRNL-5788
Yksi sääntö pätee: jokaisen rivin viereen kuuluu kommentti siitä, miksi testi ohitetaan. Puolen vuoden kuluttua et muista, onko se pois päältä siksi ettei se sovellu, vai siksi ettei korjaamista jaksanut — ja ero näiden kahden välillä on koko pointti.
Mitä ei pidä tehdä
Älä jahtaa lukua. Indeksiä on helppo nostaa kytkemällä hankalat testit pois, ja se on ainoa tapa päästä tietyn tason yli — mutta palvelimesta ei tule turvallisempaa. Hyödyllistä on jokin muu: merkitse oma arvosi muistiin ja seuraa muutoksia. Indeksi, joka on pudonnut päivityksen tai jonkun toisen tekemän muokkauksen jälkeen, on paljon arvokkaampi signaali kuin sen absoluuttinen suuruus.
Juuri siksi Lynis kannattaa ajaa aikataulun mukaan ja säilyttää raportit, jotta on jotain mihin verrata. Miltä se näyttää yhdelle sivulle koottuna, näkyy alla olevassa esittelyssä: indeksi, varoitusten lista testitunnuksineen ja se, mikä on muuttunut edellisen ajon jälkeen.