Przejdź do treści
Aktualny kupon:10% zniżkiUżyj w zamówieniu

Zabezpieczenie nowego VPS: lista kontrolna krok po kroku

Co zrobić zaraz po utworzeniu VPS: aktualizacje, nowe hasło root, użytkownik z sudo, klucz SSH, firewall, fail2ban i automatyczne aktualizacje bezpieczeństwa. Każdy krok objaśniony.

  • początkujący
  • ~30 min
  • Zaktualizowano 26.10.2026

Przejdziesz przez listę kontrolną, która zamienia nowy VPS w bezpieczny serwer: aktualizacje, silne hasła, własny użytkownik, klucz SSH, firewall, fail2ban i automatyczne poprawki bezpieczeństwa. Przy każdym kroku wyjaśniamy, po co go robić i co dokładnie ustawiasz.

Czego potrzebujesz

  • Nowy VPS w StormHost z Ubuntu 24.04 lub Debianem 13
  • Połączenie SSH jako root (poradnik)
  • Menedżer haseł lub bezpieczne miejsce na hasła
  • Około 30 minut

Dlaczego zaraz po utworzeniu#

Każdy publiczny adres IP jest widoczny z całego internetu. Automatyczne boty skanują adresy i próbują logować się przez SSH popularnymi nazwami i hasłami. Na nowym VPS pierwsze próby zobaczysz często w ciągu kilku minut. Sprawdź:

bash
journalctl -u ssh --since "1 hour ago" | grep -E "Failed password|Invalid user"
  • journalctl -u ssh – wypisuje wpisy usługi SSH.
  • --since "1 hour ago" – tylko z ostatniej godziny.
  • grep -E "…" – zostawia tylko linie z nieudanym logowaniem lub nieistniejącym użytkownikiem.

Znane skanery internetu blokujemy w sieci, ale to nie zatrzymuje każdej próby. Przed resztą chronią silne hasło, klucz SSH i fail2ban.

Lista kontrolna#

KrokDlaczegoGdzie
Aktualizacja systemuNaprawia znane błędy bezpieczeństwa.Ten poradnik
Zmiana hasła rootPierwotne hasło przeszło przez e-mail lub ekran.Zmiana hasła root
Utworzenie użytkownika z sudoCodzienna praca bez nieograniczonych uprawnień roota.Ten poradnik
Klucz SSH i wyłączenie hasełKlucza nie da się zgadnąć.Klucz SSH
Zakaz logowania rootaAtakujący musi znać także nazwę użytkownika.Ten poradnik
Włączenie firewallaZ zewnątrz będzie dostępne tylko to, co chcesz.Firewall w strefie klienta, UFW
Instalacja fail2banBlokuje adresy IP próbujące haseł.Fail2ban
Automatyczne aktualizacjePoprawki bezpieczeństwa instalują się same.Automatyczne aktualizacje
Strefa czasowaCzasy w logach będą zgadzać się z Twoim czasem.Ten poradnik

Bezpieczeństwo a strefa klienta#

Zakładki Pliki i Baza danych w strefie klienta łączą się z VPS przez SSH, używając nazwy użytkownika i hasła (domyślnie root i hasło z chwili utworzenia VPS). Niektóre kroki tego poradnika mają więc na nie wpływ:

Co zmieniaszCo się dzieje z zakładkami Pliki i Baza danychCo zrobić
Hasło root (passwd)Przestają się logować.W Pliki › Zmień dane logowania wpisz nowe hasło.
Port SSHPrzestają się łączyć.W Pliki › Zmień dane logowania wpisz nowy port.
Zakaz logowania rootaNie mogą logować się jako root.Wpisz tam innego użytkownika i jego hasło. Pliki zobaczysz z uprawnieniami tego użytkownika. Instalacja i automatyczne połączenie w zakładce Baza danych wymagają wtedy, aby użytkownik miał sudo bez pytania o hasło.
Wyłączenie logowania hasłemPrzestają działać całkowicie.Plikami zarządzaj klientem SFTP z kluczem, a bazami danych przez tunel SSH.
SSH tylko z Twojego IPPrzestają działać (łączą się z naszych serwerów).Tak samo jak wyżej.

