Κάντε Auto-mount κρυπτογραφημένες συσκευές κατά την εκκίνηση του συστήματος χωρίς αλλαγές στο /etc/fstab


Το άρθρο αυτό αποτελεί μέρος της σειράς Raspberry Pi Server, υποστηριζόμενο από την επίσημη αντιπροσωπία του Raspberry Pi στην Ελλάδα, το nettop.gr το οποίο με προμήθευσε με το Raspberry Pi 5 ώστε να δημιουργήσω περισσότερο περιεχόμενο για τις δυνατότητες και τα Project που μπορούν να τρέξουν self-hosted πάνω στο Raspberry Pi στα Ελληνικά. Ευχαριστώ πάρα πολύ το nettop.gr για την υποστήριξη!!!

Πριν μερικά χρόνια, όταν πρωτοέστησα τον δεύτερο server μου, ο οποιός ήταν ένα Raspberry Pi 4, έγραψα έναν οδηγό σχετικά με το πώς να κάνουμε Auto-Mount συσκευές κατά την εκκίνηση του συστήματος, χωρίς να χρειαστεί να πραγματοποιήσουμε οποιαδήποτε αλλαγή στο /etc/fstab.

Ο οδηγός αυτός έκανε ακριβώς αυτό που υποσχόταν, ωστόσο αφορούσε μη κρυπτογραφημένες συσκευές.

Το πρόβλημα:

Έχουμε έναν server, π.χ. ένα Raspberry Pi 5, το οποίο λειτουργεί από μία microSD. Τα services που τρέχουμε, θέλουν αρκετά TB για να δουλέψουν, συνεπώς συνδέσαμε έναν εξωτερικό σκληρό δίσκο, τον οποίο ρυθμίσαμε ώστε να γίνεται αυτόματα mount από το σύστημα, ώστε να λειτουργούν κανονικά όλες οι υπηρεσίες με έξτρα αποθηκευτικό χώρο.
Ωστόσο, χρησιμοποιώντας την παραδοσιακή λύση του /etc/fstab, οποιοδήποτε συντακτικό/λογικό λάθος πάνω στην αλλαγή, κατέληγε σε grub rescue που έπρεπε να συνδεθεί ποντίκι-πληκτρολόγιο για να πραγματοποιηθούν αλλαγές, είτε να αφαιρεθεί η sd από το Raspberry Pi, να συνδεθεί σε άλλο σύστημα και να αναιρεθεί η αλλαγή.
Επιπλέον, υπήρχε και το πρόβλημα του αν για οποιοδήποτε λόγο δεν ήταν συνδεδεμένη η συσκευή κατά το boot, πάλι κατέληγε σε grub rescue… Και αν εκείνη την ώρα απουσίαζες από το σπίτι και έκανες αλλαγές μέσω ssh και VPN… και κάποιος από λάθος αφαίρεσε/κούνησε το καλώδιο… RIP

Συνεπώς, έπρεπε να βρούμε μία διαφορετική προσέγγιση για να επιλύσω το πρόβλημα μου με το automount. Εκεί έρχεται η λύση που προσφέρει το Auto-Fs.

Γιατί θα πρέπει να έχουμε κρυπτογραφημένες τις συσκευές μας;

Σε έναν κόσμο όπου οι κυβερνοεπιθέσεις βρίσκονται σε άνοδο, θα πρέπει να υπολογίζουμε σημαντικά και την έννοια της Φυσικής και Περιβαλλοντικής Ασφάλειας των συσκευών μας.
Πιο συγκεκριμένα:

  • Τι θα συμβεί αν χάσουμε τον σκληρό μας δίσκο; Θα έχει πρόσβαση σε όλα μας τα αρχεία ένας άγνωστος;
  • Τι θα συμβεί αν μας τον σκληρό μας δίσκο; Θα έχει πρόσβαση σε όλα μας τα αρχεία ένας κακόβολους;

Σε αυτό τον οδηγό, θα δούμε πώς μπορούμε να κάνουμε auto-mount εξωτερικές συσκευές κατά το boot (δηλαδή φόρτωμα του server μας), οι οποίες είναι κρυπτογραφημένες. Άρα, ο server θα πρέπει να “εισάγει” ένα κλειδί αυτόματα, ώστε να μπορεί να αποκρυπτογραφήσει και να έχει πρόσβαση στα αρχεία της εξωτερικής συσκευής αυτής.

Αν θέλετε να μάθετε περισσότερα για το Luks και το πώς μπορείτε να κρυπτογραφήσετε τις συσκευές/partitions σας, μπορείτε να ρίξετε μία ματιά εδώ:.

