Lynis — audyt bezpieczeństwa Linux dla VPS
Opublikowano: 10 kwietnia 2026 · Kategoria: Bezpieczeństwo
Nowy VPS po instalacji systemu operacyjnego ma domyślną konfigurację zoptymalizowaną pod wygodę, nie pod bezpieczeństwo. Otwarty SSH bez ograniczeń, zbędne usługi działające w tle, brak auditd, słabe uprawnienia plików konfiguracyjnych — to standardowy stan. Lynis to narzędzie, które w kilka minut przeskanuje system, pokaże konkretne problemy i poda rekomendacje naprawy. Wynik końcowy to hardening index: liczba od 0 do 100 informująca jak dobrze zabezpieczony jest serwer w porównaniu do CIS Benchmark i innych standardów bezpieczeństwa.
Instalacja Lynis
# Ubuntu / Debian — oficjalny pakiet sudo apt update && sudo apt install lynis -y # RHEL / CentOS / Rocky / AlmaLinux — przez EPEL sudo dnf install epel-release -y sudo dnf install lynis -y # Instalacja najnowszej wersji bezposrednio od CISOfy (zalecane) cd /opt sudo git clone https://github.com/CISOfy/lynis cd lynis # Sprawdz wersje ./lynis --version # Aktualizacja (jezeli zainstalowan przez git) cd /opt/lynis sudo git pull # Weryfikacja integralnosci instalacji lynis show version lynis show details
Pierwsze uruchomienie — skan systemu
# Pelny skan systemu (wymaga root lub sudo) sudo lynis audit system # Skan bez interaktywnych przerw (dla cron / CI) sudo lynis audit system --quiet # Skan tylko wybranych kategorii sudo lynis audit system --tests-from-group "authentication,ssh" # Skan z rozszerzonym logowaniem sudo lynis audit system --logfile /var/log/lynis.log # Wyniki skanu # Raport tekstowy: /var/log/lynis-report.dat # Szczegolowy log: /var/log/lynis.log # Wyswietl tylko ostrzezenia i sugestie sudo lynis audit system | grep -E "Warning|Suggestion" # Podsumowanie raportu sudo lynis show report
Kategorie testów i co sprawdza Lynis
| Kategoria | Co sprawdza | Typowe problemy |
|---|---|---|
| Authentication | PAM, sudo, hasła, lockout | Brak pam_pwquality, brak timeout sudo |
| SSH | sshd_config, protokoły, cipher | PermitRootLogin yes, słabe ciphers, brak rate limit |
| Networking | Interfejsy, porty, netstat | Otwarte porty bez potrzeby, brak firewall |
| Logging | rsyslog, syslog, auditd | Brak auditd, brak centralizacji logów |
| File Permissions | Wrażliwe pliki /etc, cron, binaries | Zbyt szerokie uprawnienia /etc/passwd, world-writable dirs |
| Kernel | sysctl, kernel params, modules | ip_forward bez potrzeby, ASLR wyłączony |
| Software | Zainstalowane pakiety, aktualizacje | Nieaktualne pakiety z lukami CVE |
| Malware | Rootkity, trojany (przez rkhunter/chkrootkit) | Podejrzane pliki w /tmp, /dev |
| Containers | Docker security, seccomp, namespaces | Privileged containers, brak user namespace |
Interpretacja wyników — warnings i suggestions
Lynis klasyfikuje problemy na trzy poziomy: Warnings (poważne problemy wymagające natychmiastowej naprawy), Suggestions (rekomendacje do poprawy) i OK (zdane testy). Poniżej najczęstsze warnings i jak je naprawić:
# --- NAPRAWA NAJCZESTSZYCH OSTRZEZEN --- # Warning: SSH PermitRootLogin enabled sudo sed -i 's/^PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config sudo systemctl restart sshd # Warning: No firewall detected sudo apt install ufw -y sudo ufw default deny incoming sudo ufw default allow outgoing sudo ufw allow ssh sudo ufw allow 80/tcp sudo ufw allow 443/tcp sudo ufw enable # Warning: auditd not running sudo apt install auditd audispd-plugins -y sudo systemctl enable --now auditd # Warning: Core dumps disabled check echo "* hard core 0" >> /etc/security/limits.conf echo "fs.suid_dumpable = 0" >> /etc/sysctl.conf sudo sysctl -p # Suggestion: Set umask to 027 or 077 # W /etc/profile i /etc/login.defs: echo "umask 027" >> /etc/profile sudo sed -i 's/^UMASK.*$/UMASK 027/' /etc/login.defs # Suggestion: Harden SSH — wzmocnienie ciphers i MACs # /etc/ssh/sshd_config: # KexAlgorithms curve25519-sha256,[email protected] # Ciphers [email protected],[email protected] # MACs [email protected],[email protected] # Suggestion: Install fail2ban sudo apt install fail2ban -y sudo systemctl enable --now fail2ban
Automatyzacja — cron i alerty
# /etc/cron.weekly/lynis-audit
#!/bin/bash
REPORT="/var/log/lynis/report-$(date +%Y-%m-%d).log"
mkdir -p /var/log/lynis
# Uruchom skan
/usr/sbin/lynis audit system --quiet --logfile "$REPORT" 2>&1
# Pobierz hardening index
HI=$(grep "hardening_index" /var/log/lynis-report.dat | cut -d= -f2)
WARNINGS=$(grep -c "^warning" /var/log/lynis-report.dat || true)
# Wyslij alert jezeli HI < 65 lub sa ostrzezenia
if [ "$HI" -lt 65 ] || [ "$WARNINGS" -gt 0 ]; then
mail -s "[LYNIS ALERT] $(hostname): HI=$HI Warnings=$WARNINGS" \
[email protected] < "$REPORT"
fi
# Zarchiwizuj raport (90-dniowa retencja)
find /var/log/lynis -name "*.log" -mtime +90 -delete
chmod +x /etc/cron.weekly/lynis-audit
# Weryfikacja konfiguracji własnej (custom.prf)
# /etc/lynis/custom.prf - plik nadpisuje domyslne ustawienia
# Przyklad: wylacz test jesli serwer nie uzywa IPv6:
# skip-test=NETW-3032 Zwiększanie hardening index — praktyczne kroki
- AppArmor lub SELinux — samo włączenie i uruchomienie profilów daje +5 do indeksu.
Na Ubuntu:
sudo aa-enforce /etc/apparmor.d/*. - Kernel hardening przez sysctl —
kernel.randomize_va_space=2(ASLR),net.ipv4.conf.all.rp_filter=1(anti-spoofing),kernel.dmesg_restrict=1. - Minimalizacja usług — wyłącz wszystko czego nie używasz:
sudo systemctl disable avahi-daemon bluetooth cups. Mniej usług = mniejsza powierzchnia ataku. - Automatyczne aktualizacje bezpieczeństwa —
unattended-upgradesdla Debian/Ubuntu eliminuje warning o nieaktualnych pakietach. - Logowanie do syslog z retencją — skonfiguruj rsyslog z rotacją 90 dni. Lynis sprawdza czy logi są zachowywane wystarczająco długo.
- PAM wzmocnienie —
pam_pwqualityz minlen=12, retry=3,pam_faillockz deny=5 za bruteforce.