Dane logowania w zakładce Pliki może zmienić tylko właściciel usługi. Konsola oraz zakładki Sieć, Firewall, Kopie zapasowe i Zmiana pakietu działają zawsze; ustawienia VPS nie mają na nie wpływu. Zdecyduj, co jest dla Ciebie ważniejsze. Wyłączenie logowania hasłem daje najwyższe bezpieczeństwo. Jeśli używasz zakładek Pliki i Baza danych, zostaw hasło włączone, ale silne, i zainstaluj fail2ban.

Aktualizacja systemu#

  1. Pobierz listę dostępnych aktualizacji:

    bash
    apt update
    • apt update – wczytuje listę nowych wersji pakietów z repozytoriów. Sam niczego nie instaluje.
  2. Zainstaluj wszystkie aktualizacje:

    bash
    apt full-upgrade -y
    • apt full-upgrade – aktualizuje pakiety i może przy tym dodać lub usunąć zależności (na przykład nowe jądro).
    • -y – automatycznie odpowiada „tak” na potwierdzenie.
  3. Jeśli instalacja zapyta o plik konfiguracyjny (na przykład /etc/ssh/sshd_config „has been locally modified”), wybierz keep the local version currently installed. Zachowasz w ten sposób obecne ustawienia, z którymi VPS działa.

  4. Sprawdź, czy potrzebny jest restart:

    bash
    ls /var/run/reboot-required

    Jeśli polecenie znajdzie plik, zrestartuj. Na Debianie bez pakietu unattended-upgrades plik może nie powstać, więc tam restartuj zawsze po aktualizacji jądra (pakiet zaczynający się od linux-image).

  5. Zrestartuj VPS:

    bash
    reboot

    Połączenie SSH się zamknie. Połącz się ponownie po około minucie.

Zmiana hasła root#

Hasło z chwili utworzenia VPS było widoczne w strefie klienta albo w e-mailu. Ustaw nowe, które znasz tylko Ty.

  1. Wygeneruj silne hasło, na przykład generatorem haseł (co najmniej 20 znaków), i zapisz je w menedżerze haseł.

  2. Rozpocznij zmianę hasła:

    bash
    passwd
    • passwd – bez innych parametrów zmienia hasło użytkownika, który uruchamia polecenie (czyli roota).
  3. Przy monicie New password: wklej nowe hasło i naciśnij Enter. Hasło się nie wyświetla.

  4. Przy monicie Retype new password: wklej je ponownie. Zobaczysz passwd: password updated successfully.

  5. Nie zamykaj bieżącego okna. Otwórz nowe i przetestuj logowanie nowym hasłem.

  6. W strefie klienta otwórz zakładkę Pliki, kliknij Zmień dane logowania, wypełnij Użytkownik root, Port 22 i nowe Hasło i kliknij Zweryfikuj i zapisz.

Hasło w strefie klienta pozostanie stare

Strefa klienta nie zna nowego hasła. W zakładce Konsola wiersz Hasło po kliknięciu Pokaż będzie dalej pokazywać hasło z chwili utworzenia VPS, które już nie działa. Aktualne hasło jest tylko w Twoim menedżerze haseł.

Nowy użytkownik z sudo#