ΠΡΟΣΟΧΗ: Πριν συνεχίσουμε, θα πρέπει να υπολογίζετε ότι το partition όπου περιλαμβάνει το Λειτουργικό Σύστημα θα πρέπει να είναι κι αυτό κρυπτογραφημένο. Διαφορετικά, κάποιος κακόβολος χρήστης, με φυσική πρόσβαση στον server σας, θα μπορούσε να αντιγράψει το κλειδί κρυπτογράφησης από το μη κρυπτογραφημένο λειτουργικό σύστημα και έπειτα να ξεκλειδώσει τον κρυπτογραφημένο μας δίσκο. Ωστόσο, ακόμα και με αυτή την παράμετρο, αν μεταφέρετε συχνά τον δίσκο αυτό μαζί σας, το να παραμένει κρυπτογραφημένος ο δίσκος αυτός at rest παραμένει εξαιρετικά σημαντικό.

Ποια προσέγγιση θα ακολουθήσουμε;

Η προσέγγιση που θα ακολουθήσουμε σε αυτό τον οδηγό είναι να δημιουργήσουμε ένα αρχείο κλειδί για την κρυπτογραφημένη συσκευή, το οποίο θα βρίσκεται στο /root με αυστηρά permissions, ώστε να μην μπορεί να έχει κανένας χρήστης πρόσβαση σε αυτό.

Γιατί να κρυπτογραφούμε τις εξωτερικές συσκευές μας με LUKS;

Το θετικό με το να κρυπτογραφούμε τις συσκευές μας με LUKS είναι πώς μπορούμε να ορίζουμε πολλαπλές μορφές αποκρυπτογράφησης.

Πιο συγκεκριμένα, μία κρυπτογραφημένη συσκευή μπορεί να ξεκλειδώνει:

  • Με κάποιο κωδικό πρόσβασης όπου έχει ορίσει ο χρήστης,
  • Με κάποιο αρχείο-κλειδί που έχει δημιουργήσει ο χρήστης.

Ας ξεκινήσουμε:

Δημιουργούμε το αρχείο-κλειδί οπού θα αποκρυπτογραφεί τον εξωτερικό μας δίσκο, και το εντάσσουμε στον ήδη κρυπτογραφημένο μας δίσκο:

Αρχικά, δίνουμε lsblk έτσι ώστε να βρούμε την συσκευή οπού θέλουμε να ρυθμίσουμε να γίνεται αυτόματα mounted:

Στην περίπτωση μου, λειτουργώ με το TuxDriveB οπού είναι το /dev/sda.

Και έπειτα, με στόχο να δημιουργήσουμε ένα μυστικό αρχείο-κλειδί, δίνουμε:

tr -dc a-z < /dev/urandom | head -c 30 > /dev/shm/disk2.key

Μεταφέρουμε το αρχείο-κλειδί στον /root:

sudo cp /dev/shm/disk2.key /root/disk2.key

Αυστηροποιούμε τα δικαιώματα :

sudo chmod 600 /root/disk2.key

Εντάσσουμε το αρχείο-κλειδί στον κρυπτογραφημένο σκληρό δίσκο ως τρόπος αποκρυπτογράφησης της συσκευής αυτής:

Δίνουμε:

sudo cryptsetup luksAddKey /dev/sda /root/disk2.key 
# Σημείωση: Το /dev/sda είναι ο δικός μου εξωτερικός δίσκος, όπως είδαμε και στο παραπάνω screenshot, εσείς θα προσθέσετε το δικό σας, όπως είδατε δίνοντας την εντολή lsblk.

Ώρα να παραμετροποιήσουμε την εξωτερική συσκευή να γίνεται αυτόματα mount:

Δίνουμε:

sudo nano /etc/crypttab

Kαι γράφουμε εντός:

# <target name> <source device>         <key file>      <options>
TuxDriveB /dev/sda /root/disk2.key luks

Το TuxDriveB είναι το όνομα που όρισα εγώ, μπορείτε να γράψετε ό,τι θέλετε (π.χ. έχω 3 εξωτερικούς δίσκους για Βackups: TuxDriveA, TuxDriveB, TuxDriveC και για ευκολότερη αρίθμηση των backups)

Έπειτα, δίνουμε:

sudo nano /etc/auto.cryptmap

Και γράφουμε εντός του αρχείου:

/media/TuxDriveB -fstype=ext4,rw :/dev/mapper/TuxDriveB

#Όπου TuxDriveB, γράφουμε το όνομα όπου ορίσαμε στο crypttab προηγουμένως

Κάνουμε επανεκκίνηση το service δίνοντας:

sudo systemctl restart autofs

Και είμαστε έτοιμοι!!! :slight_smile:
Κάνουμε και μία επανεκκίνηση, και τώρα θα πρέπει ο δίσκος να γίνεται mount αυτόματα!

6 «Μου αρέσει»