När man precis installerat Ubuntu 16.04 så finns det en del grundläggande saker man bör göra för att öka säkerheten. I det här inlägget kan du läsa om hur du gör några av de allra enklaste sakerna. Säkerhet är något som alltid ska tas på allvar, det kan rädda dig från tråkiga missöden i framtiden.

Steg 1 – Logga in med SSH

För att över huvud taget kunna köra kommandon på din server så behöver du logga in med en användare som har administrativa rättigheter. Inledningsvis så finns det en användare som kallas för ”root”, det är en användare med rätt att göra precis vad som helst på din server. Inte helt optimalt för din servers säkerhet, men för stunden är det okej.

För att ansluta till din server behöver du öppna en anslutning med SSH, i olika operativsystem så finns olika program du kan använda. I Windows 10 så finns Bash (du kan använda PuTTY om du har en äldre version av Windows). Om du kör OS X så finns det ett program som heter Terminal.

Du behöver veta vilken IP-adress din server har. Du behöver också lösenordet för användaren root. För att logga in behöver du kunna köra SSH genom ett terminalfönster (ett av programmen som nämndes ovan). Kommandot för att ansluta ser ut som nedan, du behöver däremot byta ut 127.0.0.1 till din egen servers IP-adress. ssh är kommandot root är användarnamnet och efter @-tecknet så skriver man IP-adressen.

ssh root@127.0.0.1

Första gången du loggar in så är din server inte identifierad av din dator, så du kommer att bli tillfrågad om du är säker på att du vill fortsätta. Det kommer att likna det som visas nedan. Skriv yes och tryck på ENTER.

The authenticity of host '127.0.0.1 (127.0.0.1)' can't be established.
ECDSA key fingerprint is SHA256:s5sk8l8dh3fjsk2dfh1skdj+l/fhexempel123.
Are you sure you want to continue connecting (yes/no)? yes

När du tryckt på ENTER så sparas ett så kallat fingeravtryck för servern lokalt på din dator. Du får direkt därefter en bekräftelse som ser ut ungefär så här:

Warning: Permanently added '127.0.0.1' (ECDSA) to the list of known hosts.

Efter du loggat in så ska du byta lösenord för användaren root, kom ihåg att välja ett lösenord som är säkert. I nästa steg ska vi skapa en ny användare som vi kan använda istället för att logga in direkt med root.

Om root och säkerhet

Eftersom ”root” är en användare med extremt mycket rättigheter så är det sällan en bra idé att använda det mer än absolut nödvändigt. Det är lätt att göra misstag och gör man misstag med denna användare så kan det ibland vara oåterkalleligt. Gör man något knas så kan det redan vara för sent när du tryckt på enter. Därför är säkerhetskopiering också viktigt.

Steg 2 – Skapa ny användare

När du är inloggad som root så är det dags att skapa en ny användare, ett konto som du fortsättningsvis kan använda för att logga in till din server. I det här exemplet skapar jag en ny användare som heter ”kalle”, använd ett eget användarnamn som du kommer ihåg. Kommandot för att lägga till en ny användare ser ut så här:

adduser kalle

När du har tryckt ENTER så kommer några enkla frågor att dyka upp, den första frågan är vilket lösenord du vill använda. Kom ihåg att välja ett starkt lösenord som är säkert. Den ytterligare information som efterfrågas är inte jätteviktig.

Administrativa rättigheter

Nu har du ett nytt användarkonto med grundläggande rättigheter på din server. Hur som helst, ibland så måste man ha administrativa rättigheter för att kunna utföra en del uppgifter. För att undvika användning av ”root” så kan vi istället göra vår nya användare till en så kallad ”superuser”. Det gör det möjligt att köra administrativa kommandon genom att skriva sudo före det kommando som ska köras. Att inte använda root ger ett extra lager av säkerhet.