Jako root każda literówka w poleceniu dotyka całego systemu. Do codziennej pracy utwórz własnego użytkownika, który prosi o uprawnienia administratora tylko poleceniem sudo. Dla przykładu użyjemy nazwy jan.

  1. Utwórz użytkownika:

    bash
    adduser jan
    • adduser – tworzy użytkownika i jego folder domowy /home/jan oraz pyta o hasło.

    Wpisz hasło dwa razy (inne niż hasło root). Pytania o imię, telefon i inne dane pomiń klawiszem Enter i na końcu potwierdź Y.

  2. Dodaj użytkownika do grupy sudo:

    bash
    usermod -aG sudo jan
    • usermod – zmienia właściwości użytkownika.
    • -aG sudo – dodaje (-a) użytkownika do dodatkowej grupy (-G) sudo. Bez -a użytkownik wypadłby ze wszystkich pozostałych grup.
    • Członkowie grupy sudo mogą wykonywać polecenia jako root.
  3. Jeśli masz już klucz SSH dla roota, skopiuj go także nowemu użytkownikowi:

    bash
    install -d -m 700 -o jan -g jan /home/jan/.ssh
    install -m 600 -o jan -g jan /root/.ssh/authorized_keys /home/jan/.ssh/authorized_keys
    • install -d – tworzy folder .ssh.
    • -m 700 / -m 600 – uprawnienia: folder tylko dla właściciela, plik do odczytu i zapisu tylko dla właściciela. Inne uprawnienia SSH odrzuca.
    • -o jan -g jan – właścicielem będzie użytkownik jan.
  4. W nowym oknie zaloguj się jako nowy użytkownik i przetestuj sudo:

    bash
    ssh [email protected]
    sudo whoami
    • sudo whoami – wykonuje polecenie whoami jako root. Po wpisaniu hasła użytkownika jan musi wypisać root.

Jeśli brakuje polecenia adduser lub sudo (minimalna instalacja Debiana), zainstaluj je: apt install adduser sudo.

Klucz SSH i wyłączenie logowania hasłem#

To najważniejszy krok. Hasło da się zgadnąć; klucza SSH praktycznie nie. Kroki dla Windows, macOS i Linux są w osobnym poradniku Klucz SSH: logowanie bez hasła, łącznie z bezpiecznym wyłączeniem logowania hasłem.

Zakaz logowania roota#

Gdy root nie może logować się przez SSH, atakujący musi znać także nazwę Twojego użytkownika. Zrób to dopiero wtedy, gdy możesz zalogować się jako nowy użytkownik i sudo działa.

  1. Otwórz (lub utwórz) własny plik konfiguracyjny serwera SSH:

    bash
    nano /etc/ssh/sshd_config.d/00-zabezpeceni.conf
  2. Dodaj linię:

    /etc/ssh/sshd_config.d/00-zabezpeceni.confini
    PermitRootLogin no
    UstawienieCo robiZalecana wartośćKiedy zmieniać
    PermitRootLoginCzy root może logować się przez SSH. no = wcale, prohibit-password = tylko kluczem, yes = także hasłem.noprohibit-password, jeśli potrzebujesz dostępu roota kluczem (na przykład dla skryptu kopii zapasowych).

    Nazwa pliku zaczyna się od 00, aby wczytywał się pierwszy. Serwer SSH używa pierwszej znalezionej wartości każdego ustawienia.

  3. Sprawdź konfigurację i obowiązującą wartość:

    bash
    sshd -t && sshd -T | grep -i permitrootlogin
    • sshd -t – kontrola składni. Przy błędzie wypisuje plik i linię.
    • && – następne polecenie uruchamia się tylko wtedy, gdy poprzednie zakończyło się bez błędu.
    • sshd -T – wypisuje wynikową obowiązującą konfigurację. Musi zawierać permitrootlogin no.
  4. Zrestartuj serwer SSH:

    bash
    systemctl restart ssh

    Bieżące połączenie pozostaje otwarte.

  5. W nowym oknie sprawdź, że ssh [email protected] już nie loguje, a ssh [email protected] tak.

Jako root pracujesz potem przez sudo -i (otwiera wiersz poleceń roota po wpisaniu hasła użytkownika jan).

Zmiana portu SSH#

Przeniesienie SSH z portu 22 na inny nie jest prawdziwym zabezpieczeniem; atakujący nowy port znajdzie. Znacznie ogranicza jednak próby botów w logu.

Zalety:

  • Mniej automatycznych prób logowania i czystsze logi.

Wady:

  • Przy każdym połączeniu musisz podać port (ssh -p 2222 …).
  • Niektóre sieci firmowe i publiczne blokują niestandardowe porty.
  • Port trzeba zaktualizować w firewallu, w fail2ban i w strefie klienta (Pliki).

