Betrifft OS:
FreeBSD

Festplattenverschlüsselung mit pefs

pefs stellt eine stapelbare Dateisystemverschlüsselung zur Verfügung. Damit ist möglich, ohne weiteres mit Hilfe eines Passworts, eine kryptografische Transformation von Daten und Dateinamen zu schaffen. pefs ist also sozusagen eine encfs-Alternative im BSD-Stil (inkompatibel mit encfs, das von Linux her bekannt ist).

Ergänzt wird pefs durch das Modul pam_pefs, welches erlaubt, das Passwort an PAM beim Login zu übergeben und so den pefs-Stapel zu initialisieren.

Vorteile gegenüber anderen Verschlüsselungsmethoden

  1. Der Rechner kann bis zum Login gestartet werden und kann hiermit ohne Hindernisse für andere Nutzer zur Verfügung stehen, die kein Passwort für die persönlichen verschlüsselten Daten haben.
  2. Man ist in der Lage eine Sicherung der verschlüsselten Daten durchzuführen (zum Beispiel mit dump, ohne das Dateisystem selbst zu entschlüsseln.
  3. Wird man aufgefordert, dass Passwort für das Notebook auszugeben, kann man seine Daten schützen, indem man einen Pseudonutzer anlegt, den man herausgibt und nicht den echten.

Vorgehen

Ich erkläre hier wie man es mit pefs und pam_pefs schafft, sein $HOME für sich persönlich zu verschlüsseln. Man kann diese Anleitung natürlich beliebig variieren, je nach Geschmack.

Diese Anleitung geht davon aus, dass Euer komplettes $HOME beim Einloggen zur Verfügung gestellt werden soll. pam_pefs funktioniert auch nur in diesem Fall. Man kann nicht automatisch ein anderes Verzeichnis als sein vordefiniertes $HOME damit behandeln.

Man hat hier also die Möglichkeit zwei Passwörter zu definieren. Bitte denkt daran, dass PEFS das Passwort, dass bei addchain angegeben worden ist braucht, um das Dateisystem zu entschlüsseln. Euer Login-Passwort tut das nicht. Ihr könnt Euch dennoch mit dem Login-Passwort einloggen, aber nur dann, wenn mindestens ein Mal das PEFS-Passwort (beim Login für PAM) eingebeben worden ist.

Die Schritte muss man natürlich aus Administrator durchführen.

Vorsichtsmaßnahmen

Bitte beachtet, dass es um Daten und Dateien geht. Macht unbedingt eine Sicherung. Verlust von wichtigen Daten schmerzt immer. Ihr seid hiermit gewarnt, dass man nicht einfach blind auf meine Anleitung verlassen sollte und dass man leicht Fehler machen kann, die zum Datenverlust führen können.

Installation

pefs installiert man mit dem Port sysutils/pefs-kmod.

portmaster -d sysutils/pefs-kmod

Optional kann man AESNI beim Kernel dazuladen. Es nützt aber nur, wenn man eine CPU hat, die AESNI unterstützt.

In /boot/loader.conf:

aesni_load="YES"

$HOME vorbereiten

Bitte hier genau aufpassen. Schaut bitte auch was tatsächlich Euer $HOME ist. Bei einigen FreeBSD-Installationen ist es oft /usr/home/myuser. Ich benutze hier /home/myuser. PEFS geht hier ziemlich exakt vor und wird sich weigern zu funktionieren, wenn Euer Benutzerverzeichnis /home/myuser ist und das mit Softlinks realisiert wurde, sodass eigentlich Euer $HOME physikalisch auf /usr/home/myuser liegt. Am Besten mit „vipw“ das $HOME auf /usr/home/myuser ändern.

cd /
mv /home/myuser /home/myuser.bak
mkdir /home/myuser

Nun wird die verschlüsselte Schicht mit einem leeren Keychain erstellt und ein Passwort angegeben.

pefs addchain -fZ -a aes256-xts /home/myuser
pefs mount /home/myuser /home/myuser

(Ihr könnt natürlich einen anderen Algorithmus mit -a bei addchain angeben.)

Jetzt testet man, ob alles korrekt funktioniert:

pefs mount /home/myuser /home/myuser
pefs addkey -c /home/myuser

Sollte alles OK sein, dann muss der Schlüssel für PAM zugreifbar gemacht werden. Dazu setzt man nur die Permissions korrekt:

chown myuser:myuser /home/myuser/.pefs.db

Daten auf das verschlüsselte $HOME kopieren

Bitte beachtet den letzten Slash am Quellpfad!!

cp -Rp /home/myuser.bak/ /home/myuser

Das Quellverzeichnis wird hier noch nicht gelöscht. Es erspart Ärger, wenn man es nicht jetzt schon aus der Sicherung fischen muss, falls etwas schief gehen sollte. Denkt aber bitte daran, es zu löschen, wenn alles glatt gegangen ist. Es sind schließlich private Daten, die verschlüsselungswürdig sind.

PAM vorbereiten

PAM wird so eingestellt, dass mit dem oben angegebenen pefs-Passwort ein entschlüsselnder Mount durchgeführt wird und beim normalen passwd-Passwort einfach ein Login ohne weiteres Entschlüsseln gemacht wird.

In /etc/pam.d/system:

auth            sufficient      pam_opie.so             no_warn no_fake_prompts
auth            requisite       pam_opieaccess.so       no_warn allow_local
auth            sufficient      /usr/local/lib/pam_pefs.so      try_first_pass
auth            required        pam_unix.so             no_warn try_first_pass nullok

.
.
.
 
session         optional        /usr/local/lib/pam_pefs.so
session         required        pam_lastlog.so          no_fail

Solltet Ihr KDM benutzen oder andere durch PAM authentifizierte Dienste, muss man diese Zeilen auch dort einfügen.

Des Weiteren ist es wichtig, dass pefs mit einem mount beim Start vorinitialisiert wird. Dieser mount entschlüsselt nicht, sondern hält fest, dass das Verzeichnis ein pefs-Dateisystem darstellt.

Deswegen fügt man diese Zeile in die /etc/rc.local ein:

/usr/local/sbin/pefs mount /home/myuser /home/myuser

Testen des Logins

Erstmal alle Schlüssel entfernen. Der pefs-Mountpoint bleibt dabei erhalten.

pefs flushkeys /home/myuser

Schaut bitte nach wie Euer $HOME aussieht:

ls -la /home/myuser

Es sollte aus vielen seltsam aussehenden Punktdateien bestehen. Auf einer anderen Konsole versucht nun Euren Benutzernamen einzugeben und das Passwort, das für die Entschlüsselung angegeben wurde. Gebt nicht Euer passwd-Passwort ein. Das führt nur dazu, dass Euer $HOME nicht richtig erkannt wird.

Schaut nach, ob die Dateien entschlüsselt sind:

ls -l ~

Optional sollte man das auch einzeln für einen KDM-Login ausprobieren. Natürlich muss man sich zunächst wieder ausloggen und die pefs-Schicht auch wieder mit

pefs flushkeys /home/myuser

sperren bevor man es in KDM ausprobiert. KDM loggt sich bei Problemen gar nicht ein, weil es direkt Dateien anlegen möchte, was auf einem pefs-Dateisystem ohne Schlüssel wegen fehlender Schreibrechte nicht gehen wird.