För att lägga till dessa rättigheter för vår nya användare så behöver vi lägga till ”kalle” i gruppen ”sudo”. Som standard i Ubuntu 16.04 kan alla användare som tillhör gruppen ”sudo” använda kommandot sudo. Kommandot vi behöver använda för att lägga till en användare i ytterligare en grupp är:

usermod -aG sudo kalle

usermod är det grundläggande kommandot för att modifiera systemets filer för användarkonton. -a är en parameter som heter ”append”, vilken används när man vill lägga till en användare i en kompletterande grupp, du vill alltså inte byta ut användarens grupp helt och hållet. Parametern -a bör också endast användas parallellt med G som står för ”group”. Därav -aG. sudo är gruppen som användaren ska läggas till i. Slutligen så kommer namnet på den användare som ska modifieras, i exemplet är användaren alltså ”kalle”. Kommandoraden ovan är förenklad, du får samma resultat genom att skriva usermod -a -G sudo kalle.

Andra rättigheter

Om du använder din server specifikt för att hålla din webbsida igång, då kan det också vara lämpligt att lägga till den nya användare i gruppen ”www-data”. Det kan du göra med samma kommando som i stycket ovan, usermod.

usermod -aG www-data kalle

Verifiera grupper

För att kontrollera att du lagt till den nya användaren i rätt grupp(er) så kan du använda kommandot groups följt av ett användarnamn.

groups kalle
kalle : kalle sudo www-data

Steg 3 – SSH-nycklar

SSH-nycklar ger dig ett säkrare sätt att logga in på en server med SSH än genom att endast använda ett lösenord. Ett lösenord kan knäckas, SSH-nycklar är mycket svårare att knäcka.

Nyckelpar

Genom att skapa ett nyckelpar får du två stora block med olika tecken: detta är en offentlig och en privat nyckel. Du kan placera den offentliga nyckeln på vilken som helst server och låsa upp den genom att ansluta till den med en klient som redan har den privata nyckeln. När de två matchar, låser systemet upp utan att du behöver ange något lösenord. Du kan öka säkerheten ytterligare genom att skydda den privata nyckeln med ett lösenord.

Du skapar ett nyckelpar genom att lokalt på din dator köra kommandot ssh-keygen som nedan:

ssh-keygen -t rsa

När du tryckt ENTER så skapas ditt nyckelpar. Ange ett lösenord för nyckelparet om du vill, det har sina fördelar. Men det förutsätter att ingen kan få tag i din hemliga nyckel.

Generating public/private rsa key pair.
Enter file in which to save the key (/Users/kalle/.ssh/id_rsa): y
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in y.
Your public key has been saved in y.pub.
The key fingerprint is:
SHA256:GTfF2K4FalSKf0JTIeRFEJKFEJKFEJKFEJK+U74WVwTXEtaU kalle@iMac.local
The key's randomart image is:
+--[ RSA 2048]----+
|          .oo.   |
|         .  o.E  |
|        + .  o   |
|     . = = .     |
|      = S = .    |
|     o + = +     |
|      . o + o .  |
|           . o   |
|                 |
+-----------------+

Kopiera den publika nyckeln

När nyckelparet är skapat så behöver du kopiera den publika nyckeln till din server. Det kan du göra med kommandot ssh-copy-id.

ssh-copy-id kalle@127.0.0.1

Eftersom ssh-copy-id inte finns i OS X så får man istället göra som nedan, byt ut användarnamn och IP-adress så det stämmer överens med din server. Man kan alternativt installera ssh-copy-id med brew.

cat ~/.ssh/id_rsa.pub | ssh kalle@127.0.0.1 "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >>  ~/.ssh/authorized_keys"

När du har kopierat över din publika nyckel så är det dags att prova logga in med enbart nyckelparet. Om allt fungerar som det ska så kommer du nu att logga in utan att behöva ange lösenordet för användaren, har du däremot angett ett lösenord för ditt nyckelpar så kommer den att efterfrågas.

Fungerar allt som det ska så kan du gå vidare till nästa steg.