Jeśli zdecydujesz się na zmianę, wybierz port powyżej 1024, którego nie używa żadna inna aplikacja (unikaj na przykład portu 2022, którego niektóre panele gier używają do SFTP). W przykładzie użyjemy 2222.

  1. Zezwól na nowy port w firewallu, zanim przeniesiesz SSH: w zakładce Firewall dodaj regułę Przychodzący, Zezwól, TCP dla portu 2222 (wymagana w trybie Blokuj wszystko poza dozwolonym, nieszkodliwa w trybie Zezwól na wszystko), a jeśli używasz UFW, uruchom ufw allow 2222/tcp.

  2. Dodaj dwie linie do pliku /etc/ssh/sshd_config.d/00-zabezpeceni.conf. Stary port na razie zostaw, aby zmiana Cię nie odcięła:

    /etc/ssh/sshd_config.d/00-zabezpeceni.confini
    Port 22
    Port 2222
    • Port – port, na którym nasłuchuje serwer SSH. Linii Port może być kilka; serwer nasłuchuje wtedy na wszystkich.
  3. Sprawdź konfigurację: sshd -t.

  4. Sprawdź, jak SSH startuje na Twoim VPS:

    bash
    systemctl is-active ssh.socket

    Wynik active oznacza, że systemd uruchamia SSH przez socket (domyślnie na Ubuntu 24.04). Wynik inactive oznacza zwykłą usługę (zwykle Debian 13).

Zastosuj nowy port zgodnie z wynikiem:

Socket aktywny

bash
systemctl daemon-reload
systemctl restart ssh.socket
  • systemctl daemon-reload – każe systemd ponownie wczytać konfigurację. Na Ubuntu 24.04 specjalny generator przenosi przy tym porty z konfiguracji SSH do ustawień socketu. Bez tego kroku SSH zostałoby na porcie 22.
  • systemctl restart ssh.socket – zaczyna nasłuchiwać na nowych portach.

Socket nieaktywny

bash
systemctl restart ssh
  • systemctl restart ssh – restartuje serwer SSH, który czyta porty z konfiguracji.
  1. Sprawdź, czy SSH nasłuchuje na obu portach: ss -tlnp | grep -E ':22 |:2222 '.
  2. W nowym oknie połącz się przez nowy port: ssh -p 2222 [email protected].
  3. Gdy połączenie przez nowy port działa, usuń z konfiguracji linię Port 22.
  4. Sprawdź konfigurację: sshd -t.
  5. Wczytaj zmianę tym samym poleceniem co wyżej (zależnie od tego, czy socket jest aktywny).
  6. W strefie klienta otwórz Pliki › Zmień dane logowania i wpisz port 2222. Zakładki Pliki i Baza danych łączą się z VPS przez SSH i bez nowego portu przestałyby działać.
  7. Zaktualizuj port w jailu sshd w fail2ban (zobacz Fail2ban).
  8. Usuń regułę dla portu 22 w firewallu.

Firewall i fail2ban#

  • Firewall w strefie klienta filtruje ruch, zanim dotrze do VPS, i konfigurujesz go klikaniem: Firewall w strefie klienta.
  • UFW to firewall bezpośrednio wewnątrz VPS: Firewall UFW.
  • Fail2ban obserwuje nieudane logowania i blokuje atakujących: Fail2ban.

Jeden firewall wystarczy. Początkującym zalecamy firewall w strefie klienta, bo naprawisz go, nawet jeśli się odetniesz.

Automatyczne aktualizacje bezpieczeństwa#

Pakiet unattended-upgrades instaluje aktualizacje bezpieczeństwa raz dziennie. Na Ubuntu jest zainstalowany i włączony; na Debianie włączasz go sam.

Ubuntu 24.04

  1. Sprawdź, czy automatyczne aktualizacje są włączone:

    bash
    cat /etc/apt/apt.conf.d/20auto-upgrades

    Wyjście musi zawierać:

    Wyniktext
    APT::Periodic::Update-Package-Lists "1";
    APT::Periodic::Unattended-Upgrade "1";
    • Update-Package-Lists "1" – pobieraj listę aktualizacji codziennie (1 = co 1 dzień).
    • Unattended-Upgrade "1" – instaluj dozwolone aktualizacje codziennie.
  2. Jeśli pliku brakuje, uruchom dpkg-reconfigure -plow unattended-upgrades i odpowiedz Yes.

