Η ενημέρωση apt αποτυγχάνει με NO_PUBKEY μετά την προσθήκη αποθετηρίου VPN
Το NO_PUBKEY και ένα αρχείο Release που λείπει είναι αποτυχίες εμπιστοσύνης, όχι βλάβες δικτύου. Αποφασίστε αν θα καρφιτσώσετε το κλειδί του προμηθευτή με signed-by ή θα αφαιρέσετε την πηγή.
Η πηγή apt του προμηθευτή VPN σας έσπασε τον διαχειριστή πακέτων, και η διόρθωση είναι απόφαση, όχι εντολή. NO_PUBKEY, ή ένα παράπονο ότι το αποθετήριο δεν έχει αρχείο Release, σημαίνει ότι το apt αρνήθηκε να εμπιστευτεί αυτή την πηγή, οπότε κάθε επόμενη λειτουργία πακέτων συνεχίζει να τυπώνει την ίδια προειδοποίηση. Η ίδια η σήραγγα μάλλον είναι αθώα. Απαντήστε σε τρεις ερωτήσεις για το αν θέλετε ακόμη αυτή την πηγή, και η σωστή επισκευή ακολουθεί σχεδόν μηχανικά.
Πρώτα, βάλτε τη βλάβη στη σωστή κατηγορία
Μια αποτυχία εμπιστοσύνης ονομάζει το αρχείο πηγής και είτε το κλειδί που λείπει είτε το απόν αρχείο Release. Μια αποτυχία μεταφοράς φαίνεται διαφορετική: σφάλματα πιστοποιητικού TLS, άρνηση σύνδεσης, λήξεις χρόνου ή ένα proxy που αρνείται CONNECT. Αυτή η διάκριση καθορίζει ποιο άρθρο διαβάζετε, γιατί ένα VPN που υποκλέπτει TLS ή μπλοκάρει τον κεντρικό υπολογιστή του προμηθευτή παράγει σφάλματα μεταφοράς, όχι σφάλματα υπογραφής.
Εκτελέστε sudo apt update μόνο του και διαβάστε το τέλος, αγνοώντας τις προσωρινά αποθηκευμένες καταχωρήσεις από πάνω. Η γραμμή που έχει σημασία ονομάζει /etc/apt/sources.list.d/ και σας λέει ποιο αρχείο να ανοίξετε.
Αν η βλάβη ακολουθεί την άνοδο της σήραγγας, δοκιμάστε με τη σήραγγα κατεβασμένη και με DNS που επιλύεται από τον resolver του συστήματος. Μια πηγή που λειτουργεί χωρίς το VPN είναι ζήτημα δρομολόγησης ή υποκλοπής, και καμία ποσότητα διαχείρισης κλειδιών δεν θα το διορθώσει.
Τρεις ερωτήσεις που επιλέγουν τη διαδρομή
Εγκαθιστάτε ή αναβαθμίζετε ακόμη πακέτα από αυτή την πηγή; Αν ο πελάτης χρησιμοποιείται ενεργά, επισκευάστε την εμπιστοσύνη. Αν εγκαταστήσατε τον πελάτη μία φορά και τώρα εισάγετε ένα απλό προφίλ στο NetworkManager, η πηγή είναι άχθος και η αφαίρεση είναι η έντιμη διόρθωση.
Δεύτερον, δημοσιεύει ο προμηθευτής κλειδί και αποτύπωμα που μπορείτε να επαληθεύσετε εκτός καναλιού; Τρίτον, ποιος διαχειρίζεται κλειδιά σε αυτόν τον κεντρικό υπολογιστή: η διανομή ή εσείς; Μια πηγή υπογεγραμμένη με κλειδί που δεν μπορείτε να επαληθεύσετε είναι αρχή ενημερώσεων που δεν θα έπρεπε να παραχωρήσετε.
Ένα όχι στην πρώτη ερώτηση τελειώνει την ανάλυση. Ένα ναι και στα τρία σημεία δείχνει την επισκευή με signed-by, τη μόνη διάταξη που και λειτουργεί και παραμένει ελεγχόμενη. Το ανακάτεμα των δύο διαδρομών, κρατώντας την πηγή και πιέζοντάς την να περάσει, είναι η μόνη επιλογή που αξίζει να αποκλείσετε ρητά.
Γιατί το trusted=yes μοιάζει με διόρθωση και δεν είναι
Η σελίδα του εγχειριδίου sources.list είναι άμεση σχετικά. Η ρύθμιση της επιλογής Trusted σε yes λέει στο apt να δέχεται την πηγή ακόμη και όταν αποτυγχάνει η ταυτοποίηση, κάτι που απενεργοποιεί το apt-secure για αυτό το αποθετήριο. Η σελίδα το επιφυλάσσει για τοπικό πλαίσιο, αν χρησιμοποιείται καθόλου.
Αυτό δεν είναι στενότερη εκδοχή της εμπιστοσύνης στον προμηθευτή. Αφαιρεί το ερώτημα ποιος υπέγραψε το ευρετήριο, οπότε όποιος μπορεί να απαντήσει για αυτό το όνομα κεντρικού υπολογιστή μπορεί να δώσει στο μηχάνημά σας πακέτα που εγκαθίστανται ως root.
Διαδρομή επισκευής: πάρτε το κλειδί και μετά καρφιτσώστε το
Πάρτε το κλειδί από το σημείο που τεκμηριώνει ο προμηθευτής και απογυμνώστε το σε μπρελόκ κλειδιών που διαχειρίζεται ο διαχειριστής, και μετά στρέψτε τη γραμμή του αποθετηρίου σε αυτό το αρχείο ώστε η εμπιστοσύνη να μην μπορεί να μετακινηθεί.
- Διαβάστε τη γραμμή που αποτυγχάνει για να πάρετε το ID κλειδιού και το όνομα του αρχείου πηγής.
- Κατεβάστε το κλειδί του προμηθευτή σε μορφή ASCII και εκτελέστε
gpg --dearmorσε/etc/apt/keyrings/vendor-name.gpg. - Προσθέστε
[signed-by=/etc/apt/keyrings/vendor-name.gpg]στην καταχώριση στο αρχείο.listαυτού του προμηθευτή. - Εκτελέστε
sudo apt updateκαι επιβεβαιώστε ότι η πηγή ανακτά ευρετήριο αντί να επαναλαμβάνει την προειδοποίηση υπογραφής.
Προτιμήστε /usr/share/keyrings για κλειδιά που φτάνουν με πακέτο και /etc/apt/keyrings για κλειδιά που τοποθετείτε με το χέρι. Ο διαχωρισμός δεν είναι διακοσμητικός: λέει στον επόμενο διαχειριστή ποια κλειδιά θα επιβιώσουν από αναβάθμιση πακέτου και ποια χρειάζονται άνθρωπο.
Επαληθεύστε το αποτύπωμα με τη δημοσιευμένη τιμή του προμηθευτή πριν το εμπιστευτείτε. Ένα ID κλειδιού που επικολλήθηκε από ανάρτηση φόρουμ είναι ο τρόπος που ένα μηχάνημα αρχίζει να εμπιστεύεται αρχή ενημερώσεων που κανείς δεν μπορεί να ονομάσει.
Διαδρομή αφαίρεσης, και γιατί το σφάλμα μπορεί να επιστρέψει
Δείτε τι έγραψε πραγματικά ο εγκαταστάτης, γιατί πολλά αρχεία μπορούν να αναφέρουν τον ίδιο προμηθευτή και ένα από αυτά είναι συνήθως ένα περισσευούμενο αντίγραφο.
grep -r . /etc/apt/sources.list.d/
sudo rm /etc/apt/sources.list.d/vendor.listΤο apt διαβάζει μόνο αρχεία .list και .sources από αυτόν τον κατάλογο, οπότε ένα αντίγραφο .save ή .distUpgrade αγνοείται ήδη· η διαγραφή του πάντως εμποδίζει έναν μεταγενέστερο αναγνώστη να το επαναφέρει κατά λάθος. Η αφαίρεση της πηγής δεν απεγκαθιστά τίποτα, και το apt μπορεί τότε να περιγράψει το εγκατεστημένο πακέτο VPN ως τοπικά εγκατεστημένο ή ως μη διαθέσιμο πλέον, που είναι μήνυμα κατάστασης πακέτου και όχι επιστροφή του σφάλματος εμπιστοσύνης.
Η επαναλαμβανόμενη περίπτωση είναι παλαιότερες οδηγίες που εγκαθιστούσαν κλειδιά με apt-key στον γενικό δακτύλιο εμπιστοσύνης. Αυτή η διαδρομή έχει καταργηθεί, και μια αναβάθμιση έκδοσης μπορεί να αφήσει το κλειδί απορριφθέν ή απλώς μη συμβουλευμένο, και γι' αυτό ακριβώς ένα σφάλμα που ήταν ήσυχο για ένα χρόνο εμφανίζεται την εβδομάδα που αναβαθμίζετε. Ελέγξτε /etc/apt/trusted.gpg.d/, και μετά μεταφέρετε την απόφαση εμπιστοσύνης στη γραμμή του αποθετηρίου όπου ανήκει. Αν ο προμηθευτής τυπώνει ακόμη οδηγίες apt-key, χρησιμοποιήστε signed-by ούτως ή άλλως· είναι η διάταξη που τεκμηριώνει το εγχειρίδιο, και αυτή που επιβιώνει από αναβάθμιση.