Kontrolni popis nakon instalacije Linuxa: početna konfiguracija poslužitelja
Razina: Početna / Srednja
Procijenjeno vrijeme: ~40 minuta
Cilj: Dovršite osnovnu početnu konfiguraciju Linux VPS poslužitelja – pojačajte sigurnost SSH pristupa, izradite sudo korisnika, konfigurirajte vatrozid, postavite automatska sigurnosna ažuriranja i zakažite osnovne zadatke održavanja pomoću crona.
Uvod
Prvih 30 minuta nakon postavljanja VPS-a najvažnije je razdoblje. Svježe instaliran Linux poslužitelj u pravilu je potpuno izložen: prijava korisnika root putem SSH-a obično je omogućena, nema postavljenih pravila vatrozida i paketi su već zastarjeli. Ovaj kontrolni popis nakon instalacije Linuxa obuhvaća sve važne korake za postavljanje produkcijskog ili razvojnog okruženja – od stvaranja sudo korisnika i konfiguriranja autentifikacije pomoću SSH ključeva, do omogućavanja UFW-a i zakazivanja automatskih sigurnosnih ažuriranja. Ako ovaj vodič slijedite jednom, zaštitit ćete sustav od najčešćih vektora napada prije nego što na poslužitelj instalirate bilo što drugo.
Ovaj vodič pokriva Ubuntu, Debian i AlmaLinux (kompatibilan s RHEL-om) VPS instance.
Preduvjeti
Prije nego što počnete, provjerite jesu li ispunjeni sljedeći uvjeti:
- Operativni sustav: Ubuntu 20.04/22.04/24.04 LTS, Debian 11/12/13 ili AlmaLinux 8/9/10
- Pristup: Root SSH pristup poslužitelju (lozinka ili ključ – to ćete učvrstiti tijekom vodiča)
- Lokalno računalo: Dostupan SSH klijent (ssh na Linuxu/macOS-u, PuTTY ili Windows Terminal na Windowsu)
- Potrebno znanje: Osnovno korištenje Linux naredbenog retka – kretanje kroz direktorije i uređivanje datoteka pomoću nano
- Procijenjeno vrijeme: ~40 minuta za prvo pokretanje bez prethodne konfiguracije
Ovaj vodič testiran je na Ubuntu 24.04 LTS, Debian 12/13 i AlmaLinux 9/10. Koraci su identični, osim ako nije drugačije navedeno.
Korak 1: Postavite naziv računala poslužitelja
Ispravan naziv računala (hostname) čini zapisnike čitljivima i sprječava zabunu pri upravljanju više poslužitelja.
Prvo ažurirajte datoteku /etc/hosts kako bi sustav mogao lokalno rješavati svoje novi naziv računala. Otvorite datoteku:
sudo nano /etc/hosts
Dodajte ili ažurirajte redak za 127.0.1.1 (ili 127.0.0.1 ako 127.0.1.1 ne postoji) tako da odgovara vašem novom nazivu računala. Na primjer, ako planirate koristiti web-01:
127.0.1.1 web-01
Spremite i izađite (Ctrl+O, Enter, Ctrl+X).
Zatim postavite naziv računala globalno pomoću naredbe hostnamectl:
sudo hostnamectl set-hostname <YOUR_HOSTNAME>
Provjerite je li primijenjeno:
hostnamectl
Očekivani izlaz:
Static hostname: web-01 Icon name: computer-vm Chassis: vm Machine ID: a1b2c3d4e5f6... Boot ID: ... Operating System: Ubuntu 24.04.1 LTS Kernel: Linux 6.8.0-31-generic Architecture: x86-64
Mnoge usluge – uključujući Postfix (e-poštu) i alate za SSL certifikate poput Certbota – oslanjaju se na to da se naziv računala može lokalno razriješiti. Ažuriranje datoteke /etc/hosts prije pokretanja hostnamectla sprječava teško uočljive pogreške pri razrješavanju naziva.
Korak 2: Ažurirajte sve pakete
Odmah pokrenite potpuno ažuriranje sustava. Paketi isporučeni s novom VPS slikom gotovo su uvijek zastarjeli.
Ubuntu/Debian (APT):
sudo apt update && sudo apt upgrade -y
AlmaLinux/RHEL (DNF):
sudo dnf update -y
Nakon završetka ažuriranja provjerite je li potreban ponovno pokretanje.
Debian/Ubuntu:
cat /var/run/reboot-required 2>/dev/null && echo "Reboot required" || echo "No reboot needed"
AlmaLinux/RHEL:
sudo dnf install -y dnf-utils needs-restarting -r
Ako je potreban ponovno pokretanje, ponovno pokrenite sustav sada prije nastavka – neka ažuriranja jezgre i biblioteka stupaju na snagu tek nakon ponovnog pokretanja:
sudo reboot
Ako preskočite potrebno ponovno pokretanje znači da vaš trenutni kernel i neke biblioteke ostaju na staroj verziji. To može ostaviti poznate ranjivosti nepopravljenima čak i nakon ažuriranja.
Korak 3: Izradite sudo korisnika
Prijava kao root za svakodnevni rad je nesigurno i loša je praksa. Izradite običnog korisnika i dodijelite mu sudo ovlasti.
3.1 Dodajte korisnika
sudo adduser <YOUR_USERNAME>
Na Ubuntu/Debianu, naredba će vas zatražiti da postavite lozinku i ispunite polja za kontakt. Unesite lozinku; ostatak preskočite pritiskom na Enter.
Na AlmaLinuxu/RHEL-u, adduser je simbolna poveznica na useradd i pokreće se neinteraktivno bez traženja lozinke, zbog čega račun ostaje zaključan. Lozinku morate postaviti ručno:
sudo passwd <YOUR_USERNAME>
3.2 Dodjela sudo ovlasti
Ubuntu/Debian - dodajte korisnika u sudo grupu:
sudo usermod -aG sudo <YOUR_USERNAME>
AlmaLinux/RHEL - dodajte korisnika u grupu wheel:
sudo usermod -aG wheel <YOUR_USERNAME>
3.3 Provjera pristupa
Prebacite se na novog korisnika i testirajte sudo:
su - <YOUR_USERNAME> sudo whoami
Očekivani izlaz:
root
Ako vidite root, korisnik ima ispravno konfigurirane sudo ovlasti. Sada se možete odjaviti iz root sesije:
exit
Na AlmaLinuxu je članstvo u grupi wheel definirano je u datoteci /etc/sudoers putem retka %wheel ALL=(ALL) ALL, koji je omogućen prema zadanim postavkama. Na Ubuntu/Debianu, grupa sudo ima istu svrhu.
Korak 4: Konfigurirajte autentifikaciju pomoću SSH ključeva
SSH koji se temelji na lozinki ranjiv je na brute-force napade. Autentifikacija pomoću SSH ključeva zamjenjuje lozinku kriptografskim parom ključeva koji je znatno teže kompromitirati. To je jedna od najvažnijih najboljih praksi za sigurnu konfiguraciju SSH-a.
4.1 Generirajte par SSH ključeva (na svom lokalnom računalu)
Ako već nemate par SSH ključeva, generirajte ga na svom lokalnom računalu (ne na poslužitelju):
ssh-keygen -t ed25519 -C "<YOUR_USERNAME>@<YOUR_HOSTNAME>"
Prihvatite zadanu lokaciju datoteke. Unesite frazu za zaštitu kada se od vas zatraži – to štiti ključ ako vaše lokalno računalo ikada bude kompromitirana.
ed25519 je preferirani tip ključa. Brži je, kraći i sigurniji od starijeg rsa (2048-bitnog) tipa. Ako vaš SSH klijent to ne podržava, upotrijebite ssh-keygen -t rsa -b 4096 umjesto toga.
4.2 Kopirajte javni ključ na poslužitelj
S vašeg lokalnog računala kopirajte ključ na račun novog korisnika:
ssh-copy-id <YOUR_USERNAME>@<YOUR_SERVER_IP>
Ako ssh-copy-id nije dostupan (npr. na Windowsu), ručno kopirajte sadržaj datoteke ~/.ssh/id_ed25519.pub i dodajte ga u datoteku ~/.ssh/authorized_keys na poslužitelju.
4.3 Testirajte prijavu na temelju ključa
Otvorite novi prozor terminala (još nemojte zatvoriti trenutnu sesiju) i testirajte prijavu:
ssh <YOUR_USERNAME>@<YOUR_SERVER_IP>
Trebali biste se prijaviti bez upita za lozinku (samo za frazu za zaštitu ključa, ako ste je postavili).
Ne zatvarajte postojeću SSH sesiju dok ne potvrdite da prijava pomoću ključa radi. Ako je nešto pogrešno konfigurirano, postojeća sesija omogućit će vam da ispravite pogrešku.
Korak 5: Pojačajte sigurnost SSH konfiguracije i onemogućite root prijavu
Nakon što je potvrđeno prijavu pomoću ključa (Korak 4), ojačajte SSH demona. Onemogućavanje prijave kao root i autentifikacije lozinkom putem SSH-a jedan je od najučinkovitijih koraka na bilo kojem popisu za jačanje sigurnosti Linux poslužitelja.
Na sve tri distribucije datoteka /etc/ssh/sshd_config ima u gornjem dijelu datoteke redak Include /etc/ssh/sshd_config.d/*.conf , a SSH primjenjuje prvu vrijednost koju pronađe za svaku postavku. Datoteke dobavljača već su prisutne i nadjačavaju sve što kasnije dodate u glavnu datoteku:
- Ubuntu 24.04: 50-cloud-init.conf postavlja PasswordAuthentication yes
- AlmaLinux: 50-redhat.conf postavlja X11Forwarding yes
Iz tog razloga, uređivanje glavne datoteke sshd_config je nepouzdano. Umjesto toga, stvorite datoteku za drop-in datoteku za pojačavanje sigurnosti s niskim numeričkim prefiksom (00-), kako bi se prva pročitala i nadjačala datoteke koje isporučuje dobavljač. Ista datoteka funkcionira na sve tri distribucije.
Stvorite drop-in datoteku:
sudo tee /etc/ssh/sshd_config.d/00-hardening.conf > /dev/null <<'EOF' PermitRootLogin no PasswordAuthentication no PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keys X11Forwarding no EOF
Prefiks 00- jamči da se ova datoteka obrađuje prije drop-in datoteke dobavljača datoteka poput 50-cloud-init.conf i 50-redhat.conf. Budući da SSH koristi princip "prvo što odgovara pobjeđuje", ne morate uređivati te datoteke.
Provjerite sintaksu konfiguracije prije ponovnog pokretanja usluge:
sudo sshd -t
Ako naredba ne vrati nikakav izlaz, sintaksa je ispravna. Sada provjerite efektivne postavke koje će demon stvarno koristiti:
sudo sshd -T | grep -iE "permitrootlogin|passwordauthentication|x11forwarding"
Očekivani izlaz:
permitrootlogin no passwordauthentication no x11forwarding no
Potvrdite da su sve tri vrijednosti ispravne prije ponovnog pokretanja usluge. Ako se za autentifikaciju lozinkom (passwordauthentication) i dalje prikazuje 'yes', drop-in datoteke dobavljača nadjačava vašu datoteku – provjerite je li 00-hardening.conf ispravno spremljen. Ne zatvarajte postojeću SSH sesiju dok ne provjerite da prijava na temelju ključa (key-based login) i dalje radi.
Ponovno pokrenite SSH demon kako biste primijenili promjene.
Ubuntu 24.04 (aktivacija putem socketa):
sudo systemctl restart ssh.socket
Debian i starije verzije Ubuntua:
sudo systemctl restart ssh
AlmaLinux/RHEL:
sudo systemctl restart sshd
Provjerite radi li usluga (upotrijebite sshd na AlmaLinuxu, ssh.socket na Ubuntu 24.04):
sudo systemctl status ssh
Trebali biste vidjeti Active: active (running) (ili active (listening) za SSH aktiviran putem soketa).
Sada potvrdite da je root prijava blokirana. Sa svog lokalnog računala:
ssh root@<YOUR_SERVER_IP>
Očekivani rezultat: veza je odbijena s porukom " Permission denied (publickey)". Prijava korijenskog korisnika putem SSH-a sada je onemogućena.
Korak 6: Konfigurirajte vatrozid (UFW)
UFW (Uncomplicated Firewall) standardni je alat za vatrozid na Ubuntu i Debian sustavima. Na AlmaLinuxu je firewalld zadani, ali se i UFW može instalirati. Ovaj korak pokriva oba pristupa.
Prije omogućavanja bilo kojeg vatrozida, provjerite je li SSH (port 22) izričito dopušten. Ako to pogriješite, zaključat ćete se izvan poslužitelja.
6.1 UFW (Ubuntu/Debian)
Na Debianu (posebno Debian 13), ufw možda nije instaliran prema zadanim postavkama. Prvo ga instalirajte:
sudo apt update && sudo apt install -y ufw
Provjerite trenutni status:
sudo ufw status
Omogućite SSH prije omogućavanja vatrozida:
sudo ufw allow ssh
Dopustite HTTP i HTTPS ako planirate pokretati web poslužitelj:
sudo ufw allow http sudo ufw allow https
Omogućite vatrozid:
sudo ufw enable
Provjerite aktivna pravila:
sudo ufw status verbose
Očekivani izlaz:
Status: active Logging: on (low) Default: deny (incoming), allow (outgoing), disabled (routed) To Action From -- ------ ---- 22/tcp ALLOW IN Anywhere 80/tcp ALLOW IN Anywhere 443/tcp ALLOW IN Anywhere
6.2 Firewalld (AlmaLinux/RHEL)
Omogućite i pokrenite firewalld:
sudo systemctl enable --now firewalld
Omogućite SSH, HTTP i HTTPS:
sudo firewall-cmd --permanent --add-service=ssh sudo firewall-cmd --permanent --add-service=http sudo firewall-cmd --permanent --add-service=https sudo firewall-cmd --reload
Provjerite:
sudo firewall-cmd --list-all
Konfiguriranje vatrozida na Linuxu podrazumijeva odabir pravog alata za vašu distribuciju i da ne pokrećete dva demona vatrozida istodobno. Ako ste instalirali UFW na AlmaLinuxu, najprije onemogućite firewalld pomoću naredbe sudo systemctl disable --now firewalld.
Korak 7: Sinkronizirajte sistemski sat (NTP)
Točno vrijeme potrebno je za sigurnosne protokole (provjera SSL/TLS certifikata, Kerberos), ispravne vremenske oznake u zapisima i zakazane zadatke. Nesinkronizirani sat može uzrokovati pogreške SSL certifikata, neuspjelu autentifikaciju i zbunjujuće zapise u dnevnicima.
Provjerite trenutačno stanje sinkronizacije:
timedatectl status
Očekivani izlaz:
System clock synchronized: yes NTP service: active
Na Ubuntu 24.04 i Debianu 13, NTP je obično aktivan putem systemd-timesyncd-a. Na AlmaLinuxu 10, obično je aktivan putem chronyja. Ako timedatectl pokaže da je sistemski sat sinkroniziran: da i da je NTP usluga: aktivna, ne trebate ništa mijenjati.
Ako se NTP usluga prikazuje kao neaktivna ili n/a, instalirajte i omogućite chrony – preporučeni NTP demon za produkcijske poslužitelje:
Ubuntu/Debian:
sudo apt install chrony -y sudo systemctl enable --now chrony
Na Debianu 13 instalacija chronyja može uzrokovati da `timedatectl` prikaže `NTP usluga: n/a`. Umjesto toga upotrijebite `chronyc tracking` za provjeru.
AlmaLinux/RHEL:
sudo dnf install chrony -y sudo systemctl enable --now chronyd
Pričekajte 30–60 sekundi nakon pokretanja usluge, a zatim provjerite je li sinkronizacija aktivna:
chronyc tracking
Provjerite Leap status: Normal. To potvrđuje da je sistemski sat sinkroniziran i da NTP ispravno radi.
Ako upravljate poslužiteljima u više vremenskih zona, postavite vremensku zonu sustava prije konfiguriranja NTP-a kako bi se vremenski pečati u zapisima vodili u očekivanom lokalnom vremenu. Primjer: sudo timedatectl set-timezone Europe/Warsaw.
Korak 8: Omogućite automatska sigurnosna ažuriranja
Ručna ažuriranja funkcioniraju, ali ovise o tome da ih se sjetite napraviti. Automatska sigurnosna ažuriranja su sigurnosna mreža – osobito su kritična za nenadzirane VPS instance. Ovako konfigurirate automatska sigurnosna ažuriranja na Linuxu bez utjecaja na stabilnost.
8.1 Ubuntu/Debian - unattended-upgrades
Instalirajte paket:
sudo apt install unattended-upgrades -y
Omogućite ga i konfigurirajte:
sudo dpkg-reconfigure --priority=low unattended-upgrades
Ključno je odabrati "Da" kada se to zatraži. Ako odaberete Ne, potrebna konfiguracijska datoteka (/etc/apt/apt.conf.d/20auto-upgrades) neće biti stvorena, a naknadne provjere će završiti neuspješno s greškom "Ne postoji takva datoteka ili direktorij". Ovo omogućuje automatsku instalaciju sigurnosnih ažuriranja, dok redovna ažuriranja značajki ostaju ručna.
Provjerite konfiguraciju:
cat /etc/apt/apt.conf.d/20auto-upgrades
Očekivani izlaz:
APT::Periodic::Update-Package-Lists "1"; APT::Periodic::Unattended-Upgrade "1";
Za testiranje bez primjene promjena:
sudo unattended-upgrade --dry-run --debug
8.2 AlmaLinux/RHEL - dnf-automatic
Instalacija:
sudo dnf install dnf-automatic -y
Otvorite konfiguracijsku datoteku i postavite tip nadogradnje na sigurnosnu. Prvo napravite sigurnosnu kopiju:
sudo cp /etc/dnf/automatic.conf /etc/dnf/automatic.conf.bak sudo nano /etc/dnf/automatic.conf
Pronađite i postavite:
apply_updates = yes upgrade_type = security
Omogućite i pokrenite tajmer:
sudo systemctl enable --now dnf-automatic.timer
Provjerite:
sudo systemctl status dnf-automatic.timer
Korak 9: Zakažite osnovno održavanje pomoću crona
Cron upravlja zakazanim zadacima – stvarima koje se trebaju redovito izvršavati bez ručnog sudjelovanja. Jednostavan cron zadatak za zadatke poput čišćenja dnevnika ili provjera obnove certifikata standardna je praksa na svakom upravljanom poslužitelju.
Priprema AlmaLinux/RHEL:
Na čistom sustavu AlmaLinux 10 možda nije instaliran nano, pa će crontab -e otvoriti vi. Da biste umjesto toga koristili nano, pokrenite ovaj jedan redak kako biste ga pokrenuli čisto i uzastopno te osigurali da varijabla okruženja ostane sačuvana:
sudo dnf install nano -y && export EDITOR=nano && crontab -e
Za druge sustave (poput Ubuntua/Debiana), jednostavno otvorite crontab za trenutnog korisnika:
crontab -e
Prilikom prvog pokretanja (na Ubuntu/Debianu) bit će vam zatraženo da odaberete uređivač. Odaberite nano (opcija 1).
Uobičajeni primjeri cron zadataka
Pokrenite zadatak svake noći u 2:00:
0 2 * * * /usr/local/bin/my-maintenance-script.sh >> /var/log/maintenance.log 2>&1
Obnoviti SSL certifikate tjedno (za korisnike Certбота):
0 3 * * 0 certbot renew --quiet >> /var/log/certbot-renew.log 2>&1
Brisanje privremenih datoteka jednom mjesečno:
0 4 1 * * find /tmp -type f -atime +30 -delete
Cron koristi format minuta sat dan-u-mjesecu mjesec dan-u-tjednu naredba. Dio >> /var/log/task.log 2>&1 preusmjerava i stdout i stderr u datoteku s zapisima, tako da možete pregledati što se dogodilo.
Provjerite jesu li vaši cron zadaci registrirani:
crontab -l
Trebali biste vidjeti unose koje ste dodali. Cron automatski čita datoteku – nije potrebno ponovno učitavanje. Da biste provjerili radi li cron usluga, upotrijebite:
Ubuntu/Debian:
sudo systemctl status cron
AlmaLinux/RHEL:
sudo systemctl status crond
Provjera
Prođite kroz ovaj kontrolni popis kako biste potvrdili da je sve ispravno primijenjeno:
Provjerite naziv računala:
hostnamectl | grep hostname
Potvrdite da su root prijava putem SSH-a i autentifikacija lozinkom onemogućene (ovim se provjerava aktivna konfiguracija u pogonu):
sudo sshd -T | grep -iE "permitrootlogin|passwordauthentication"
Očekivano:
permitrootlogin no passwordauthentication no
Potvrdite da SSH usluga radi:
# For Ubuntu 24.04: sudo systemctl status ssh.socket # For Debian / Older Ubuntu: sudo systemctl status ssh # For AlmaLinux: sudo systemctl status sshd
Provjerite status vatrozida (Ubuntu/Debian):
sudo ufw status verbose
Provjerite NTP sinkronizaciju:
timedatectl status | grep -E "synchronized|NTP"
Očekivano:
System clock synchronized: yes NTP service: active
Provjerite automatska ažuriranja (Ubuntu/Debian):
cat /etc/apt/apt.conf.d/20auto-upgrades
Popis aktivnih cron poslova:
crontab -l
Vraćanje promjena
Za poništavanje pojedinih koraka ako nešto pođe po zlu:
Ponovno omogućite root SSH prijavu (ako ste se zaključali izvan poslužitelja i vraćate se putem konzole):
# Re-enable root/password login temporarily for recovery sudo rm /etc/ssh/sshd_config.d/00-hardening.conf sudo sshd -t # Restart SSH (use the variant for your system): sudo systemctl restart ssh.socket # Ubuntu 24.04 sudo systemctl restart ssh # Debian / older Ubuntu sudo systemctl restart sshd # AlmaLinux/RHEL
Onemogućite UFW:
sudo ufw disable
Uklonite unattended-upgrades (Ubuntu/Debian):
sudo apt remove unattended-upgrades -y
Uklonite dnf-automatic (AlmaLinux):
sudo systemctl disable --now dnf-automatic.timer sudo dnf remove dnf-automatic -y
Uklonite cron zadatak:
crontab -e # Delete the relevant line, save and exit
Ponovno omogućavanje root prijave ili provjere lozinke poništava većinu sigurnosnih poboljšanja iz ovog vodiča. To učinite samo privremeno kako biste povratili pristup, a zatim ga ponovno onemogućite.
Zaključak
Time je obuhvaćen cijeli kontrolni popis nakon instalacije Linuxa. Sada imate poslužitelj s ispravnim imenom domaćina, potpuno ažuriranim paketima, sudo korisnikom koji nije root, omogućenom autentifikacijom pomoću SSH ključeva, onemogućenom root prijavom, konfiguriranim vatrozidom, sinkroniziranim pomoću NTP-a, automatskim sigurnosnim ažuriranjima koja se izvršavaju i rasporedom cron zadataka koji je spreman za proširenje. Ovo je osnovna konfiguracija Linux poslužitelja nakon instalacije koju bi svaki VPS trebao imati prije nego što se na njega instalira bilo što drugo.
Odavde, logični sljedeći koraci ovise o tome za što je poslužitelj namijenjen:
- Web poslužitelj: instalirajte Nginx ili Apache, postavite virtualni domaćin i konfigurirajte SSL pomoću Certбота
- Baza podataka: Instalirajte i ojačajte MySQL/MariaDB ili PostgreSQL
- Monitoring: Postavite agregaciju zapisnika (npr. logrotate) ili lagani agent za nadzor
- Kontrola pristupa: Pregledajte konfiguraciju sudoers i dodajte članove tima koristeći isti obrazac iz koraka 3
Početni kontrolni popis konfiguracije Linux poslužitelja ovdje ne završava – on se razvija kako uloga poslužitelja raste. No ova je osnovna razina obavezna početna točka.
Verzija dokumenta: 1.0
Posljednje ažuriranje: svibanj 2026.
Vlasnik: Tim za tehničku dokumentaciju