Ασφαλές λειτουργικό χωρίς κωδικούς με ένα κλειδί USB

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

Ε λοιπόν όχι, οι κωδικοί είναι άχρηστοι, το σπίτι μας το ανοίγουμε με ένα κλειδί (τουλάχιστον στην Ελλάδα), γιατί όχι και τον υπολογιστή; Θα χρειαστούμε μόνο ένα απλό στικάκι USB.

Επίσης, διαβάστε και συνδυάστε το με τα παρακάτω για μια πλήρη λύση:

1. Εγκατάσταση του pam_usb

Θα χρειαστεί να εγκαταστήσουμε ένα πακέτο. Το pam_usb. Αλλά αυτό που υπάρχει στα αποθετήρια είναι παλιό και έχει σταματήσει να αναπτύσσεται. Η ανάπτυξη του όμως συνεχίζεται εδώ και θα πρέπει να το κατεβάσουμε από εκεί.

Σε Arch εγκαθιστούμε το πακέτο pam_usb . Η απλά το εγκαθιστούμε με compiling.

2. Ρύθμιση του pam_usb

Θα χρειαστούμε ένα στικάκι για κάθε διαφορετικό χρήστη. Οποιοδήποτε στικάκι, αν και καλό είναι να έχει και ένα σειριακό αριθμό. Το στικάκι δε θα πειραχθεί καθόλου και μπορούμε να το χρησιμοποιούμε κανονικά. Θα πρέπει να το προσθέσουμε στο σύστημα, με την εντολή:

sudo pamusb-conf --add-device asfodelus-key
Please select the device you wish to add.
0) 058f 6387 (14122500000536)
1) USB SanDisk 3.2Gen1 (04013dfec44a56d6b82....)

1
[0-1]: Which volume would you like to use for storing data ?
0) /dev/sdc2 (UUID: 93C8-FFC4)
1) /dev/sdc1 (UUID: 92EA-E168)

1
[0-1]: Name		: asfodelus-key
Vendor		: USB
Model		: SanDisk 3.2Gen1
Serial		: 04013dfec44a56d6b82543ad1c8887...
UUID		: 92EA-E168

Save to /etc/security/pam_usb.conf? [Y/n]

Διάλεξα στο στικάκι και μια κατάτμηση. Στη συγκεκριμένη περίπτωση περιέχει δυο κατατμήσεις οπότε επέλεξα και την κατάτμηση. Αν έχεις συνδεμένο μόνο ένα στικάκι με μια κατάτμηση δε θα σε απασχολήσει με περιττές ερωτήσεις. Όπου asfodelus-key βάλτε ότι όνομα θέλετε.

Στη συνέχεια αντιστοιχούμε ένα χρήστη στο κλειδί.

sudo pamusb-conf --add-user $(whoami)

Κάνουμε ένα έλεγχο

sudo  pamusb-check $(whoami)
* Authentication request for user "asfodelus" (pamusb-check)
* Authentication device "asfodelus-key" is connected.
* Performing one time pad verification...
* Access granted.

3. Ρύθμιση του PAM

Αυτό είναι το ποιο δύσκολο στη διαδικασία, Να βρούμε το σωστό αρχείο. Στη διανομή μου (βασισμένη σε Debian :debian: ) η αλλαγή έγινε αυτόματα, αλλά σε RedHat :fedora: ή Arch :arch: θα πρέπει να το κάνουμε (με πολύ προσοχή και αφού κρατήσουμε αντίγραφο). Δοκιμάστε στις θέσεις /etc/pam.d/common-auth, /etc/pam.d/system-auth, /etc/pam.d/password-auth.

Το αρχείο περιέχει μια γραμμή που μοιάζει με την παρακάτω:

auth    required        pam_unix.so nullok_secure

Αυτή η γραμμή είναι που ξεκλειδώνει πράγματα με τον κωδικό. Θέλουμε το κλειδί μας να δοκιμαστεί πρώτο. Οπότε πριν από αυτή τη γραμμή θα προσθέσουμε:

auth    sufficient      pam_usb.so
auth    required        pam_unix.so nullok_secure