Debian 13

  1. Zainstaluj pakiety:

    bash
    apt install unattended-upgrades apt-listchanges
    • unattended-upgrades – automatyczna instalacja aktualizacji.
    • apt-listchanges – może wysyłać przegląd zmian w zaktualizowanych pakietach.
  2. Włącz automatyczne aktualizacje:

    bash
    dpkg-reconfigure -plow unattended-upgrades
    • dpkg-reconfigure – ponownie uruchamia konfigurację pakietu.
    • -plow – pokazuje także mniej ważne pytania.

    Na pytanie, czy automatycznie pobierać i instalować aktualizacje stable, odpowiedz Yes. Powstanie plik /etc/apt/apt.conf.d/20auto-upgrades.

Domyślnie Ubuntu instaluje tylko aktualizacje bezpieczeństwa; Debian aktualizacje bezpieczeństwa i poprawki z wydań punktowych wersji stabilnej (na przykład 13.1, 13.2). VPS nie restartuje się sam. Zachowanie zmieniasz we własnym pliku, który nadpisuje domyślny 50unattended-upgrades (tamtego nie edytuj; aktualizacja pakietu mogłaby go nadpisać):

bash
nano /etc/apt/apt.conf.d/52unattended-upgrades-local
/etc/apt/apt.conf.d/52unattended-upgrades-localtext
Unattended-Upgrade::Automatic-Reboot "true";
Unattended-Upgrade::Automatic-Reboot-Time "04:00";
Unattended-Upgrade::Remove-Unused-Dependencies "true";
UstawienieCo robiZalecana wartośćKiedy zmieniać
Automatic-RebootRestartuje VPS, gdy aktualizacja tego wymaga (zwykle nowe jądro). Domyślnie false.trueZostaw false, jeśli Twoje aplikacje nie wstają same po restarcie (nie są skonfigurowane jako usługa). Restartuj wtedy ręcznie raz w tygodniu.
Automatic-Reboot-TimeKiedy następuje restart, na przykład "04:00". Bez tego restart następuje zaraz po aktualizacji."04:00"Wybierz godzinę, gdy serwer ma najmniejszy ruch.
Remove-Unused-DependenciesUsuwa po aktualizacji pakiety, których nic już nie potrzebuje.truefalse, jeśli nie chcesz, aby cokolwiek odinstalowywało się samo.

Wypróbuj ustawienia na sucho:

bash
unattended-upgrade --dry-run --debug
  • --dry-run – tylko symulacja; nic nie jest instalowane.
  • --debug – szczegółowe wyjście, łącznie z wczytanymi ustawieniami i pakietami, które zostałyby zaktualizowane.

Zapisy rzeczywistych aktualizacji są w folderze /var/log/unattended-upgrades/.

Strefa czasowa i nazwa serwera#

  1. Ustaw strefę czasową, aby czasy w logach się zgadzały (przykład używa czasu środkowoeuropejskiego):

    bash
    timedatectl set-timezone Europe/Prague
    • timedatectl – ustawia czas systemowy i strefę czasową.
    • set-timezone Europe/Prague – czas środkowoeuropejski, łącznie z czasem letnim (dla Polski możesz użyć Europe/Warsaw, ta sama strefa).
  2. Sprawdź wynik przez timedatectl. Linia Time zone musi pokazywać Europe/Prague, a System clock synchronized: yes.

  3. Opcjonalnie zmień nazwę serwera (hostname):

    bash
    hostnamectl set-hostname vps1
    • hostnamectl set-hostname vps1 – ustawia nazwę VPS na vps1. Używaj małych liter, cyfr i myślników.

    Nowa nazwa pokaże się w znaku zachęty po ponownym zalogowaniu. Jeśli sudo zacznie wypisywać unable to resolve host vps1, dodaj nazwę do /etc/hosts w linii 127.0.1.1. Jeśli nagłówek pliku mówi, że jest generowany automatycznie, postępuj według instrukcji w nagłówku.

