Auf Lehrergeräten ist es sinnvoll zumindest das home-Verzeichnis zu verschlüsseln, da darin oft personenbezogene Daten abgelegt sind. Dazu gibt es verschiedene Varianten:
Zusätzlich zum home sollte auch die swap-Auslagerung (falls vorhanden) und das /tmp-Verzeichnis verschlüsselt werden.
Da das Betriebssystem Ubuntu und die home-Partition bei meiner Konfiguration (Sync mit LINBO) auch unverschlüsselte Daten enthalten, kam nur die Verschlüsselung ecryptfs in Frage.
Am einfachsten ist es die Verschlüsselung beim Neuanlegen eines Benutzers gleich mit zu installieren. Bei Anmeldung an Ubuntu wird dann das Anmeldepasswort auch zum Entsprerren einer Passphrase verwendet und mit der Passphrase das home entschlüsselt.
Verschlüsselung installieren:
sudo apt install ecryptfs-utils cryptsetup
Neuen Benutzer anlegen:
sudo adduser –-encrypt-home testlehrer
Nun die Benutzerverwaltung aufrufen und ggf. weitere Einstellungen zum Benutzer setzen.
Problem bei ecryptfs: Das home wird beim Abmelden nicht verschlossen, nur beim Herunterfahren. Deshalb in der Datei /etc/pam.d/common-session-noninteractive
folgende Zeile mit „#“ auskommentieren:
... # session optional pam_encryptfs.so unwrap ...
Die dabei erzeugte Passphrase „wrapped-passphrase
“ sollte man nun an einem sicheren Ort (z.B. USB-Stick) aufbewahren. Dazu die Passphrase unverschlüsselt extrahieren:
ecryptfs-unwrap-passphrase .ecryptfs/wrapped-passphrase > /media/usbstick/mypassphrase.txt
Alle Befehle als root ausführen. Zuerst die Verschlüsselungs-Pakete installieren:
apt install ecryptfs-utils cryptsetup
Meist gibt es neben /tmp
auch das Verzeichnis /var/tmp
, die man mit einem Link zusammenführt:
# rm –Rf /var/tmp # ln –s /tmp /var/tmp
Nun eine Container-Datei /.crypttmp
der Größe 300 MB erzeugen und (ohne journal) formatieren:
# dd if=/dev/zero of=/.crypttmp count=300 bs=1M # losetup /dev/loop20 /.crypttmp # mkfs.ext4 -O ^has_journal /dev/loop20
In der Datei /etc/crypttab
eine Zeile hinzufügen:
crypttmp /.crypttmp /dev/urandom tmp,size=256, hash=sha256,cipher=aes-cbc-essiv:sha256
In der Datei /etc/fstab
eine Zeile hinzufügen:
/dev/mapper/crypttmp /tmp ext4 defaults 0 2
Mapping starten und Verzeichnis leeren:
# cryptdisks_start crypttmp # rm -Rf /tmp/*
Beim Booten wird jedesmal ein neues /tmp
-Verzeichnis angelegt, formatiert und mit einer (neuen) zufälligen Passphrase (/dev/urandom) verschlüsselt.
Problem: Das /tmp
-Verzeichnis hat hier eine maximale Größe von 300 MB - beim einem großen Update des Systems brach dieses bei mir ab, da der update-Prozess in /tmp
nicht genügend Speicherplatz für alle neuen Pakete hatte. Ggf. die Größe der Container-Datei verändern.
https://wiki.ubuntuusers.de/ecryptfs/Einrichten/
https://gist.github.com/intrd/46c7d087a08386b17da47e69bf5cab54
https://wiki.ubuntuusers.de/LUKS/
https://curius.de/2016/01/das-verhalten-entscheidet-ueber-die-wahl-der-verschluesselungsmethode/
In meiner Variante wird das Unterverzeichnis eines Benutzers mit frei wählbarem Benutzernamen, z.B. `tobias` auf einer eigenen Partition verschlüsselt. Ebenso wird tmp als eigene Partition verschlüsselt.
Ich partitioniere daher den Client so:
/dev/nvme0n1p1 260MB EFI (/boot) /dev/nvme0n1p2 16MB reserved MS /dev/nvme0n1p3 15 GB LINBO-Cache /dev/nvme0n1p4 35 GB Ubuntuclient (inkl. home für linuxadmin & alex) /dev/nvme0n1p5 1 GB /tmp /dev/nvme0n1p6 ca. 180 GB (Rest) home-crypt
alex
(1066) wird angelegt - unverschlüsselt mit Passwort Muster!
, er bekommt sudo-Rechte für das turnkey-skript und die Linuxadmin-Umgebung# groupadd -g 1066 alex # useradd -d /home/alex -k /home/linuxadmin -s /bin/bash -m -u 1066 -N -g 1066 alex # echo 'alex:Muster!' | chpasswd
/var/tmp
wird auf /tmp
verlinkt und beim Boot automatisch immer neu verschlüsseltmv /var/tmp/* /tmp/ mv /var/tmp/.??* /tmp/ rmdir /var/tmp/ ln -s /tmp /var/tmp echo "tmp /dev/nvme0n1p5 /dev/urandom tmp,cipher=aes-xts-plain64,size=256" >> /etc/crypttab echo "/dev/mapper/tmp /tmp ext4 defaults 0 2" >> /etc/fstab
/admin.key
)# groupadd -g 1067 $newuser # useradd -m -d /home/${newuser} -s /bin/bash -N -g 1067 -G $othergroups -k /home/linuxadmin $newuser # echo '$newuser:$newpw' | chpasswd
# cryptsetup luksFormat --use-random -c aes-xts-plain64 -s 512 -h sha512 -y /dev/nvme0n1p6 WARNUNG! ======== Hiermit werden die Daten auf »/dev/nvme0n1p6« unwiderruflich überschrieben. Sind Sie sicher? (Tippen Sie 'yes' in Großbuchstaben): YES Geben Sie die Passphrase für »/dev/nvme0n1p6« ein: <starkes Passwort> Passphrase bestätigen: <starkes Passwort>
# printf $newpw | cryptsetup luksAddKey /dev/nvme0n1p6 /admin.key
# printf $newpw | cryptsetup luksOpen /dev/nvme0n1p6 cryptohome # mkfs.ext4 /dev/mapper/cryptohome
/admin.key
<?xml version="1.0" encoding="utf-8" ?> <!DOCTYPE pam_mount SYSTEM "pam_mount.conf.xml.dtd"> <pam_mount> <debug enable="0" /> <volume user="wilhelm" fstype="crypt" path="/dev/nvme0n1p6" mountpoint="/home/wilhelm" options="crypto_name=cryptohome,allow_discard,fstype=ext4"> <user> wilhelm </user> </volume> <mntoptions allow="nosuid,nodev,loop,encryption,fsck,nonempty,allow_root,allow_other" /> <mntoptions require="nosuid,nodev" /> <logout wait="1000" hup="0" term="1" kill="1" /> <mkmountpoint enable="1" remove="true" /> </pam_mount>