−25%

på Windows vid årsbetalning, till 31/10. Till paketen

EQVPS
Kom igång

Så sätter du upp en Alpine Linux-VPS: apk, doas, OpenRC och brandvägg

De första stegen på en ny VPS med Alpine Linux 3.21: uppdatera och starta om, skapa en doas-användare som faktiskt kan logga in, stäng av SSH-inloggning för root och med lösenord, lägg till ufw, slå på cron och dagliga uppdateringar. Plus Docker-porten som ufw inte stoppar.

Alpine Linux är den minsta avbilden vi erbjuder. På våra servrar använde en ny Alpine 3.21 i vila 55 MB RAM och 153 MB disk, mot 313 MB och 2,7 GB för Ubuntu 24.04. Priset är att du ger upp de vanliga verktygen. Alpine använder apk i stället för apt, doas i stället för sudo, OpenRC i stället för systemd och musl i stället för glibc.

Stegen nedan är samma första tio minuter som på Debian eller Ubuntu, översatta till Alpine. Vi körde varje kommando på vår Alpine 3.21-avbild före publicering, och två av dem lurade oss första gången. Logga in som root med lösenordet från din kontrollpanel.

1. Uppdatera och starta om en gång

apk update && apk upgrade
uname -r
ls /lib/modules

Servern installerade redan tillgängliga uppdateringar vid första start, så apk upgrade har oftast lite kvar att göra. Titta i stället på de två sista raderna. Om den första uppdateringen gav en ny kärna, har den körande kärnan (uname -r) inte längre sina moduler på disk. Allt som laddar en modul misslyckas då tills du startar om. På vår testserver skrev installationen av brandväggen ut ERROR: Couldn't determine iptables version. Om versionerna skiljer sig åt, starta om nu:

reboot

Vår testserver var tillbaka på under en minut.

2. Skapa en användare som kan logga in

adduser -D deploy
passwd deploy
adduser deploy wheel

Hoppa inte över passwd. adduser -D skapar kontot utan lösenord, Alpine markerar det som låst och sshd nekar ett låst konto även med rätt nyckel. I vårt test var den enda ledtråden den här raden i /var/log/messages:

User deploy not allowed because account is locked

Lösenordet behövs även senare: det är vad doas frågar efter.

Om du lade till en SSH-nyckel när du beställde servern ligger den i roots authorized_keys. Kopiera den till den nya användaren:

install -d -m 700 -o deploy -g deploy /home/deploy/.ssh
install -m 600 -o deploy -g deploy /root/.ssh/authorized_keys /home/deploy/.ssh/authorized_keys

Ingen nyckel än? Skapa en på din dator och klistra in den publika delen i /home/deploy/.ssh/authorized_keys.

3. Låt doas fråga efter lösenord

Alpine använder doas i stället för sudo, och vår avbild tillåter redan gruppen wheel. Regeln i /etc/doas.d/wheel.conf är permit nopass :wheel, så varje medlem i wheel blir root utan att skriva något. Låt den fråga efter lösenordet och sedan komma ihåg det i några minuter:

echo 'permit persist :wheel' > /etc/doas.d/wheel.conf

Från och med nu fungerar doas apk add nano som sudo apt install nano på Ubuntu.

4. SSH: bara nycklar, ingen root

sshd läser filerna i /etc/ssh/sshd_config.d/ i namnordning och behåller det första värdet den hittar för varje inställning. På vår avbild är den första filen 00-eqvps.conf, som tillåter root och lösenord så att du kommer in första dagen. Ersätt innehållet:

cat > /etc/ssh/sshd_config.d/00-eqvps.conf <<'EOF'
PermitRootLogin no
PasswordAuthentication no
KbdInteractiveAuthentication no
EOF
sshd -t && rc-service sshd restart
sshd -T | grep -E '^(permitrootlogin|passwordauthentication|kbdinteractiveauthentication) '

Den tredje raden spelar roll på Alpine. Avbilden kör PAM-versionen av OpenSSH, och med bara de två första raderna erbjöd vår testserver fortfarande keyboard-interactive-inloggning. Med alla tre får ett inloggningsförsök utan nyckel:

Permission denied (publickey).

Håll root-sessionen öppen. Kontrollera i en andra terminal att ssh deploy@YOUR.SERVER.IP fungerar (på en NAT-plan lägger du till -p och den personliga porten från kontrollpanelen) och att doas id godtar lösenordet.

5. Brandvägg: ufw

ufw finns i community-förrådet, som är aktiverat på vår avbild:

apk add ufw
ufw limit 22/tcp
ufw --force enable
rc-update add ufw default
ufw status