Μισό τι σημαίνει sufficient και τι required; Καλή ερώτηση. Αν λέει sufficient και περάσει ο έλεγχος αυτό είναι από μόνο του ικανοποιητικό. Αν λέει required είναι απαιτούμενο και αν περάσει θα συνεχίσει στους επόμενους ελέγχους. Αν είναι όμως

auth    required      pam_usb.so
auth    required        pam_unix.so nullok_secure

Τότε θα πρέπει και να είναι συνδεμένο στον υπολογιστή το στικάκι, αλλά και να δώσουμε τον κωδικό. Η επιλογή είναι δική σου. Σε κάθε περίπτωση αν δεν υπάρχει το στικάκι θα περάσουμε στη δεύτερη γραμμή που ζητάει τον κωδικό.

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

# here are the per-package modules (the "Primary" block)
auth	sufficient	pam_usb.so 
auth	[success=1 default=ignore]	pam_unix.so nullok try_first_pass
# here's the fallback if no module succeeds
auth	requisite			pam_deny.so

Και αυτό ήταν! Δε θα χρειαστεί να ξαναγράψουμε τον κωδικό.

4. Επιπλέον ρυθμίσεις

Μπορούν να γίνονται πράγματα όταν προσθέτουμε ή αφαιρούμε τη συσκευή. Για παράδειγμα, έστω πως είμαστε με το laptop σε ένα καφενείο και θέλουμε να πάμε τουαλέτα. Θέλουμε με το που αφαιρούμε το στικάκι να παίζει τον εθνικό ύμνο. Η κάπως ποιο χρήσιμο να ενεργοποιείται η προστασία οθόνης. Με το που θα συνδέσουμε το στικάκι να ξεκλειδώνει το σύστημα.

Το αρχείο που πρέπει να πειράξουμε είναι το /etc/security/pam_usb.conf. Σαν παράδειγμα:

	<!-- User settings -->
	<users>
		<user id="asfodelus">
			<device>asfodelus-key</device>
			<option name="debug">false</option>
			<option name="quiet">false</option>
			<agent event="lock">
				<cmd>gnome-screensaver-command --lock</cmd>
				<env>DISPLAY=:1</env>
				<env>DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus</env>
				<env>XAUTHORITY=/run/user/1000/gdm/Xauthority</env>
			</agent>
			<agent event="unlock">
				<cmd>gnome-screensaver-command --deactivate</cmd>
				<env>DISPLAY=:1</env>
				<env>DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus</env>
				<env>XAUTHORITY=/run/user/1000/gdm/Xauthority</env>
			</agent>
		</user>
	</users>

Έπρεπε να εγκαταστήσω το πακέτο gnome-screesaver

5. Ξεκλείδωμα της κλειδοθήκης

Μέχρι τώρα δεν είναι ανάγκη να δώσουμε ποτέ μα ποτέ τον κωδικό. Μέχρι που πάμε να ανοίξουμε τον Chrome ή κάποιο άλλο πρόγραμμα που χρησιμοποιεί την κλειδοθήκη. Αχχ ακριβώς το ίδιο πρόβλημα με την ενεργοποίηση της σύνδεσης χωρίς κωδικό… Μπορούμε να τον ξεφορτωθούμε;

Η συνήθης λύση είναι να σβήσεις τον κωδικό της και να την έχεις πάντα ξεκλείδωτη. Αυτό θα δουλέψει, αλλά έχω παρατηρήσει πως κάποιες φορές κλειδώνει ξανά. Αλλά γιατί να μην μπορεί να ξεκλειδώνει με την ίδια διαδικασία; Δυστυχώς, δεν είναι τόσο απλό. Βλέπετε ο κωδικός χρησιμοποιείται για να ξεκλειδώνει το αρχείο με τους κωδικούς. Και η υλοποίηση της δεν επιτρέπει πολλαπλούς κωδικούς. Αν αντί για το USB κλειδί χρησιμοποιούσαμε δακτυλικό αποτύπωμα ή κάποιο ειδικό κρυπτογραφικό κλειδί ή οτιδήποτε άλλο δεν ξέρουμε τον κωδικό να την ξεκλειδώσουμε.

