Ενότητα 4 · 4.1
Διαχείριση πακέτων με το apt
Ενότητα 4: Λογισμικό και ενημερώσεις · Χρόνος ανάγνωσης: 10 λεπτά
Στόχος μαθήματος: Μετά από αυτό το μάθημα μπορείτε να εγκαθιστάτε, να ενημερώνετε και να αφαιρείτε λογισμικό με το apt, βλέπετε από πού προέρχεται ένα πακέτο και αναγνωρίζετε ποιες ενημερώσεις είναι ενημερώσεις ασφαλείας.
Βασικές έννοιες: πακέτο, πηγή πακέτων (repository), sources.list, αρχείο .sources (deb822), signed-by, apt update, apt upgrade, apt full-upgrade, remove, purge, autoremove, apt-cache policy, πηγή ασφαλείας, dnf
Γιατί ένας διαχειριστής πακέτων;
Στα Windows κατεβάζετε ένα πρόγραμμα εγκατάστασης από έναν ιστότοπο. Σε έναν Linux server αυτό σχεδόν δεν το κάνετε ποτέ. Το λογισμικό έρχεται ως πακέτο από μια πηγή πακέτων (repository): έναν server της διανομής με χιλιάδες προγράμματα, όλα κατασκευασμένα και δοκιμασμένα για τη δική σας έκδοση του Debian ή του Ubuntu. Το πρόγραμμα που λαμβάνει, εγκαθιστά και ενημερώνει αυτά τα πακέτα ονομάζεται διαχειριστής πακέτων. Στο Debian και στο Ubuntu είναι το apt (με το dpkg από κάτω), στο AlmaLinux και στο Rocky Linux το dnf.
Αυτό έχει τρία μεγάλα πλεονεκτήματα:
- Μία εντολή ενημερώνει τα πάντα. Ο web server, ο SSH server, οι βιβλιοθήκες και ο kernel προέρχονται από την ίδια πηγή. Δεν χρειάζεται να ελέγχετε για κάθε πρόγραμμα χωριστά σε κάποιον ιστότοπο αν υπάρχει νέα έκδοση.
- Η προέλευση είναι ελεγμένη. Κάθε πηγή πακέτων είναι υπογεγραμμένη με ένα κλειδί. Το apt απορρίπτει πακέτα των οποίων η υπογραφή δεν είναι σωστή.
- Οι εξαρτήσεις τακτοποιούνται. Αν το nginx χρειάζεται μια βιβλιοθήκη, το apt την εγκαθιστά αυτόματα μαζί του και αργότερα την αφαιρεί ξανά.
Οι πηγές πακέτων: από πού προέρχεται;
Ποιες πηγές χρησιμοποιεί το apt αναγράφεται στο /etc/apt/. Για πολύ καιρό αυτό ήταν ένα μόνο αρχείο sources.list με γραμμές όπως:
deb http://deb.debian.org/debian bookworm mainΤο Ubuntu 24.04 και νεότερα, τα cloud images του Debian και όλο και περισσότερες νέες εγκαταστάσεις χρησιμοποιούν τη νεότερη μορφή deb822: ξεχωριστά αρχεία με την κατάληξη .sources στο /etc/apt/sources.list.d/. Ένα παλιό sources.list μπορείτε να το μετατρέψετε με sudo apt modernize-sources (apt 3, Debian 13). Για παράδειγμα στο Debian 13:
anna@web1:~$ cat /etc/apt/sources.list.d/debian.sources
Types: deb
URIs: http://deb.debian.org/debian
Suites: trixie trixie-updates
Components: main
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg
Types: deb
URIs: http://deb.debian.org/debian-security
Suites: trixie-security
Components: main
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpgΔιαβάστε το ως εξής: η suite είναι η έκδοση (το trixie είναι το Debian 13· το noble είναι το Ubuntu 24.04), το component είναι ένα τμήμα της πηγής (main στο Debian· main, universe, restricted και multiverse στο Ubuntu) και το Signed-By δηλώνει με ποιο κλειδί πρέπει να είναι υπογεγραμμένη η πηγή. Το τελευταίο είναι σημαντικό: ένα κλειδί ανήκει σε μία πηγή, όχι σε όλες τις πηγές μαζί. Αν αργότερα προσθέσετε μια πηγή από κάποιον δημιουργό λογισμικού (Docker, Caddy, PostgreSQL), αυτή παίρνει το δικό της αρχείο κλειδιού και τη δική της γραμμή Signed-By (μάθημα 9.2).
Η πηγή με το -security στο όνομα είναι η πηγή ασφαλείας. Από εκεί προέρχονται οι ενημερώσεις ασφαλείας, συνήθως την ίδια ημέρα που γίνεται γνωστό ένα κενό ασφαλείας. Στο Ubuntu αυτή η suite ονομάζεται noble-security (ή το όνομα της δικής σας έκδοσης).
Αν χρησιμοποιείτε ακόμη το παλιό sources.list, όλα λειτουργούν κανονικά. Απλώς μην αναμειγνύετε την ίδια πηγή και στις δύο μορφές, γιατί τότε το apt παραπονιέται για διπλές γραμμές.
update, upgrade και full-upgrade
Η διαφορά ανάμεσα σε αυτές τις τρεις έννοιες είναι η πρώτη παγίδα για τους αρχάριους.
| Εντολή | Τι κάνει |
|---|---|
apt update | Λαμβάνει τη λίστα με τα πακέτα και τις εκδόσεις που υπάρχουν στις πηγές. Δεν εγκαθιστά τίποτα. |
apt upgrade | Ενημερώνει τα εγκατεστημένα πακέτα στη νεότερη έκδοση από αυτή τη λίστα. Δεν αφαιρεί ποτέ τίποτα. Μια ενημέρωση που θα απαιτούσε την αφαίρεση άλλου πακέτου παραλείπεται. |
apt full-upgrade | Το ίδιο, αλλά επιτρέπεται επίσης να αφαιρεί πακέτα ή να εγκαθιστά νέα, αν χρειάζεται. Απαραίτητο σε μια αναβάθμιση έκδοσης (μάθημα 4.3) και μερικές φορές σε έναν νέο kernel. |
Επομένως πάντα πρώτα update και μετά upgrade:
anna@web1:~$ sudo apt update
Hit:1 http://deb.debian.org/debian trixie InRelease
Get:2 http://deb.debian.org/debian-security trixie-security InRelease [43.4 kB]
...
3 packages can be upgraded. Run 'apt list --upgradable' to see them.
anna@web1:~$ apt list --upgradable
Listing... Done
libssl3t64/trixie-security 3.5.1-1+deb13u1 amd64 [upgradable from: 3.5.1-1]
openssh-server/trixie-security 1:10.0p1-7+deb13u1 amd64 [upgradable from: 1:10.0p1-7]
tzdata/trixie-updates 2026b-0+deb13u1 all [upgradable from: 2026a-0+deb13u1](Οι αριθμοί εκδόσεων παραπάνω είναι παράδειγμα.) Μετά το όνομα φαίνεται από ποια suite προέρχεται η νέα έκδοση. Ό,τι έχει -security είναι ενημέρωση ασφαλείας: αυτές τις θέλετε όσο το δυνατόν πιο γρήγορα. Οι -updates είναι άλλες σταθερές ενημερώσεις, όπως νέα δεδομένα ζωνών ώρας.
Στη συνέχεια:
anna@web1:~$ sudo apt upgradeΤο apt δείχνει τι αλλάζει και ζητά επιβεβαίωση. Διαβάστε αυτή τη λίστα. Αν εμφανίζεται "The following packages will be REMOVED" (τα παρακάτω πακέτα θα αφαιρεθούν), τότε συμβαίνει κάτι ασυνήθιστο και θέλετε πρώτα να μάθετε γιατί.
Εγκατάσταση, αφαίρεση και καθαρισμός
anna@web1:~$ sudo apt install nginx
anna@web1:~$ sudo apt remove nginx # το πρόγραμμα αφαιρείται, οι ρυθμίσεις στο /etc παραμένουν
anna@web1:~$ sudo apt purge nginx # αφαιρούνται το πρόγραμμα και οι ρυθμίσεις
anna@web1:~$ sudo apt autoremove # καθαρισμός όσων δεν χρειάζονται πλέονΗ διαφορά ανάμεσα στο remove και στο purge είναι χρήσιμη: αν θέλετε να αφαιρέσετε κάτι προσωρινά και να το εγκαταστήσετε αργότερα ξανά με τις ίδιες ρυθμίσεις, χρησιμοποιήστε το remove. Αν θέλετε πραγματικά να ξεκινήσετε από την αρχή, το purge.
Αναζήτηση και περισσότερες πληροφορίες:
anna@web1:~$ apt search fail2ban
anna@web1:~$ apt show fail2ban
anna@web1:~$ apt-cache policy openssh-server
openssh-server:
Installed: 1:10.0p1-7
Candidate: 1:10.0p1-7+deb13u1
Version table:
1:10.0p1-7+deb13u1 500
500 http://deb.debian.org/debian-security trixie-security/main amd64 Packages
*** 1:10.0p1-7 500
500 http://deb.debian.org/debian trixie/main amd64 PackagesΤο apt-cache policy είναι η εντολή που χρησιμοποιείτε όταν θέλετε να μάθετε από πού προέρχεται ένα πακέτο και ποια έκδοση θα επιλέξει το apt. Το *** βρίσκεται δίπλα στην εγκατεστημένη έκδοση, το Candidate είναι αυτό που θα εγκαθιστούσε μια αναβάθμιση.
Εκδόσεις του Debian και η έκδοση ενός προγράμματος
Ένα συχνό παράπονο: "Το Debian έχει μια παλιά έκδοση του nginx." Αυτό είναι αλήθεια και γίνεται εσκεμμένα. Το Debian και το Ubuntu παγώνουν τις εκδόσεις κατά την κυκλοφορία μιας έκδοσης και στη συνέχεια προσθέτουν μόνο διορθώσεις ασφαλείας και σοβαρές επιδιορθώσεις, χωρίς νέες λειτουργίες. Γι' αυτό ένα πακέτο με "παλιό" αριθμό έκδοσης μπορεί να έχει όλες τις πρόσφατες διορθώσεις ασφαλείας: αυτές έχουν μεταφερθεί (backport) στην παλιά έκδοση. Αυτό το αναγνωρίζετε από την κατάληξη, όπως +deb13u1 ή ubuntu0.1.
Επομένως μη συγκρίνετε ποτέ μόνο τον αριθμό έκδοσης με τον ιστότοπο του δημιουργού για να κρίνετε αν είστε ευάλωτοι. Κοιτάξτε τις ανακοινώσεις ασφαλείας της διανομής σας: το Debian Security Tracker (security-tracker.debian.org) και τα Ubuntu Security Notices (ubuntu.com/security/notices) αναφέρουν για κάθε κενό ασφαλείας αν η δική σας έκδοση έχει διορθωθεί.
Μερικοί κανόνες για έναν ήσυχο server
- Εγκαταστήστε μόνο ό,τι χρειάζεστε. Κάθε πακέτο είναι κώδικας που πρέπει να ενημερώνεται και μερικές φορές μια υπηρεσία που ακούει σε μια θύρα (μάθημα 5.1).
- Προτιμήστε τη διανομή από έναν ιστότοπο. Ένα πρόγραμμα που κάνετε compile μόνοι σας ή κατεβάζετε ως μεμονωμένο αρχείο δεν ενημερώνεται από το
apt upgrade. Τότε πρέπει να παρακολουθείτε εσείς οι ίδιοι τις ανακοινώσεις ασφαλείας. - Μια επιπλέον πηγή μόνο από τον ίδιο τον δημιουργό, με δικό της κλειδί και
Signed-By. Μην προσθέτετε ποτέ ένα κλειδί "για όλα" και ποτέ μια πηγή από άγνωστο ιστότοπο (μάθημα 4.3). - Διαβάστε τι ρωτά το apt. Κατά μια αναβάθμιση το apt μπορεί να ρωτήσει αν θέλετε να αντικαταστήσετε ένα τροποποιημένο αρχείο ρυθμίσεων με τη νέα έκδοση του δημιουργού. Αν δεν γνωρίζετε τι έχετε αλλάξει σε αυτό, επιλέξτε "keep the local version" (διατήρηση της τοπικής έκδοσης, η προεπιλογή) και δείτε αργότερα τη διαφορά με
diff: η νέα έκδοση βρίσκεται δίπλα ως.dpkg-dist.
Στο AlmaLinux και στο Rocky Linux
Εκεί ο διαχειριστής πακέτων ονομάζεται dnf και τα πακέτα είναι .rpm. Οι εντολές μοιάζουν με αυτές του apt: dnf check-update (η λίστα), dnf upgrade (ενημέρωση, update και upgrade σε ένα), dnf install, dnf remove, dnf info. Οι πηγές βρίσκονται στο /etc/yum.repos.d/*.repo. Πολύ επιπλέον λογισμικό (όπως το fail2ban) προέρχεται από την ξεχωριστή πηγή EPEL, την οποία ενεργοποιείτε πρώτα με dnf install epel-release. Μόνο τις ενημερώσεις ασφαλείας μπορείτε να εμφανίσετε με dnf updateinfo list --security.
Στην πράξη: η οθόνη του VPS
Στη WebOké, όπως και στους περισσότερους άλλους παρόχους, η εγκατάσταση του VPS σας ρυθμίζει ήδη σωστά τις προεπιλεγμένες πηγές της διανομής. Συνήθως δεν χρειάζεται να αλλάξετε τίποτα εκεί. Ενημερώστε τον server αμέσως μετά την πρώτη σύνδεση με apt update και apt upgrade (μάθημα 1.2) και δημιουργήστε ένα snapshot στον πίνακα ελέγχου του παρόχου σας πριν από μεγάλες αλλαγές.
Σύνοψη
- Στο Debian και στο Ubuntu το λογισμικό προέρχεται από υπογεγραμμένες πηγές πακέτων· το apt λαμβάνει, εγκαθιστά, ενημερώνει και καθαρίζει.
- Το
apt updateλαμβάνει μόνο τη λίστα· τοapt upgradeενημερώνει χωρίς να αφαιρεί· τοapt full-upgradeεπιτρέπεται να αφαιρεί επίσης. - Οι ενημερώσεις ασφαλείας προέρχονται από τη suite με
-securityστο όνομα· ταapt list --upgradableκαιapt-cache policyδείχνουν από πού προέρχεται μια έκδοση. - Ένας παλιός αριθμός έκδοσης με
+deb13u1ήubuntu0.xμπορεί να έχει όλες τις διορθώσεις (backport): κοιτάξτε τις ανακοινώσεις ασφαλείας της διανομής σας. - Μια επιπλέον πηγή μόνο από τον ίδιο τον δημιουργό, με δικό της κλειδί στο
Signed-By.
Κουίζ
Άσκηση
Άσκηση Z4.1: Ποιες ενημερώσεις είναι ενημερώσεις ασφαλείας; Στο αρχείο παραδείγματος apt-upgradable.txt υπάρχει η έξοδος των apt list --upgradable και apt-cache policy από έναν server με Debian 13. Απαντήστε: ποια πακέτα προέρχονται από την πηγή ασφαλείας, ποιο πακέτο προέρχεται από πηγή δημιουργού αντί για το Debian, ποια έκδοση του openssh-server είναι τώρα εγκατεστημένη και ποιο πακέτο είναι μια απλή σταθερή ενημέρωση χωρίς λόγο ασφαλείας; Το πρόγραμμα συγκρίνει με το σταθερό κλειδί απαντήσεων. Αν έχετε ήδη δικό σας server, εκτελέστε τις ίδιες εντολές και δείτε τι εμφανίζεται.
Για περαιτέρω μελέτη
- Ασφάλεια του VPS σας: τα πρώτα πέντε λεπτά
- Ξεκινώντας με το VPS σας
- Εγχειρίδιο του Debian για διαχειριστές συστημάτων, κεφάλαιο 6 (apt): https://debian-handbook.info/browse/stable/apt.html
- Εγχειρίδιο
sources.list(5)(μορφή deb822): https://manpages.debian.org/trixie/apt/sources.list.5.en.html - Debian Security Tracker: https://security-tracker.debian.org/tracker/
