CIS Benchmarks Level 1 — hardening Ubuntu i Debian
Opublikowano: 10 kwietnia 2026 · Kategoria: Bezpieczeństwo
Świeżo zainstalowany Ubuntu ma wiele domyślnych konfiguracji kompromitujących bezpieczeństwo: root SSH włączony, zbędne usługi działają, brak logowania bezpieczeństwa, uprawnienia plików za luźne. CIS Benchmarks to szczegółowa lista kontrolna co poprawić — opracowana przez społeczność ekspertów bezpieczeństwa i stosowana jako standard w certyfikacjach SOC2 i ISO 27001. Artykuł omawia najważniejsze kontrolki Level 1 dla Ubuntu/Debian, narzędzia do audytu (Lynis, OpenSCAP) i automatyzację przez Ansible.
Audyt przed hardowaniem — Lynis
Zanim zaczniesz zmieniać konfigurację, uruchom Lynis żeby zobaczyć stan wyjściowy. Zapisz raport — po hardowaniu porównasz wyniki.
# Instalacja Lynis (wersja z repo projektowego, aktualniejsza niz apt) sudo apt install lynis -y # lub z repo Cisofy: curl -s https://packages.cisofy.com/keys/cisofy-software-public.key | sudo apt-key add - echo "deb https://packages.cisofy.com/community/lynis/deb/ stable main" | \ sudo tee /etc/apt/sources.list.d/cisofy-lynis.list sudo apt update && sudo apt install lynis # Pelny audyt systemu sudo lynis audit system # Zapisz raport sudo lynis audit system 2>&1 | tee /root/lynis-before.txt # Kluczowe sekcje w output: # [+] System Tools — podstawowe narzedzia # [+] Logging and Files — syslog, auditd # [+] SSH Support — konfiguracja SSH # [+] File Permissions — uprawnienia kluczowych plikow # [+] Hardening — podsumowanie # Wynik: Hardening index: 58/100 [############ ] # Cel po hardowaniu: >75 # Wazniejsze logi Lynis cat /var/log/lynis.log cat /var/log/lynis-report.dat | grep warning
Hardowanie SSH — CIS Level 1
# /etc/ssh/sshd_config — CIS Level 1 wymagania # Protokol i uwierzytelnianie # Protocol 2 # tylko SSH2 # PermitRootLogin no # ZAKAZ logowania root # PasswordAuthentication no # tylko klucze SSH # PermitEmptyPasswords no # ZAKAZ pustych hasel # ChallengeResponseAuthentication no # UsePAM yes # PAM aktywne # Timeout i limity # LoginGraceTime 60 # 60s na zalogowanie # MaxAuthTries 4 # max 4 proby hasla # MaxSessions 4 # max 4 sesje per polaczenie # ClientAliveInterval 300 # sprawdz klienta co 5 min # ClientAliveCountMax 0 # rozlacz po 1 braku odpowiedzi # Przekierowania (wylaczyc na serwerach produkcyjnych) # X11Forwarding no # AllowTcpForwarding no # GatewayPorts no # PermitTunnel no # Whitelist uzytkownikow (opcjonalne ale zalecane) # AllowUsers deploy ansible monitoring # Bezpieczne algorytmy (CIS Level 1) # Ciphers aes128-ctr,aes192-ctr,aes256-ctr # MACs hmac-sha2-256,hmac-sha2-512 # KexAlgorithms curve25519-sha256,ecdh-sha2-nistp256 # Zastosuj i sprawdz sudo sshd -t # walidacja konfiguracji (PRZED reload!) sudo systemctl reload sshd # Sprawdz ze nadal mozesz sie zalogowac (nowe okno terminala!) ssh -v -i ~/.ssh/id_ed25519 user@serwer
auditd — logowanie zdarzeń bezpieczeństwa
# Instalacja i uruchomienie auditd sudo apt install auditd audispd-plugins -y sudo systemctl enable --now auditd # Kluczowe reguly CIS Level 1 (/etc/audit/rules.d/cis.rules) # Loguj zmiany plikow systemowych # -w /etc/passwd -p wa -k identity # -w /etc/shadow -p wa -k identity # -w /etc/group -p wa -k identity # -w /etc/gshadow -p wa -k identity # -w /etc/sudoers -p wa -k priv_esc # -w /etc/sudoers.d/ -p wa -k priv_esc # Loguj wywolania systemowe dotyczace uprawnien # -a always,exit -F arch=b64 -S chmod -S fchmod -S fchmodat -k perm_mod # -a always,exit -F arch=b64 -S chown -S fchown -S fchownat -k perm_mod # -a always,exit -F arch=b64 -S setuid -k setuid # -a always,exit -F arch=b64 -S setgid -k setgid # Loguj nieudane dostepy do plikow # -a always,exit -F arch=b64 -S open -F exit=-EACCES -F auid>=1000 -k access # -a always,exit -F arch=b64 -S open -F exit=-EPERM -F auid>=1000 -k access # Loguj mount/unmount # -a always,exit -F arch=b64 -S mount -k mounts # Zaladuj reguly sudo augenrules --load sudo systemctl restart auditd # Przeglad logow auditd ausearch -k identity --start today ausearch -k priv_esc --start yesterday aureport --summary -i
Uprawnienia plików i usługi
# CIS — uprawnienia kluczowych plikow sudo chmod 644 /etc/passwd sudo chmod 600 /etc/shadow sudo chmod 644 /etc/group sudo chmod 600 /etc/gshadow sudo chown root:root /etc/passwd /etc/group sudo chown root:shadow /etc/shadow /etc/gshadow # Sprawdz pliki ze SUID/SGID (powinno byc minimum) find / -perm /4000 -type f 2>/dev/null | grep -v proc find / -perm /2000 -type f 2>/dev/null | grep -v proc # Pliki bez wlasciciela (should be empty) find / -nouser -o -nogroup 2>/dev/null | grep -v proc | grep -v sys # Uprawnienia cron sudo chmod og-rwx /etc/cron.hourly /etc/cron.daily /etc/cron.weekly /etc/cron.monthly /etc/crontab sudo chown root:root /etc/cron.hourly /etc/cron.daily /etc/cron.weekly /etc/cron.monthly /etc/crontab # Usun zbedne uslugi (przykład Ubuntu server minimal) sudo systemctl disable --now cups # drukarki (niepotrzebne na VPS) sudo systemctl disable --now avahi-daemon # Bonjour/mDNS sudo systemctl disable --now isc-dhcp-server 2>/dev/null # Sprawdz co nasluchuje ss -tlnp # TCP listening ports ss -ulnp # UDP listening ports
Sysctl — hardowanie parametrów sieci
# /etc/sysctl.d/99-cis-hardening.conf # Ochrona przed IP spoofing i redirect # net.ipv4.conf.all.send_redirects = 0 # net.ipv4.conf.default.send_redirects = 0 # net.ipv4.conf.all.accept_source_route = 0 # net.ipv4.conf.default.accept_source_route = 0 # net.ipv4.conf.all.accept_redirects = 0 # net.ipv4.conf.default.accept_redirects = 0 # net.ipv4.icmp_echo_ignore_broadcasts = 1 # net.ipv4.icmp_ignore_bogus_error_responses = 1 # Reverse path filtering # net.ipv4.conf.all.rp_filter = 1 # net.ipv4.conf.default.rp_filter = 1 # SYN flood protection # net.ipv4.tcp_syncookies = 1 # Randomizacja adresow przestrzeni adresowej (ASLR) # kernel.randomize_va_space = 2 # Ogranicz dostep do dmesg (tylko root) # kernel.dmesg_restrict = 1 # Wymagaj uprawnien do ptrace (debugowanie) # kernel.yama.ptrace_scope = 1 # IPv6 (jesli nieuzywane — wylacz) # net.ipv6.conf.all.disable_ipv6 = 1 # net.ipv6.conf.default.disable_ipv6 = 1 sudo sysctl -p /etc/sysctl.d/99-cis-hardening.conf
OpenSCAP — audyt zgodności z CIS
# Instalacja OpenSCAP sudo apt install openscap-scanner -y # Pobierz profile CIS dla Ubuntu (SCAP Security Guide) sudo apt install ssg-debderived -y # Profile sa w /usr/share/xml/scap/ssg/content/ # Przeszukaj dostepne profile CIS dla Ubuntu oscap info /usr/share/xml/scap/ssg/content/ssg-ubuntu2204-ds.xml | grep -i cis # Skan zgodnosci z CIS Level 1 sudo oscap xccdf eval \ --profile xccdf_org.ssgproject.content_profile_cis_level1_server \ --results /tmp/oscap-results.xml \ --report /tmp/oscap-report.html \ /usr/share/xml/scap/ssg/content/ssg-ubuntu2204-ds.xml # Otworz raport HTML w przegladarce (kopiuj z serwera) scp user@serwer:/tmp/oscap-report.html ./ # Tryb naprawiania (apply fixes) sudo oscap xccdf eval \ --profile xccdf_org.ssgproject.content_profile_cis_level1_server \ --remediate \ /usr/share/xml/scap/ssg/content/ssg-ubuntu2204-ds.xml
Automatyzacja Ansible — dev-sec roles
# Instalacja rol z Ansible Galaxy ansible-galaxy install dev-sec.os-hardening dev-sec.ssh-hardening # Playbook hardening.yml # --- # - hosts: webservers # become: yes # roles: # - dev-sec.os-hardening # - dev-sec.ssh-hardening # vars: # # Dostosuj do srodowiska # os_auth_timeout: 60 # os_security_users_allow: ['vagrant'] # ssh_permit_root_login: 'no' # ssh_password_authentication: 'no' # ssh_challenge_response_authentication: 'no' # ssh_client_alive_interval: 300 # ssh_max_auth_tries: 4 # Uruchomienie z dry-run (check mode) ansible-playbook hardening.yml --check --diff -i inventory.ini # Pelne uruchomienie ansible-playbook hardening.yml -i inventory.ini # Uruchom ponownie Lynis po hardowaniu sudo lynis audit system 2>&1 | tee /root/lynis-after.txt diff /root/lynis-before.txt /root/lynis-after.txt | grep "Hardening index"