Alpine Linux הוא האימג' הקטן ביותר שאנחנו מציעים. בשרתים שלנו Alpine 3.21 חדש צרך במנוחה 55 MB זיכרון ו-153 MB דיסק, לעומת 313 MB ו-2.7 GB ב-Ubuntu 24.04. המחיר הוא ויתור על הכלים המוכרים. Alpine משתמש ב-apk במקום apt, ב-doas במקום sudo, ב-OpenRC במקום systemd וב-musl במקום glibc.
הצעדים שלהלן הם אותן עשר דקות ראשונות כמו ב-Debian או ב-Ubuntu, מותאמות ל-Alpine. הרצנו כל פקודה על אימג' ה-Alpine 3.21 שלנו לפני הפרסום, ושתיים מהן הפילו אותנו בפעם הראשונה. התחברו כ-root עם הסיסמה מלוח הבקרה.
1. עדכנו ואתחלו פעם אחת
apk update && apk upgrade
uname -r
ls /lib/modules
השרת כבר התקין את העדכונים הזמינים באתחול הראשון, כך ש-apk upgrade בדרך כלל כמעט לא עושה כלום. הסתכלו דווקא על שתי השורות האחרונות. אם העדכון הראשון הביא ליבה חדשה, לליבה שרצה (uname -r) כבר אין מודולים על הדיסק. כל מה שטוען מודול ייכשל עד האתחול. בשרת הבדיקה שלנו התקנת חומת האש הדפיסה ERROR: Couldn't determine iptables version. אם שתי הגרסאות שונות, אתחלו עכשיו:
reboot
שרת הבדיקה שלנו חזר תוך פחות מדקה.
2. צרו משתמש שיכול להתחבר
adduser -D deploy
passwd deploy
adduser deploy wheel
אל תדלגו על passwd. adduser -D יוצר את החשבון בלי סיסמה, Alpine מסמן אותו כנעול, ו-sshd דוחה חשבון נעול גם עם המפתח הנכון. בבדיקה שלנו הרמז היחיד היה השורה הזו ב-/var/log/messages:
User deploy not allowed because account is locked
הסיסמה חשובה גם בהמשך: אותה doas יבקש.
אם הוספתם מפתח SSH כשהזמנתם את השרת, הוא נמצא ב-authorized_keys של root. העתיקו אותו למשתמש החדש:
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
עוד אין לכם מפתח? צרו אחד במחשב שלכם והדביקו את החלק הציבורי ב-/home/deploy/.ssh/authorized_keys.
3. גרמו ל-doas לבקש סיסמה
Alpine משתמש ב-doas במקום sudo, והאימג' שלנו כבר מתיר אותו לקבוצה wheel. הכלל ב-/etc/doas.d/wheel.conf הוא permit nopass :wheel, כלומר כל חבר ב-wheel הופך ל-root בלי להקליד דבר. גרמו לו לבקש סיסמה ולזכור אותה לכמה דקות:
echo 'permit persist :wheel' > /etc/doas.d/wheel.conf
מעכשיו doas apk add nano עובד כמו sudo apt install nano ב-Ubuntu.
4. SSH: מפתחות בלבד, בלי root
sshd קורא את הקבצים ב-/etc/ssh/sshd_config.d/ לפי סדר השמות ושומר לכל הגדרה את הערך הראשון שהוא מוצא. באימג' שלנו הקובץ הראשון הוא 00-eqvps.conf, שמתיר root וסיסמאות כדי שתוכלו להיכנס ביום הראשון. החליפו את התוכן שלו:
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) '
השורה השלישית חשובה ב-Alpine. האימג' מריץ את גרסת OpenSSH עם PAM, ועם שתי השורות הראשונות בלבד שרת הבדיקה שלנו עדיין הציע כניסת keyboard-interactive. עם שלושתן, ניסיון כניסה בלי מפתח מקבל:
Permission denied (publickey).
השאירו את סשן ה-root פתוח. בטרמינל שני בדקו ש-ssh deploy@YOUR.SERVER.IP עובד (בחבילת NAT הוסיפו -p ואת הפורט האישי מלוח הבקרה) וש-doas id מקבל את הסיסמה.
5. חומת אש: ufw
ufw נמצא במאגר community, שכבר פעיל באימג' שלנו:
apk add ufw
ufw limit 22/tcp
ufw --force enable
rc-update add ufw default
ufw status
limit מאפשר SSH אבל מאט את מי שפותח הרבה חיבורים ברצף. rc-update חשוב כאן, כי OpenRC לא מפעיל את חומת האש אחרי אתחול אם לא הוספתם אותה ל-runlevel. אחרי אתחול השרת שלנו חזר עם Status: active. בחבילת NAT השאירו את SSH על פורט 22: הפורט החיצוני האישי שלכם מועבר ל-22 בתוך השרת. בחבילה עם IPv4 משלה פתחו פורטים לאתר כשתצטרכו אותם (ufw allow 80/tcp, ufw allow 443/tcp). השאר נמצא במדריך ufw.
6. הפעילו cron ועדכונים יומיים
שרת Alpine חדש לא מריץ cron בכלל. הפעילו אותו:
rc-update add crond default
rc-service crond start
ה-crontab של root ב-Alpine כבר מריץ כל מה שנמצא ב-/etc/periodic/daily בשעה 02:00. שימו שם סקריפט עדכון:
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
הפקודה האחרונה מציגה את הסקריפטים ש-cron יריץ, והסקריפט שלכם צריך להופיע ברשימה. כך תקבלו את התיקונים של 3.21. מעבר לגרסת Alpine הבאה הוא צעד נפרד וידני. עדכוני ליבה עדיין דורשים אתחול: חזרו מדי פעם על הבדיקה uname -r / ls /lib/modules מצעד 1.
7. OpenRC בטבלה אחת
אם אתם מכירים systemd, זה רוב מה שמשתנה:
| משימה | systemd | Alpine (OpenRC) |
|---|---|---|
| הפעלת שירות | systemctl start nginx | rc-service nginx start |
| הפעלה באתחול | systemctl enable nginx | rc-update add nginx default |
| מצב | systemctl status nginx | rc-service nginx status |
| מה רץ | systemctl list-units | rc-status |
| יומן המערכת | journalctl | /var/log/messages |
8. Docker, והפורט ש-ufw לא חוסם
Alpine הוא מארח טוב ל-Docker, כי המערכת עצמה כמעט לא מפריעה:
apk add docker docker-cli-compose
rc-update add docker default
rc-service docker start
docker run --rm hello-world
בשרת שלנו זה לקח 12 שניות כולל ההורדה. כשהשירות של Docker רץ, הזיכרון בשימוש עלה מ-57 MB ל-124 MB.
מלכודת שלא ייחודית ל-Alpine: Docker כותב חוקי חומת אש משלו. כש-ufw התיר רק SSH, הפעלנו nginx עם -p 8080:80 והגענו אליו מחוץ לשרת בפורט 8080. ufw לא חסם. אם קונטיינר צריך להיות נגיש רק דרך reverse proxy על אותו שרת, פרסמו אותו על localhost:
docker run -d -p 127.0.0.1:8080:80 nginx:alpine
איזו חבילה
Alpine משאיר כמעט את כל הזיכרון לתוכנה שלכם. חבילת Nano (2 vCPU, 1 GB, 15 GB, $3 לחודש) מספיקה לשירות קטן או לכמה קונטיינרים. זו חבילת NAT, ולכן SSH מגיע דרך פורט אישי. אם פורטים 80 ו-443 צריכים להיות פתוחים לאינטרנט, ל-Nano-IP יש IPv4 משלה ב-$8 לחודש. לערימות Docker כבדות יותר, Micro נותנת 2 GB ב-$5 לחודש.
Alpine 3.21 נמצא בדף Alpine VPS וזמין בכל חבילות ה-Linux במדור VPS. התשלום ב-USDT, USDC או ETH ברשתות Base, Ethereum או Polygon, בלי תעודה מזהה וכרטיס.
תגובות
אין עדיין תגובות. היו הראשונים.