−25%

på Windows ved årlig betaling, til 31/10. Se pakkerne

EQVPS
Kom i gang

Sådan sætter du en Alpine Linux-VPS op: apk, doas, OpenRC og firewall

De første trin på en ny VPS med Alpine Linux 3.21: opdater og genstart, opret en doas-bruger der faktisk kan logge ind, slå SSH-login for root og med adgangskode fra, tilføj ufw, slå cron og daglige opdateringer til. Plus den Docker-port, som ufw ikke blokerer.

Alpine Linux er det mindste image, vi tilbyder. På vores servere brugte en ny Alpine 3.21 i tomgang 55 MB RAM og 153 MB disk, mod 313 MB og 2,7 GB for Ubuntu 24.04. Prisen er, at du opgiver de vante værktøjer. Alpine bruger apk i stedet for apt, doas i stedet for sudo, OpenRC i stedet for systemd og musl i stedet for glibc.

Trinene nedenfor er de samme første ti minutter som på Debian eller Ubuntu, oversat til Alpine. Vi kørte hver kommando på vores Alpine 3.21-image før udgivelsen, og to af dem snød os første gang. Log ind som root med adgangskoden fra dit kontrolpanel.

1. Opdater, og genstart én gang

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

Serveren installerede allerede de tilgængelige opdateringer ved første opstart, så apk upgrade har som regel ikke meget tilbage at gøre. Kig i stedet på de to sidste linjer. Hvis den første opdatering bragte en ny kerne, har den kørende kerne (uname -r) ikke længere sine moduler på disken. Alt, der indlæser et modul, fejler så, indtil du genstarter. På vores testserver skrev installationen af firewallen ERROR: Couldn't determine iptables version. Hvis de to versioner er forskellige, så genstart nu:

reboot

Vores testserver var tilbage på under et minut.

2. Opret en bruger, der kan logge ind

adduser -D deploy
passwd deploy
adduser deploy wheel

Spring ikke passwd over. adduser -D opretter kontoen uden adgangskode, Alpine markerer den som låst, og sshd afviser en låst konto selv med den rigtige nøgle. I vores test var det eneste spor denne linje i /var/log/messages:

User deploy not allowed because account is locked

Adgangskoden betyder også noget senere: det er den, doas spørger om.

Hvis du tilføjede en SSH-nøgle, da du bestilte serveren, ligger den i roots authorized_keys. Kopiér den til den nye bruger:

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 nøgle endnu? Lav en på din computer, og indsæt den offentlige del i /home/deploy/.ssh/authorized_keys.

3. Få doas til at spørge om adgangskoden

Alpine bruger doas i stedet for sudo, og vores image tillader det allerede for gruppen wheel. Reglen i /etc/doas.d/wheel.conf er permit nopass :wheel, så ethvert medlem af wheel bliver root uden at skrive noget. Få den til at spørge om adgangskoden og så huske den i nogle minutter:

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

Fra nu af virker doas apk add nano ligesom sudo apt install nano på Ubuntu.

4. SSH: kun nøgler, ingen root

sshd læser filerne i /etc/ssh/sshd_config.d/ i navneorden og beholder den første værdi, den finder for hver indstilling. På vores image er den første fil 00-eqvps.conf, som tillader root og adgangskoder, så du kan komme ind på dag ét. Erstat indholdet:

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 linje betyder noget på Alpine. Imaget kører PAM-udgaven af OpenSSH, og med kun de to første linjer tilbød vores testserver stadig keyboard-interactive-login. Med alle tre får et loginforsøg uden nøgle:

Permission denied (publickey).

Hold din root-session åben. Tjek i en anden terminal, at ssh deploy@YOUR.SERVER.IP virker (på en NAT-plan tilføjer du -p og den personlige port fra kontrolpanelet), og at doas id godtager adgangskoden.

5. Firewall: ufw

ufw ligger i community-arkivet, som er slået til på vores image:

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

limit lukker SSH ind, men bremser alle, der åbner mange forbindelser i træk. rc-update er vigtig her, fordi OpenRC ikke starter firewallen efter en genstart, medmindre du føjer den til runlevel. Efter en genstart kom vores server tilbage med Status: active. På en NAT-plan lader du SSH blive på port 22: din personlige eksterne port videresendes til 22 inde i serveren. På en plan med egen IPv4 åbner du webporte, når du får brug for dem (ufw allow 80/tcp, ufw allow 443/tcp). ufw-guiden dækker resten.