limit släpper igenom SSH men bromsar den som öppnar många anslutningar i rad. rc-update är viktigt här, eftersom OpenRC inte startar brandväggen efter en omstart om du inte lägger till den i runleveln. Efter en omstart kom vår server tillbaka med Status: active. På en NAT-plan låter du SSH ligga kvar på port 22: din personliga externa port vidarebefordras till 22 inne i servern. På en plan med egen IPv4 öppnar du webbportar när du behöver dem (ufw allow 80/tcp, ufw allow 443/tcp). ufw-guiden tar upp resten.

6. Slå på cron och dagliga uppdateringar

En ny Alpine-server kör inte cron alls. Slå på det:

rc-update add crond default
rc-service crond start

Roots crontab i Alpine kör redan allt i /etc/periodic/daily klockan 02:00. Lägg ett uppdateringsskript där:

cat > /etc/periodic/daily/apk-upgrade <<'EOF'
#!/bin/sh
apk upgrade --update-cache --no-progress >> /var/log/apk-auto.log 2>&1
EOF
chmod +x /etc/periodic/daily/apk-upgrade
run-parts --test /etc/periodic/daily

Det sista kommandot listar skripten som cron kommer att köra, och ditt bör finnas med. Så får du rättningarna för 3.21. Att gå över till nästa Alpine-version är ett separat, manuellt steg. Kärnuppdateringar kräver fortfarande omstart: upprepa kontrollen uname -r / ls /lib/modules från steg 1 då och då.

7. OpenRC i en tabell

Om du kan systemd är det här det mesta som ändras:

UppgiftsystemdAlpine (OpenRC)
Starta en tjänstsystemctl start nginxrc-service nginx start
Starta vid uppstartsystemctl enable nginxrc-update add nginx default
Statussystemctl status nginxrc-service nginx status
Vad som körssystemctl list-unitsrc-status
Systemloggjournalctl/var/log/messages

8. Docker, och porten som ufw inte stoppar

Alpine är en bra Docker-värd eftersom systemet självt knappt är i vägen:

apk add docker docker-cli-compose
rc-update add docker default
rc-service docker start
docker run --rm hello-world

På vår server tog det 12 sekunder inklusive nedladdning. Med Docker-demonen igång gick använt minne från 57 MB till 124 MB.

En fälla som inte är specifik för Alpine: Docker skriver egna brandväggsregler. Med ufw som bara tillät SSH startade vi nginx med -p 8080:80 och nådde den utifrån servern på port 8080. ufw stoppade det inte. Ska en container bara nås via en omvänd proxy på samma server, publicera den på localhost:

docker run -d -p 127.0.0.1:8080:80 nginx:alpine

Vilken plan

Alpine lämnar nästan allt RAM åt din egen programvara. Planen Nano (2 vCPU, 1 GB, 15 GB, $3/mån) räcker för en liten tjänst eller några containrar. Det är en NAT-plan, så SSH kommer in via en personlig port. Behöver du portarna 80 och 443 öppna mot internet har Nano-IP egen IPv4 för $8/mån. För tyngre Docker-stackar ger Micro dig 2 GB för $5/mån.

Alpine 3.21 finns på Alpine VPS-sidan och på alla Linux-planer under VPS. Betalning sker i USDT, USDC eller ETH på Base, Ethereum eller Polygon, utan ID eller kort.

FAQ

Varför är Alpine så mycket mindre än Ubuntu eller Debian?

Det använder musl i stället för glibc, BusyBox för grundkommandona och OpenRC i stället för systemd. På våra servrar använde en ny Alpine 3.21 i vila 55 MB RAM och 153 MB disk. Ubuntu 24.04 använde 313 MB och 2,7 GB.

Varför får min nya användare "account is locked" fast nyckeln stämmer?

adduser -D skapar kontot utan lösenord, Alpine markerar det som låst och sshd nekar då användaren även med en giltig nyckel. Loggraden är "User deploy not allowed because account is locked". Ge användaren ett lösenord med passwd så börjar nyckelinloggningen fungera.

Varför fungerar inte en SSH-tunnel på Alpine?

Alpines standardfil /etc/ssh/sshd_config sätter AllowTcpForwarding no, så ssh -L-vidarebefordringar nekas. Behöver du tunnlar, ändra till yes i den filen och kör rc-service sshd restart.

Kommer mitt program att fungera på Alpine?

Allt från Alpines paketförråd fungerar, liksom Docker-containrar byggda på vilken basavbild som helst. Färdiga Linux-binärer byggda för glibc startar ofta inte på musl. Leta efter en version för Alpine eller musl, eller kör programmet i Docker. Paketet gcompat hjälper med vissa enkla glibc-binärer.

Vilken plan räcker för Alpine?

Nano-planen med 1 GB för $3 i månaden har gott om utrymme: själva systemet använder ungefär 55 MB. Behöver du portarna 80 och 443 öppna mot internet, ta Nano-IP för $8 i månaden, med egen IPv4.

Kommentarer

Inga kommentarer än. Bli först.

Lämna en kommentar

Kommentarer modereras innan de visas.