Problem

Ibland så kan du däremot få ett felmeddelande som ser ut ungefär så här:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0644 for '/Users/kalle/.ssh/id_rsa' are too open.  
It is required that your private key files are NOT accessible by others.  
This private key will be ignored.  
bad permissions: ignore key: /Users/kalle/.ssh/id_rsa  
Permission denied (publickey).

Det ser läskigt ut, men det är inget komplicerat. Det är bara rättigheterna lokalt på din dator som strular och det är enkelt att fixa med dessa två kommandorader (byt ut användarnamn och sökväg så det stämmer överens med ditt system så klart):

sudo chmod 600 /Users/kalle/.ssh/id_rsa
sudo chmod 700 ~/.ssh

Anledningen till att jag tar upp det här är för att jag stött på detta bekymmer själv.

Inaktivera inloggning med lösenord

För att höja säkerheten ytterligare så kan vi inaktivera möjligheten att logga in med kontot ”root” och enbart ett lösenord. Innan du gör detta, var helt säker på att du faktiskt kan logga in med ditt nyckelpar för användaren ”root”. För du vill inte bli utelåst från systemet, det går visserligen att åtgärda genom direkt konsol-access, men det är ett helt onödigt steg som inte behövs om man gör rätt från början. Logga in på din server och redigera filen sshd_config med nano (en av de textredigerare som finns i linux).

sudo nano /etc/ssh/sshd_config

Leta sedan reda på PermitRootLogin och ändra den raden till:

PermitRootLogin without-password

Starta om SSH med:

sudo systemctl reload sshd.service

Digital Ocean

Kontrollpanelen hos Digital Ocean låter dig lägga till offentliga nycklar till dina nya virtuella servrar när de skapas. Du kan generera nyckelparet lokalt på din dator och sedan ladda upp den offentliga nyckeln till SSH-nyckeldelen.

När du sedan skapar en ny server så kan du välja att inkludera den offentliga nyckeln på servern. Då kommer inget root-lösenord att skickas till dig och du kan logga in på din nya server direkt. Om angav ett lösenord för nyckelparet så behöver du ange det vid inloggning. Nu har du lite bättre säkerhet.

Steg 4 – Brandvägg

Alla portar på din server behöver definitivt inte vara öppna, därför kan man använda UFW (Ultimate Firewall). I de distributioner av Ubuntu jag testat installera via Digital Ocean har alla UFW redan förinstallerat. För att kontrollera brandväggens status så kan du köra följande kommando:

ufw status

För en webbserver med en grundläggande installation bör det se ut ungefär som nedan.

Status: active

To                         Action      From
--                         ------      ----
22                         LIMIT       Anywhere                  
443                        ALLOW       Anywhere                  
80                         ALLOW       Anywhere                  
22 (v6)                    LIMIT       Anywhere (v6)             
443 (v6)                   ALLOW       Anywhere (v6)             
80 (v6)                    ALLOW       Anywhere (v6)

Om UFW mot förmodan inte finns på ditt system så kan du installera det med detta kommando:

sudo apt-get install ufw

Här är några nyttiga kommandon som är relativt självförklarande.

sudo ufw disable
sudo ufw enable
sudo ufw status
sudo ufw status verbose
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow ssh
sudo ufw allow 80/tcp

Ytterligare säkerhet?

Det går så klart att göra mycket mer än det som står skrivet i denna artikel. Men det här var det absolut mest grundläggande jag kom på som faktiskt höjer din servers säkerhet lite grann.

Vill du ha en egen virtuell server?

Om du också vill ha en egen virtuell server så rekommenderar jag Digital Ocean. Priset börjar på $5 per månad (1 CPU, 25GB SSD, 1GB minne och 1TB trafik). När du klickar på min länk och genomför ett köp så får jag dessutom lite bonus!

Behöver du hjälp?

Om du behöver hjälp med något så tar jag åt mig uppdrag. Kontakta mig!