Menu
Szybki wybór
Hosting Domeny VPS SSL Kalkulator Porównania FAQ
Aktywne kody
Wszystkie kody rabatowe

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"

Najczęstsze pytania

Co to są CIS Benchmarks i ile poziomów mają? +
CIS Benchmarks (Center for Internet Security) to standardy hardowania systemów — szczegółowe listy kontrolne konfiguracji bezpiecznej. Są dwa poziomy: Level 1 (podstawowy) — ustawienia bezpieczne i mało wpływające na funkcjonalność, odpowiednie dla większości serwerów. Level 2 (zaawansowany) — mocniejsze ograniczenia, mogą wymagać dostosowania dla konkretnych aplikacji. CIS Benchmarks są bezpłatne do pobrania z cisecurity.org i są standardem referencyjnym w branży (SOC2, ISO 27001, PCI DSS).
Co sprawdza Lynis i jak interpretować wynik? +
Lynis to narzędzie do audytu bezpieczeństwa Linux — sprawdza setki kontrolek: konfiguracja SSH, uprawnienia plików, obecność rootkitów, aktualizacje pakietów, firewall, auditd, szyfrowanie dysków, konfiguracja PAM. Na końcu podaje "Hardening Index" (0-100) — wynik powyżej 80 jest dobry dla serwera produkcyjnego. Każda sekcja ma status: OK (zielony), WARNING (żółty), SUGGESTION (niebieski). Suggestions to rekomendacje bez wpływu na bezpieczeństwo podstawowe.
Jakie są najważniejsze kontrole SSH z CIS Benchmark? +
CIS Level 1 dla SSH wymaga: PermitRootLogin no (logowanie root wyłączone), PasswordAuthentication no (tylko klucze SSH), Protocol 2, MaxAuthTries 4, LoginGraceTime 60, PermitEmptyPasswords no, X11Forwarding no. Dodatkowo rekomenduje AllowUsers lub AllowGroups (whitelist użytkowników SSH), ClientAliveInterval 300 i ClientAliveCountMax 0 (timeout sesji). Ustaw też Port na niestandardowy (np. 2222) — nie zwiększa bezpieczeństwa znacznie, ale redukuje szum w logach.
Czy automatyzacja hardowania przez Ansible jest bezpieczna? +
Tak, Ansible jest powszechnie stosowanym narzędziem do automatyzacji CIS hardowania. Dostępne są gotowe role: dev-sec.os-hardening i dev-sec.ssh-hardening z Ansible Galaxy — implementują większość kontrolek CIS Level 1. Ważne: zawsze testuj na środowisku staging przed zastosowaniem na produkcji. Część kontrolek może uniemożliwić działanie niektórych aplikacji (np. wymaganie SELinux może kolidować z niektórymi kontenerami). Rób snapshot/backup przed uruchomieniem playbooka.

Sprawdź oferty pasujące do tego scenariusza

Poniżej masz szybkie przejścia do ofert i stron z kodami rabatowymi tam, gdzie są dostępne.