Prvo pokretanje Lynis-a na svežem VPS-u obično daje nešto oko 60 i dugačku listu preporuka u kojoj nije jasno šta prvo uhvatiti. Dobra vest: 80 do 85 je posao za jedno veče, i većina koraka nije kozmetika nego stvarno vredi. Loša vest: poslednjih petnaest bodova nedostižno je na iznajmljenoj virtuelnoj mašini i juriti ih je greška.

Šta indeks pokazuje, a šta ne

Indeks otvrdnjavanja je odnos položenih testova prema ukupnom broju, sa težinama — a ne procenat bezbednosti. Lynis pokreće nekih tri stotine testova i pravi dve odvojene liste: warnings, koja izgledaju kao stvarni problemi, i suggestions, što su stvari koje bi se mogle poboljšati. Uvek se počinje od upozorenja; obično ih je tek nekoliko.

Sto bodova ne postoji: neke preporuke zahtevaju odluke donete pri instalaciji sistema (odvojene particije za /home, /tmp i /var), neke traže pristup pokretaču sistema koji VPS nema, a neke su međusobno protivrečne. I poređenje svog indeksa sa tuđim je besmisleno: Lynis oduzima bodove za ono što radi na mašini. Svaki pokrenuti servis je još jedan otvoren port, sopstvena konfiguracija i tuce novih preporuka, zbog čega se visoke brojke češće sreću tamo gde ne radi ništa osim SSH-a. Za radni server sa sajtom, bazom i poštom, 85 je dobar rezultat.

Pokrenite ga kao root

sudo lynis audit system

Bez sudo Lynis preskače svaki test kojem trebaju sistemski fajlovi i prijavljuje niži indeks — ne zato što je server loš nego zato što provere nisu bile vidljive. Izveštaj se upisuje u /var/log/lynis-report.dat, čitljiv dnevnik u /var/log/lynis.log.

Svaki red izlaza počinje identifikatorom testa, kao SSH-7408 ili KRNL-6000. Tim identifikatorom nalazite i objašnjenje i način da test isključite — zapamtite njegov oblik, sve niže vrti se oko toga.

Šta zaista pomera broj

SSH (SSH-7408). Najteži blok: jedan jedini test proverava tuce parametara odjednom. Nemojte menjati ceo sshd_config; ostavite zaseban fajl da ažuriranje paketa ne bi obrisalo vaš rad:

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 pre ponovnog učitavanja servisa je obavezno: greška u konfiguraciji dok je vaša sesija živa ostaviće vas napolju. A pre nego što stavite PasswordAuthentication no, uverite se da ključ zaista radi — iz drugog otvorenog terminala.

Parametri jezgra (KRNL-6000). Test proverava dvadesetak sysctl vrednosti. Fajl za njih:

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

Alati koji nedostaju. Priličan deo preporuka je prosto „instalirajte ono čega nema": auditd (zapis sistemskih događaja), aide (integritet fajlova), debsums (integritet paketa), unattended-upgrades (automatska bezbednosna ažuriranja), sysstat i acct (evidencija procesa), skener zlonamernog softvera. Svaki zatvara jednu ili dve preporuke, ali ih ne instalirajte zbog bodova: bez njih nakon incidenta nećete rekonstruisati ništa.

Sitnice sa dobrim odnosom truda i nagrade. umask 027 u /etc/login.defs; starenje lozinki u istom fajlu; poruke u /etc/issue i /etc/issue.net; kompajleri čitljivi samo root-u (chmod 700 /usr/bin/gcc). O porukama iskreno: za bezbednost ne rade ništa, to je pravna formalnost — ali daju bod.

Jedna zamka u login.defs

Izmena umask zamenom reda pomoću sed često ostavi nekoliko UMASK redova u fajlu odjednom. Lynis tada ne broji vrednost i test AUTH-9328 ostaje crven iako podešavanje izgleda gotovo. Proverite posle izmene:

grep -c '^UMASK' /etc/login.defs

Mora postojati tačno jedan. Isto važi za svaki drugi parametar u tom fajlu.

Lažni pozitivi i kako ih ispravno ućutkati

Neka upozorenja se uopšte ne odnose na vaš server. Živ primer: na VPS-u jednog velikog provajdera test PKGS-7388 prijavljuje da nije pronađeno bezbednosno skladište — prosto zato što su skladišta opisana u deb822 formatu sa uputom na fajl ogledala, a Lynis traži poznati red. Bezbednosna ažuriranja stižu sasvim uredno.

Ućutkajte to ne brisanjem redova iz izveštaja nego profilom. Fajlovi profila koriste nastavak .prf (ne .prof — tu se lako izgubi pola sata), a vaša pravila idu u /etc/lynis/custom.prf:

skip-test=PKGS-7388
skip-test=KRNL-5788

Jedno pravilo: uz svaki red treba komentar koji kaže zašto se test preskače. Za šest meseci nećete pamtiti da li je isključen zato što se ne odnosi na vas ili zato što je popravka bila prevelik trud — a razlika između ta dva slučaja je čitav smisao.

Šta ne raditi

Ne jurite broj. Indeks se lako naduva isključivanjem neugodnih testova, i preko određenog nivoa to je jedini način — samo što server od toga nimalo ne postaje bezbedniji. Korisno je nešto drugo: zabeležite sopstvenu vrednost i pratite kako se menja. Indeks koji padne posle ažuriranja ili posle tuđe izmene u konfiguraciji daleko je dragoceniji signal od njegove apsolutne veličine.

Upravo zato Lynis vredi pokretati po rasporedu a ne jednom, čuvajući izveštaje da bi bilo sa čim uporediti. Kako to izgleda sabrano na jednoj stranici pokazuje demo ispod: indeks, lista upozorenja sa identifikatorima testova i šta se promenilo od prethodnog pokretanja.