Γιατί το nosuid εμποδίζει έναν βοηθό VPN να γίνει root
Ένας κρυπτογραφημένος κατάλογος χρήστη και μια προσάρτηση με nosuid είναι διαφορετικές ιδιότητες. Ο βοηθός χρειάζεται αξιόπιστη διαδρομή εγκατάστασης και περιβάλλον εκκίνησης που σέβεται το bit προνομίων του.
Η κρυπτογράφηση δίσκου και μια προσάρτηση με nosuid ακούγονται σαν παραλλαγές της ίδιας ιδέας, και δεν σχετίζονται καθόλου. Το ένα προστατεύει δεδομένα σε ηρεμία, και το άλλο αποφασίζει αν ο πυρήνας θα σεβαστεί ένα bit προνομίων τη στιγμή που ξεκινά ένα πρόγραμμα. Ένας βοηθός που δεν φτάνει στην ταυτότητα που περιμένει παραπονιέται για το δεύτερο. Η υπόθεση ότι ευθύνεται το πρώτο στέλνει ανθρώπους να επανεγκαταστήσουν πελάτες που δεν ήταν ποτέ χαλασμένοι.
Δύο Άσχετες Ιδιότητες
Η κρυπτογράφηση δίσκου απαντά ποιος μπορεί να διαβάσει τα μπλοκ όταν το μηχάνημα είναι κλειστό. Μια επιλογή προσάρτησης απαντά τι θα κάνει ο πυρήνας με τα bit λειτουργίας ενός αρχείου όταν κάποιος το εκτελέσει. Τίποτα στο πρώτο δεν περιορίζει το δεύτερο, και ένα πλήρως κρυπτογραφημένο φορητό μπορεί να προσαρτήσει ένα σύστημα αρχείων με κάθε περιορισμό στη θέση του.
Το να τα διαβάζει κανείς ως μία ιδιότητα παράγει τη θεωρία ότι ένας κρυπτογραφημένος κατάλογος χρήστη εμποδίζει την πρόσβαση root. Αυτή η θεωρία επιβιώνει επειδή τα δύο συμπτώματα εμφανίζονται στο ίδιο μηχάνημα, όχι επειδή μοιράζονται μια αιτία.
Τι Πραγματικά Καταστέλλει τη Μετάβαση
Η αναφορά του execve περιγράφει πώς ένα εκτελέσιμο με set-user-ID αλλάζει την πραγματική ταυτότητα της νέας διεργασίας σε αυτήν του ιδιοκτήτη του αρχείου. Η ίδια σελίδα απαριθμεί τις συνθήκες που καταστέλλουν αυτή τη μετάβαση και το αντίστοιχο για τα αναγνωριστικά ομάδας: μια ρύθμιση no_new_privs, ένα σύστημα αρχείων προσαρτημένο με nosuid και μια διεργασία που παρακολουθείται. Οι δυνατότητες αρχείου αγνοούνται υπό τις ίδιες συνθήκες. Αυτοί οι τέσσερις κανόνες καλύπτουν σχεδόν κάθε αναφορά αυτού του είδους.
Αυτή η λίστα εξηγεί γιατί η λειτουργία που εκτυπώνει το ls δεν είναι ποτέ όλη η ιστορία της εξουσιοδότησης. Δεν σας λέει ποια συνθήκη προκάλεσε ένα συγκεκριμένο μήνυμα αποτυχίας, και η εφαρμογή μπορεί να αναφέρει μια άσχετη λειτουργία διαπιστευτηρίων με την ίδια διατύπωση. Κρατήστε το ακριβές πρόγραμμα, τον εκκινητή και την ακολουθία σφαλμάτων πριν βγάλετε συμπέρασμα.
Προσδιορίστε το εκτελέσιμο που εγκατέστησε το υποστηριζόμενο πακέτο, τον ιδιοκτήτη του, την πραγματική του διαδρομή και την πολιτική του συστήματος αρχείων που το περιέχει. Ένα αντίγραφο σε φάκελο λήψεων δεν είναι ο εγκατεστημένος βοηθός, ό,τι κι αν λέει η λειτουργία του.
Τι να Μην Κάνετε
Το να θέτει κανείς bit set-user-ID σε ένα μη επαληθευμένο δυαδικό και να το μετακινεί μέχρι να εξαφανιστεί ο περιορισμός δεν είναι επισκευή. Αντικαθιστά μια πολιτική που δεν κατανοούσατε με ένα προνόμιο που δεν μπορείτε να ελέγξετε, και η ίδια τεχνική που εφαρμόζεται σε έναν βοηθό είναι γνωστή διαδρομή κλιμάκωσης. Η αφαίρεση του nosuid από μια προσάρτηση είναι χειρότερη, γιατί επηρεάζει κάθε πρόγραμμα σε αυτό το σύστημα αρχείων, όχι μόνο ένα.
Η υποστηριζόμενη διαδρομή είναι η τεκμηριωμένη εγκατάσταση του βοηθού ή της υπηρεσίας από τον πελάτη, που την εκτελεί διαχειριστής και τοποθετεί το δυαδικό εκεί όπου η πολιτική το περιμένει. Έτσι μένει ένας μηχανισμός προνομίων αντί για δύο.
Επιβεβαιώστε το Πραγματικό Περιβάλλον Εκκίνησης
Μετά από μια εξουσιοδοτημένη διόρθωση, εκτελέστε τον βοηθό όπως τον εκτελεί το προϊόν και όχι από ένα κέλυφος root. Μια επιτυχία ως root δεν αποδεικνύει τίποτα για τη διαδρομή που ακολουθεί ένας απλός χρήστης, και η διαφορά μεταξύ αυτών των δύο περιβαλλόντων είναι ακριβώς το θέμα της αποτυχίας.
Έπειτα επιβεβαιώστε τη λειτουργία δικτύου για την οποία υπάρχει ο βοηθός. Ένας βοηθός που ξεκινά αλλά δεν μπορεί να ρυθμίσει τη διεπαφή μετακίνησε το πρόβλημα ένα στάδιο πιο πέρα, δεν το έλυσε.
findmnt -no TARGET,OPTIONS /home
getcap /usr/libexec/openvpn-helper 2>/dev/null; ls -l /usr/libexec/openvpn-helper
Καταγράψτε τις επιλογές προσάρτησης και την ιδιοκτησία του βοηθού στο ίδιο σημείωμα. Διαφορετικά, το επόμενο άτομο που θα το αποσφαλματώσει θα επαναλάβει τη θεωρία της κρυπτογράφησης από την αρχή.