6. Slå cron og daglige opdateringer til

En ny Alpine-server kører slet ikke cron. Slå det til:

rc-update add crond default
rc-service crond start

Roots crontab på Alpine kører allerede alt i /etc/periodic/daily klokken 02:00. Læg et opdateringsscript der:

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

Den sidste kommando viser de scripts, cron vil køre, og dit bør være på listen. Sådan får du rettelserne til 3.21. At skifte til den næste Alpine-udgave er et separat, manuelt trin. Kerneopdateringer kræver stadig en genstart: gentag tjekket uname -r / ls /lib/modules fra trin 1 en gang imellem.

7. OpenRC i én tabel

Kender du systemd, er det her det meste af det, der ændrer sig:

OpgavesystemdAlpine (OpenRC)
Start en tjenestesystemctl start nginxrc-service nginx start
Start ved opstartsystemctl enable nginxrc-update add nginx default
Statussystemctl status nginxrc-service nginx status
Hvad kørersystemctl list-unitsrc-status
Systemlogjournalctl/var/log/messages

8. Docker, og den port ufw ikke blokerer

Alpine er en god Docker-vært, fordi selve systemet næsten ikke er i vejen:

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

På vores server tog det 12 sekunder inklusive download. Med Docker-dæmonen kørende steg den brugte hukommelse fra 57 MB til 124 MB.

En fælde, der ikke kun gælder Alpine: Docker skriver sine egne firewallregler. Mens ufw kun tillod SSH, startede vi nginx med -p 8080:80 og nåede den udefra på port 8080. ufw blokerede den ikke. Skal en container kun kunne nås gennem en reverse proxy på samme server, så udgiv den på localhost:

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

Hvilken plan

Alpine overlader næsten al RAM til dit eget software. Planen Nano (2 vCPU, 1 GB, 15 GB, $3/md.) er nok til en lille tjeneste eller nogle få containere. Det er en NAT-plan, så SSH kommer ind gennem en personlig port. Skal port 80 og 443 være åbne mod internettet, har Nano-IP egen IPv4 til $8/md. Til tungere Docker-stakke giver Micro dig 2 GB til $5/md.

Alpine 3.21 findes på Alpine VPS-siden og på alle Linux-planer under VPS. Betaling sker i USDT, USDC eller ETH på Base, Ethereum eller Polygon, uden ID eller kort.

FAQ

Hvorfor er Alpine så meget mindre end Ubuntu eller Debian?

Det bruger musl i stedet for glibc, BusyBox til de grundlæggende kommandoer og OpenRC i stedet for systemd. På vores servere brugte en ny Alpine 3.21 i tomgang 55 MB RAM og 153 MB disk. Ubuntu 24.04 brugte 313 MB og 2,7 GB.

Hvorfor får min nye bruger "account is locked", selvom nøglen er rigtig?

adduser -D opretter kontoen uden adgangskode, Alpine markerer den som låst, og sshd afviser så brugeren selv med en gyldig nøgle. Loglinjen er "User deploy not allowed because account is locked". Giv brugeren en adgangskode med passwd, så virker login med nøgle.

Hvorfor virker en SSH-tunnel ikke på Alpine?

Alpines standardfil /etc/ssh/sshd_config sætter AllowTcpForwarding no, så ssh -L-videresendelser afvises. Har du brug for tunneller, så ret værdien til yes i filen og kør rc-service sshd restart.

Kører mit program på Alpine?

Alt fra Alpines pakkearkiver kører, og det samme gør Docker-containere bygget på et hvilket som helst basisimage. Færdigbyggede Linux-programmer til glibc starter ofte ikke på musl. Kig efter en udgave til Alpine eller musl, eller kør programmet i Docker. Pakken gcompat hjælper med nogle simple glibc-programmer.

Hvilken plan er nok til Alpine?

Nano-planen med 1 GB til $3 om måneden har masser af plads: selve systemet bruger omkring 55 MB. Skal port 80 og 443 være åbne mod internettet, så tag Nano-IP til $8 om måneden med egen IPv4.

Kommentarer

Ingen kommentarer endnu. Vær den første.

Skriv en kommentar

Kommentarer modereres, før de vises.