Co dalej#

  • Kopie zapasowe: archiwizujemy cały VPS i możesz go przywrócić w zakładce Kopie zapasowe. Ważne dane archiwizuj także poza VPS, zobacz Kopie zapasowe VPS.
  • Przegląd: od czasu do czasu sprawdzaj miejsce na dysku (df -h), działające usługi (systemctl --failed) i zapisy fail2ban.
  • Tylko potrzebne usługi: nie instaluj tego, czego nie potrzebujesz. Każdy otwarty port to kolejna możliwa droga do środka.

Weryfikacja#

  • apt update po aktualizacji wypisuje All packages are up to date.
  • Nowe hasło root działa, a zakładka Pliki się loguje.
  • Użytkownik jan loguje się przez SSH, a sudo whoami wypisuje root.
  • sshd -T | grep -E "^(permitrootlogin|passwordauthentication|port) " pokazuje ustawione wartości.
  • unattended-upgrade --dry-run --debug przebiega bez błędu.

Rozwiązywanie problemów#

Odcięto Cię od SSH#

Użyj konsoli w przeglądarce. Logujesz się hasłem root (nawet jeśli root jest zablokowany przez SSH) i naprawiasz błąd, na przykład usuwając plik /etc/ssh/sshd_config.d/00-zabezpeceni.conf i restartując SSH przez systemctl restart ssh.

sudo: jan is not in the sudoers file#

Użytkownik nie jest w grupie sudo. Jako root uruchom usermod -aG sudo jan; użytkownik musi się wylogować i zalogować ponownie, aby grupa zaczęła działać.

Zakładka Pliki zgłasza, że logowanie do VPS się nie powiodło#

Strefa klienta używa starych danych logowania. Otwórz Pliki › Zmień dane logowania i wpisz aktualnego użytkownika, port i hasło. Jeśli wyłączono logowanie hasłem albo SSH jest dozwolone tylko z Twojego adresu IP, zakładka nie zadziała (zobacz tabelę w sekcji Bezpieczeństwo a strefa klienta).

sshd -T pokazuje inną wartość niż ustawiono#

To samo ustawienie jest w innym pliku, który wczytuje się wcześniej (serwer SSH bierze pierwszą znalezioną wartość). Znajdź go:

bash
grep -rni "permitrootlogin" /etc/ssh/sshd_config /etc/ssh/sshd_config.d/
  • grep -rni – szuka tekstu we wszystkich plikach folderu (-r), bez rozróżniania wielkości liter (-i), i wypisuje numer linii (-n).

Zakomentuj linię w drugim pliku (postaw # na jej początku) albo zmień wartość bezpośrednio tam. Potem uruchom ponownie sshd -t && sshd -T | grep -i permitrootlogin i zrestartuj SSH.

Po zmianie portu SSH nadal nasłuchuje tylko na porcie 22#

Na Ubuntu 24.04 najprawdopodobniej pominięto systemctl daemon-reload. Uruchom je, a potem systemctl restart ssh.socket.

E: Could not get lock /var/lib/dpkg/lock-frontend#

W tle trwa inna instalacja, zwykle automatyczne aktualizacje (na nowym VPS po pierwszym starcie). Poczekaj kilka minut i uruchom polecenie ponownie. Nie zabijaj procesu.

Podsumowanie

  • Zaktualizuj system (apt update, apt full-upgrade) i po nowym jądrze zrestartuj.
  • Zmień hasło root przez passwd i wpisz nowe hasło także w zakładce Pliki.
  • Pracuj pod własnym użytkownikiem z sudo; roota przez SSH zablokuj dopiero po przetestowaniu.
  • Klucz SSH, firewall i fail2ban skonfiguruj według osobnych poradników.
  • unattended-upgrades zajmuje się automatycznymi aktualizacjami bezpieczeństwa; Twoje zmiany trafiają do 52unattended-upgrades-local.
  • Wyłączenie haseł lub ograniczenie SSH do Twojego IP wyłącza zakładki Pliki i Baza danych; konsola działa zawsze.

Czy ten poradnik był pomocny?

Dotyczy

  • Ubuntu 24.04
  • Debian 13

Usługi

Zgłoś błąd w poradniku

Wyszukiwanie w poradnikach