Αλλά υπάρχει μια λύση. Λύση όμως που απαιτεί να έχουμε τον κωδικό μας σε ένα αρχείο. Το σύστημα μου χρησιμοποιεί κρυπτογράφηση δίσκου (που την ξεκλειδώνει το ίδιο στικάκι με μια άλλη διαδικασία, ίσως ένα άλλο άρθρο) και είμαι προσεχτικός να μη μεταφέρω το αρχείο αυτό σε κάποιο backup. Αλλά αν έχω άλλους χρήστες με δυνατότητα για sudo ή μοιράζω όλα τα αρχεία του χρήστη στο εσωτερικό δίκτυο είμαι εκτιθέμενος. Και ποτέ μα ποτέ δε θα χρησιμοποιούσα αυτόν τον κωδικό για οτιδήποτε άλλο. Στον υπολογιστή στο σπίτι επέλεξα να δεχτώ το ρίσκο. Αλλά δε θα το έκανα ποτέ σε εταιρικό περιβάλλον. Η επιλογή είναι δική σας.

Σε ένα τερματικό

echo 'UNLOCK_PASSWORD="to_diko_mu_to_glyko"' >  ~/.keyring_unlock_password
chmod 0600 ~/.keyring_unlock_password

Στη συνέχεια θα φτιάξω ένα αρχείο ~/.config/autostart/keyring.desktop που θα περιέχει τα παρακάτω:

[Desktop Entry]
Name=Unlock Keyring
Comment=Unlock seahorse using USB key
Exec=/usr/bin/pamusb-keyring-unlock-gnome
Terminal=false
Type=Application

6. Κρύψιμο της συσκευής

Προαιρετικά κρύβουμε το στικάκι από τον διαχειριστή αρχείων, ώστε να μη φαίνεται πως είναι συνδεμένο στον υπολογιστή. Υπάρχουν πολλοί τρόποι να το κάνουμε αυτό, αλλά ο ποιο απλό είναι μερικές καταχωρήσεις στο /etc/fstab:

dev/disk/by-label/Ventoy         /mnt/Ventoy   auto nosuid,nodev,nofail,noauto 0 0
/dev/disk/by-partlabel/VTOYEFI   /mnt/VTOYEFI  auto nosuid,nodev,nofail,noauto 0 0

7. Τελικές σκέψεις

Η χρήση του υπολογιστή χωρίς κωδικούς είναι βολική μεν, λίγο επικίνδυνη δε. Αν ξεχάσεις το στικάκι πάνω, οποιοσδήποτε μπορεί να κάνει οτιδήποτε θέλει στον υπολογιστή. Επίσης, το να μη δίνεις τον κωδικό στο sudo μπορεί να σε οδηγήσει σε απροσεξίες. Και ένας άλλος κίνδυνος: με το να μη γράφεις συνεχώς τον κωδικό υπάρχει ο κίνδυνος να τον ξεχάσεις :joy:

Διαλέγεις αν θέλεις ασφάλεια ή ευκολία. Η επιλογή είναι δική σου.

8. Μετά από format

Αν κάνεις φορματ το στικάκι θα σταματήσει να λειτουργεί, σε αυτή την περίπτωση αφαιρούμε τη συσκευή από το αρχείο ρυθμίσεων (ή αν είναι ένας χρήστης μόνο απλά το σβήνουμε). Σε ένα τερματικό γράφουμε

rm ~/.pamusb/*

και επαναλαμβάνουμε τη διαδικασία.

Αν προκύψουν προβλήματα με τα pads σβήνουμε τον παραπάνω κατάλογο και στη συνέχεια

sudo  pamusb-check $(whoami)
5 «Μου αρέσει»

Mπορούμε να κάνουμε το ίδιο με USB stick 2FA ?

Σίγουρα μπορούμε, αλλά όχι με τον ίδιο τρόπο. Βρήκα αυτή τη μέθοδο, σαν μια φτηνή λύση. Δυστυχώς δεν έχω πρόσβαση σε σχετική συσκευή να πειραματιστω.