LUKS verschlüsselter Cloud-Raid 10

„Herzlich willkommen zu Ihrem neuen „Ärger den Hoster“ Projekt. Heute wollen wir Ihnen zeigen, wie Sie Webstorageanbieter wie OneDrive oder DropBox in die Knie zwingen können.“  🙂

LUKS verschlüsselter Cloud-Raid 10

Das ist zwar nicht das Ziel unseres kleinen Projekts, könnte aber passieren ;)Beim letzten Linux am Dienstag, hab es ja leider eine kleine Panne bei der Webserverzertifizierung, was uns aber nicht daran gehindert hat, es doch durchzuziehen 😉 In diesem Rahmen habe ich das Projekt schon einmal Live vorgestellt.

Worum geht’s denn eigentlich?

Ihr kennt ja vermutlich den Beitrag, wie man mit SSHFS und Veracrypt einen sicheren Container bei einem Cloudanbieter bauen kann. Das hatten wir ja im Rahmen des letzten LPD 2021.1 vorgestellt. I.d.R. reicht dies für die meisten Sachen völlig aus, hatte aber noch Potential, oder auf Deutsch, ein paar spannende Ecken zum ausforschen, was so geht 😀

Herausgekommen ist eine verschlüsselte, virtuelle Festplatte als RAID 10 mit Spare, die komplett im Netz liegt, aber nur auf dem Lokalen PC vollständig und nutzbar ist. Um die Spannung gleich etwas abzumildern, die Sache mit den Hostern ist, daß sobald sich ein Bit ändert in dem für den Raid genutzten LUKS Container, ist der Container komplett im Backup drin. Wenn der also GBs groß ist, dann belegt das sehr viel Platz im täglichen Backup des Hosters, was Hoster i.d.R. nicht gut finden 😉

Vorteile

  • Es müssen mehrere Hoster ausfallen, bevor das Raid auseinander fällt und Daten verloren gehen.
  • Je kleiner dabei die einzelnen Datenfiles bei den Hostern sind, desto schneller der Rebuild und desto einfacher die Suche nach geeigneten Hosterkandidaten.
  • Das Raid kann von jedem Ort der Welt sicher eingebunden werden.
    Keine Spuren auf dem eigenen PC
    Der Hoster kommt nicht an die Daten ran.

Es sind auch alle anderen Raidformen denkbar, von Raid 1 bis 60 . Denkt mal ein bisschen nach, wieso ich da kein Raid 0 liste.

Nachteile

Ist das Internet nicht erreichbar, oder kommt es auf Netzsegmenten zwischen sich und dem Hoster zu Problemen, fällt das Raid ggf. unabsichtlich aus oder kann gar nicht erst gemountet werden.
Der Raidrebuild ist sehr langsam, langsamer als Ihr jetzt vermuten werdet. Bei Tests 128 KB/s, statt mehreren MB/s.
Keine Redundanz auf dem PC
Das Raid kann immer nur von einem PC aus zusammengesetzt werden. Mehrere würden die Daten zerstören, außer Ihr seid völlig durchgeknallte Datenjongleure 😉

Sinnhaftigkeit

Über die Sinnhaftigkeit eines Cloudbasierten virtuellen Raid 10 muß man sich keine großen Gedanken machen, da es nur eine Grenzfallbetrachtung ist.

Auf der anderen Seite, ein Raid 1 mit einem lokalen Bein und einem, oder mehreren, bei einem Cloudhoster, ist schon deutlich sinnvoller. Das lokale Bein (so nennt man eine Seite des Raids ) hat eine extrem hohe Schreib- und Lesegeschwindigkeit (weil im Tests wars eine NVME ), im Vergleich zum Netzwerk. Das führte bei Tests des Systems zu einer schnellen Reaktion, wie bei einer normalen Platte, und im Hintergrund wurde das dann langsaaaammmm synchronisiert. Das fällt dem Nutzer erst dann auf die Füße, wenn er was ins Raid schreibt und dann das Laptop oder den PC abschaltet, bevor das Raid komplett gesynct ist.

Das Raid würde sich beim nächsten mal zwar reparieren, meistens in dem das Spare genutzt wird, so vorhanden, in ganz wenigen Fällen auch einfach weiter syncen. Eine gute Idee ist es definitiv nicht.

Alternativen

Wer Daten vom PC zu einem Cloudanbieter so spiegeln will, daß eine Backupkopie verhanden ist, sollte dort einen LUKS oder VeraCrypt-Container hinterlegen, den per SSFS anbinden, öffnen und dann mit RSYNC oder einem Clusterfilesystem arbeiten.

Zurück zum Raid 10 in der Cloud

Da ich keine Lust habe, den 45 Minuten Vortrag nochmal zu tippen, hier die Quelle:

Click to access LAD-Raid-10-in-der-Cloud.pdf

Quelle: https://linux-am-dienstag.de/archiv/LAD-Raid-10-in-der-Cloud.pdf

Noch ein paar Anmerkungen

Man kann das auch mit ZFS bauen. Wie gut da die Krypto ist, kann ich nicht beurteilen. Außerdem ist es nicht auf jedem System drauf und es ist definitiv eher auf physikalische Datenträger ausgerichtet.

Die Sache mit dem kpartx ist eine Nummer, die sich nicht jedem sofort erschließt. Ich rate dazu, wenn Ihr das nachbaut, ein Terminal offen zu haben, das „watch -n 1 lsblk“ anzeigt. Damit wird einiges einfacher zu verstehen.

Die Failzeiten des SSHFS sind willkürlich gewählt, wie es meinem Gusto entsprach. Ihr könnt natürlich selbst entscheiden, ob Ihr da 3 Sekundenoder 30 Sekunden bis zum Fail angebt. Im Vergleich zur Dauer eines Rebuild mit 128 KB/s, sind diese exemplarischen 27 Sekunden natürlich nur eine kurze Zeitspanne.(50 MB Raidfiles => ca. 90 Minuten Rebuild )

Ein Raid 1 mit mehr als einem Cloudhoster ist vermutlich die bessere Wahl, kommt aber aufs Szenario an, welches man abdecken möchte.

Die Doppelte Lage LUKS könnte man auch durch eine LUKS ( Webhoster ) – VeraCrypt – Kombination ersetzen, was andere Verschlüsselungsalgorithmen beinhalten würde, was das brechen der Gesamtverschlüsselung deutlich erschwert. Auch könnte es einem in den Sinn kommen, die LuksFormatierung für jedes Datenfile einzeln zu machen, damit dort andere Kryptokeys im Einsatz sind. Weil, nach dem obigen Plan, sind die alle gleich. Bricht also ein LUKS-Container auf, gehen alle auf. Deswegen wäre es eine gute Idee, die planetenweit zu verteilen, was das Ergreifen der Daten deutlich erschwert.

Von Experimenten wie dem Speichern der Daten auf dem Draht der Netzwerkverkabelung ist dringend abzuraten, weil sich da kein LUKS Container drauf abbilden läßt 😉 Das ist ein echt höchst instabiles Speichermedium, wie unsere Tests bei Linux am Dienstag gezeigt haben 😀

Wie man von einer nachgerüsteten NVME SSD bootet

Meine langjährige Linux-Notlösung ging letzte Woche eine innige Verbindung zwischen Mainboard und Netzteil ein, das führte leider zu neuer PC-Hardware, wovon Ihr jetzt allerdings profitiert 😉

Wie man von einer nachgerüsteten NVME SSD bootet

Hier eine Impression der neuen permanenten Verbindung zwischen Mainboard und Netzteil:

ATX 12V Leitung ins Mainboard

Nur mit Gewalt konnten Buchse und Stecker getrennt werden. Eine Inspektion ergab dann, daß drei Spannungswandler, die befinden sich unter dem Kühlkörper links im Bild, ein bisschen zu warm geworden sind.

Hinweis: Für alle Linux am Dienstag Teilnehmer, abweichend zum gestrigen Textchat, gibt es bei den Anweisungen für die UUIDs noch eine kleine Erweiterung wo man die ersetzen muß.

Der neue RYZEN 5600X

Weil ich mir gleich was vernünftiges kaufen wollte, kam ein ASROCK B550µ Pro4 und ein RYZEN 5600X in den Warenkorb, noch NVME SSD (Samsung 1TB), RAM und Netzteil dazu gepackt und beim Großhändler sammeln lassen.

Das Board kannte ich einem früheren Einkauf und entsprechend wußte ich, daß diese Hardware mit Linux  laufen würde. Laufen ist in dem Fall übrigens glatte Untertreibung, Rennen wäre treffender, weil die NVME SSD in dem Setup 7 GB/s lesend schafft 😀

Da ich den PC für die Arbeit brauchte, war ein funktionierendes System an Tag 1 erst einmal wichtiger, als von der NVME SSD booten zu können, also wurde die HW nur zusammen gesteckt und die alte SATA SSD gebootet. Lief sofort ohne zu murren. Der Arbeitstag neigte sich dem Ende zu, also war es Zeit die SATA SSD auf die NVME SSD zu clonen und die Umstellung zu machen.

Nun ist mein Fedora System von 2014 und dessen Bootconfig weiß noch nichts von NVME. Also muß man das erst nachrüsten und ein Initramfs bauen, daß auch passende NVME Treiber hat. Dummerweise wusste ich das nicht, als die ich die SSD geclont habe 🙁 Ergebnis: „Geil, bootet von NVME .. ähhhhhh!?!?!“ Weil der Bootprozess vor dem Entschlüsseln der LUKS Paritionen einfach stehen blieb.

Zwei Möglichkeiten

Entweder VOR dem Clonen das neue Initramfs bauen, was deutlich einfacher ist, oder nochmal von der alten SSD Booten, Initramfs neubauen und die erzeugten Files von Hand rüberkopieren.

So, oder so, sieht der richtige Weg so aus:

  1. NVME-Treiber hinzufügen

    echo „add_drivers+= \“ nvme \““ > /etc/dracut.conf.d/nvme.conf
    # initramfs für aktiven Kernel neubauen
    dracut -f
  2. Disk Clonen

booten von einem Livestick
sudo su
dd if=/dev/quelle of=/dev/nvme0n1 bs=64M status=progress

Bei einer 1 TB SSD dauert das so 21-23 Minuten, da die SATA Geräte auf den meisten PCs mit 6 Gb/s angebunden sind, was ein theoretisches Maximum von 512 MB/s erlauben würde, aber 480 MB/s sind realistischer 😉

Wenn man die alte Platte nicht mehr benutzen will ist hier Schluß, die Platte muß dann aber auch gleich vom PC entfernt oder neu formatiert werden. Wieso, wird gleich klar werden.

Oder Ihr wollt mal wissen, was der Onkel Doktor machen müßte um die neue NVME SSD parallel zur alten SATA SSD booten zu können 🙂 Wir haben die Platte geclont und damit auch alle UUIDs zur identifizierung von Partitionen und Containern. UUIDs zeichnen sich durch eine gewisse EINMALIGKEIT aus, sprich, doppelte UUIDs produzieren lustige Fehler beim Bootprozess 😀

Gestern beim Linux am Dienstag kam die Frage auf, wieso ich nach dem Clonen nicht einfach die SATA SSD platt gemacht habe: Redundanz. Fällt die NVME SSD aus, habe ich noch ein System, das garantiert bootet.

Wie man die UUIDs von LUKS und EXTx ändert

Der Einfachheit

halber nehmen wir das „Gnome-Laufwerke“ Tool zur Hand um die alten UUIDs zuermitteln, da wir da visuell sehen können, ob das auch die richtige Partition ist. Man kann das auch in der Konsole ablesen, aber das kann leicht zu Verwechselungen führen:

$ lsblk -t -f
NAME ALIGNMENT MIN-IO OPT-IO PHY-SEC LOG-SEC ROTA SCHED RQ-SIZE RA WSAME FSTYPE FSVER LABEL UUID FSAVAIL FSUSE% MOUNTPOINT
nvme0n1 0 512 0 512 512 0 none 1023 128 0B 
├─nvme0n1p1 0 512 0 512 512 0 none 1023 128 0B ext4 1.0 Boot 4d2061ec-d538-4c88-aeb7-3fb0f3f4cd07 234,6M 46% /boot
├─nvme0n1p2 0 512 0 512 512 0 none 1023 128 0B crypto_LUKS 1 9d2595b2-a35c-48c1-a839-bb54c1a96597 
│ └─luks-9d2595b2-a35c-48c1-a839-bb54c1a96597 0 512 0 512 512 0 128 128 0B ext4 1.0 9d2595b2-a35c-48c1-a839-bb54c1a96597 659,9G 22% /
└─nvme0n1p3 0 512 0 512 512 0 none 1023 128 0B crypto_LUKS 1 ed009ed3-118c-465d-9b89-9b2a4f5cc3f3 
  └─luks-ed009ed3-118c-465d-9b89-9b2a4f5cc3f3 0 512 0 512 512 0 128 128 0B swap 1 46da0d80-21fb-45b7-8567-ba047de66cb6 [SWAP]

Einfacher ist das über das GNOME Laufwerke Tool:

LUKS

Filesystem in eine LUKS Container

Schritt 1 wäre jetzt auch erst einmal neue UUIDs zu erzeugen, was unter Fedora leicht mit dem Befehl „uuidgen“ gemacht werden kann. Andere Distro haben den Befehl nur als „uuid“ im Angebot.

WARNUNG:
Die hier gezeigten Anweisungen können in den falschen Händen Schaden an Ihrem System anrichten, deswegen erfolgt alles, was Sie jetzt machen auf eigene Gefahr!

WICHTIG: Bei Verwendung von LUKS darauf achten, daß die LUKS-Partition und die darin enthaltene Partition die gleiche UUID haben!

HINWEIS: der Befehl „replace“ wird von MYSQL/MARIADB zur Verfügung gestellt! Man kann die Anpassungen auch mit einem Texteditor machen, sollte man aber zwecks Reduzierung von Fehlerqellen nicht machen.

Alternativ könnte man sed -e „s/ALTE UUID/NEUE UUID/g“ < file >file.1; mv file.1 file machen, aber dann läuft man Gefahr die Rechte und Besitzer zu ändern.

Alles was wir jetzt machen, findet auf einer LIVE DISK statt, also im ungebooteten Zustand. Die Filesysteme sind alle EXT4, für abweichende Filesystem müßt Ihr Euch selbst was ausdenken 😉

Los geht’s :

A) Die Bootpartition

a) mit „Laufwerke“ das Gerät identifizieren: z.B. /dev/nvme0n1p1
b) ALTE UUID ermitteln ( wegkopieren in Texteditor ! )
c) tune2fs /dev/nvme0n1p1 -U „NEUE UUID“
d) BOOT + SYSTEM Partion der NVME anmelden
e) UUIDs ersetzen:
replace „ALTE UUID“ „NEUE UUID“ — pfad/zu/boot/grub2/grub*
replace „ALTE UUID“ „NEUE UUID“ — pfad/zu/boot/loader/entries/*
replace „ALTE UUID“ „NEUE UUID“ — pfad/zu/System/etc/fstab
replace „ALTE UUID“ „NEUE UUID“ — pfad/zu/System/etc/default/grub

*f) Partionen wieder abmelden

*) Das Abmelden ist natürlich optional, wenn Ihr mehrere Ersetzungen machen müßte, dann können die natürlich gemountet bleiben 😉

B) jede andere Partition

Jenachdem wieviele man hat, kann man das auch alles zusammen machen!

Wichtig: Jede Partition hat ihre eigene UUID, doppelte darf es nicht geben!

a) mit „Laufwerke“ das Gerät identifizieren: z.B. /dev/nvme0n1p2
b) ALTE UUID ermitteln ( wegkopieren in Texteditor ! )
c) tune2fs /dev/nvme0n1p2 -U „NEUE UUID“
d) BOOT + SYSTEM Partion der NVME anmelden
e) UUIDs ersetzen:
replace „ALTE UUID“ „NEUE UUID“ — pfad/zu/boot/grub2/grub*
replace „ALTE UUID“ „NEUE UUID“ — pfad/zu/boot/loader/entries/*
replace „ALTE UUID“ „NEUE UUID“ — pfad/zu/System/etc/fstab
replace „ALTE UUID“ „NEUE UUID“ — pfad/zu/System/etc/default/grub

f) Partionen wieder abmelden

Das waren die Filesysteme, kommen wir zu den LUKS Containern. Wer kein Luks hat, der ist jetzt natürlich fertig 🙂

Bei LUKS Partitionen ist das Vorgehen im Prinzip das Gleiche, nur die Befehle sind andere, weil LUKS kein Filesystem ist, aber eins zur Verfügung stellt nach dem Aufschliessen.

C) Für jede LUKS Partition

a) mit „Laufwerke“ das Gerät identifizieren: z.B. /dev/nvme0n1p2
b) ALTE UUID ermitteln ( wegkopieren in Texteditor ! )
c) cryptsetup luksUUID /dev/nvme0n1p2 –uuid „NEUE UUID“
d) BOOT + SYSTEM Partion der NVME anmelden
e) UUIDs ersetzen:
replace „ALTE UUID“ „NEUE UUID“ — pfad/zu/boot/grub2/grub*
replace „ALTE UUID“ „NEUE UUID“ — pfad/zu/boot/loader/entries/*
replace „ALTE UUID“ „NEUE UUID“ — pfad/zu/System/etc/fstab
replace „ALTE UUID“ „NEUE UUID“ — pfad/zu/System/etc/crypttab
replace „ALTE UUID“ „NEUE UUID“ — pfad/zu/System/etc/default/grub

f) Partionen wieder abmelden

Damit wären wir durch und so schlimm war es dann ja auch wieder nicht 🙂

Update: Es wurden Bilder zum Gnome-Laufwerke Tool eingebaut, powered by FlameShot – Ihrem Screenshottool

LUKS: Wie man einen Cloud-Container erstellt.

Wer kennt das Bedürfnis nach Synchronisation des Dateibestandes von verschiedenen Geräten über einen Cloudanbieter aka Webhoster nicht? Ok, Ihr könnt jetzt zur nächsten OSBN News wechseln, außer Ihr möchtet an einem Zweitstandort eine sicher aufgehobene Kopie Eurer Daten haben, auf die nur Ihr Zugriff habt, dann lest jetzt weiter …

LUKS: Wie man einen Cloud-Container erstellt.

Verschlüsselungssysteme gibt es ja viele, aber nicht alle sind bei jeder Distro onboard und osübergreifend verfügbar, LUKS schon. Deswegen heute ein kleiner Beitrag wie man seine Daten bei einem Webhoster so parkt, daß man sie von überall aus einbinden kann.

ACHTUNG: Bei einer Cloud-Container-Lösung auf Basis von Luks oder Truecrypt darf nur ein PC das System aktiv einbinden, sonst Datenverlust! Möglich ist aber ein READ-ONLY-Einbinden mehrerer Rechner gleichzeitig. Ich warne ausdrücklich davor so etwas zu versuchen und es dann zu versemmeln!

Der Hintergrund für die Warnung ist ganz einfach der, daß Eurer PC der Meinung ist, daß er den Datenträger exklusiv hat und daher Sachen im RAM vorhält, die nicht auf den Datenträger synchronisiert sind um die Leistung zu steigern. Wenn zwei Rechner das machen und dann vermeidliche freie, aber vom anderen PC schon im RAM anvisierte Blöcke beschreibt, kommt es unweigerlich zum Datenverlust. Wer schon einmal mit SSHFS gearbeitet hat, das einen entfernten PC als Laufwerk einmountet, der wird bemerken, daß da keine lokale Pufferung stattfindet, weil der PC hier nicht wissen kann, ob und wer sonst noch so auf die Datenquelle zugegriffen hat. SSH greift auf der  anderen Seite auch nicht als Filesystem, sondern über die OS API auf Dateien zu und simuliert Euch nur ein Laufwerk.

Anders ist das, wenn zwar der Container per SSHFS verfügbar gemacht wird, aber das Einbinden des entschlüsselten Filesystems dann lokal stattfindet. Das findet dann wieder mit den OS eigenen IO-Steigerungsamethoden statt. Beim Mounten von Datenträgern kann man über die Mount-Options noch einiges abändern, da geht vielleicht sogar was, aber empfehlen kann ich das definitiv nicht.

Die Ausgangslage

Wir behandeln daher einen PC der auf einen Webserver zugreift, dort seinen Container lagert und die ganze Ent- und Verschlüsselung auf dem eigenen PC auflaufen lässt.

Wir brauchen: CryptSetup, einen Webserver, schnelles Internet ( ist von Vorteil )

Der Webserver

Der Webserver muß eine der folgenden Anbindungen unterstützen: SSH, SAMBA oder NFS und zwar genau in der Reihenfolge sollte man das auswählen. Für diesen Artikel nehme ich SSH, da das auf jedem LinuxPC vorhanden ist und der Transportweg so zusätzlich verschlüsselt ist. Da sieht man dann auch nicht, was da eigentlich auf dem Webserver gemacht wird.

Samba ist zwar mittlerweile auch im Datentransport verschlüsselt, aber viele Router halten das auf, damit die Windowskisten nicht das Providernetz vollspammen, die sind sehr mitteilungsbedürftig 😉

NFS kennt keine Authentifizierung außer IPs, ist unverschlüsselt und ist im allgemeinen bestenfalls zwischen Servern einzusetzen.

Das PRE-SETUP

Wir machen das alles als ROOT, weil CryptSetup und mount das gern so möchten. Da hier FUSE nur sekundär im Einsatz ist, weil es sich um normale Filesysteme des Kernels handelt (kommt gleich),  kommt mount zum Einsatz, welches zwingend als ROOT laufen möchte. Das Ergebnis der Aktion kann aber dann von jedem User benutzt werden. Wenn man sich da nicht besonders blöd im Rechtemanagement anstellt, dann ist das auch auf einem Mehrbenutzersystem kein Problem.  Kommen wir zu …

Schritt 1: Einen Mountpoint für den Container erstellen

mkdir -p /media/container/server

Der Ort ist in der Regel für jeden Benutzer erreichbar, was z.b. beim Mounten im eigenen Home nur für den aktuellen Benutzer gelten würde.

Schritt 2: Der Server als Laufwerk einbinden

sshfs demo@meine.demo.de:/home/demo /media/container/server -o allow_other

Je nachdem was man als Authmechnismus eingestellt hat ( KEY oder PASSWORD )  macht da der SSH-AGENT, der hoffentlich in irgendeiner Form bei Euch läuft ( gpg-agent, ssh-agent, gnome-keyring-daemon ) das mit dem Schlüssel automatisch für Euch, oder Ihr müßt ein Passwort eingeben.

Schritt 3: Das Containerfile anlegen

Hier im Beispiel benutze ich jetzt ein 100MB File ( 1M * 100 ) :

# dd if=/dev/zero of=/media/container/server/container.luks bs=1M count=100
100+0 Datensätze ein
100+0 Datensätze aus
104857600 bytes (105 MB, 100 MiB) copied, 29,0354 s, 3,6 MB/s

Wer da übers Netz GBweise Dateien anlegt, der sollte sich fragen, ob er verstanden hat, was er da gerade tut, denn das dauert Stunden und man könnte es ja auch auf dem Webserver erledigen lassen, daß dauert nur Sekunden, denn noch ist da weder Crypto noch ein Filesystem dran beteiligt, es wird nur ein BLOCK mit NULLEN erzeugt.

Schritt 4: Den Container mit LUKS formatieren

Der nächste Schritt sollte allerdings zwingend vom PC aus erledigt werden, da dazu ein Passwort nötig ist, welches, solange der Vorgang dauert, auch im Speicher des Webservers verfügbar wäre, würde man es dort tun. Das Formatieren dauert dann auch ein gutes Weilchen.

# cryptsetup -y luksFormat /media/container/server/container.luks

WARNING!
========
Hiermit werden die Daten auf »/media/container/server/container.luks« unwiderruflich überschrieben.

Are you sure? (Type ‚yes‘ in capital letters): YES
Geben Sie die Passphrase für »/media/container/server/container.luks« ein: ***********************
Passphrase bestätigen: ***********************

Ein sinnvoll langes Passwort > 20 Zeichen ist angeraten! Es sollte nicht 123456789… lauten 😉

Schritt 5: Den Container öffnen und zum Mounten bereitstellen

Dieser Schritt geht dann recht zügig von statten. Ihr müßt nicht zwangsweise den gleichen Cryptocontainernamen benutzen wie ich, da seid Ihr flexibel.

# cryptsetup luksOpen /media/container/server/container.luks cryptocontainer
Geben Sie die Passphrase für »/media/container/server/container.luks« ein: ***********************

Schritt 6: Das Filesystem erstellen

Beim ersten mal muß man jetzt das Filesystem einrichten:

# mkfs.ext4 -j /dev/mapper/cryptocontainer
mke2fs 1.45.5 (07-Jan-2020)
Ein Dateisystem mit 86016 (1k) Blöcken und 21560 Inodes wird erzeugt.
UUID des Dateisystems: bcbccb1b-794e-4700-bd64-cd021a42bf32
Superblock-Sicherungskopien gespeichert in den Blöcken:
8193, 24577, 40961, 57345, 73729

beim Anfordern von Speicher für die Gruppentabellen: erledigt
Inode-Tabellen werden geschrieben: erledigt
Das Journal (4096 Blöcke) wird angelegt: erledigt
Die Superblöcke und die Informationen über die Dateisystemnutzung werden geschrieben: erledigt

ich habe jetzt EXT4 ausgewählt, weil das in jedem Kernel vorkommt und als Journalingfilesystem keine ellenlangen Reparaturen vor dem Mounten braucht, was gerade bei einem Netzwerkcontainer ein wichtiger Entscheidungsgrund ist, sonst wartet Ihr da auch schon mal Stunden auf den Mount.

Schritt 7: Den Containerinhalt ins System einbinden

Das Einbinden in das System ist dann denkbar einfach:

# mount /dev/mapper/cryptocontainer /mnt
# df -h | grep mnt
/dev/mapper/cryptocontainer 78M 1,6M 70M 3% /mnt

Das wärs schon, wenn da nicht das Zugriffsproblem wäre. Also muß Root da jetzt z.B. noch ein Verzeichnis anlegen, weil die User keine Schreibrechte haben:

# ls -ls /mnt/
insgesamt 12
12 drwx——. 2 root root 12288 13. Sep 12:01 lost+found
# ls -lad /mnt/
drwxr-xr-x. 3 root root 1024 13. Sep 12:01 /mnt/
# mkdir /mnt/demo
# chown demo:demo /mnt/demo
# chmod 700 /mnt/demo/
# ls -ls /mnt
insgesamt 14
2 drwx——. 2 demo demo 1024 13. Sep 12:10 demo
12 drwx——. 2 root root 12288 13. Sep 12:01 lost+found

Nun kann der Benutzer „demo“ da machen was auch immer er möchte.

Einbinden beim System-Boot

Das ist nicht ganz ohne. Man könnte dem Cron sagen, daß er das nach dem Boot machen soll, indem man da ein kleines Script benutzt, daß alle Schritte als Root macht, aber wer sagt uns, daß das auch passiert, wenn ein Netzwerk vorhanden ist? Niemand, also müssen wir das wohl oder übel an den Systemd übergeben. D.b. Ihr schreibt einfach ein kleines Start/Stop Script nach /etc/init.d/ oder direkt eine Unit für Systemd direkt, in dem die Anhängigkeiten zum erfolgreichen Netzwerkstart angegeben sind z.b. wie hier:

xl2tpd.service:After=network.target

So ist sichergestellt, daß es auch klappen kann, sofern alles mit dem Netzwerk und dem Server ok ist.

Sicherheitsanalyse

Wo liegen hier die Vorteile zu einem USB Stick? Zum Einen macht der Hoster normalerweise ein Backup von dem Server oder bietet Euch zumindest an, daß Ihr eins machen könnt. Dann ist das von überall aus erreichbar und i.d.R. kann man das nicht verlieren. Auch ein „Diebstahl“ wäre nicht tragisch, da der Dieb nicht an den Inhalt kommt, außer Eurer Passwort war „123456“ 😀

Die gesamte Ver- und Entschlüsselung der Daten findet zur Laufzeit auf Eurem PC statt, d.b. jemand muß sich Zugang zu Eurem PC verschaffen und dann auf die Daten zugreifen, wenn diese lokal verfügbar sind. Das könnt Ihr mit Updates und Festplattenvollverschlüsselung leicht kontern, denn dann können Euch lokale Angreifer mal am ….. . Auf diese Sicherheit müßt Ihr sowieso bauen, da ansonsten der Aufwand die Daten verschlüsselt im Netz zu speichern kompletter Unfug wäre. Also ganz klar: Entweder alles oder nichts verschlüsseln, sonst nützt es im Zweifel nichts.

VeraCrypt vs LUKS

Aus Benutzersicht ein klares Ja zu VeraCrypt: Kommt mit GUI und bindet sich ohne Root auch beim Login automatisch per FUSE ein.. 1a!

Der LUKS Container hat aber den Vorteil, daß man damit nur den Leuten vertrauen muß, die sowieso schon Eurer OS zusammenbauen. Wenn man denen nicht trauen würde, könnte man auch VeraCrypt nicht einsetzen, weil wenn das OS unsicher ist, wozu dann noch Verschlüsseln?

Über die /etc/crypttab kann LUKS Medien auch automatisch ins System einbinden lassen, allerdings muß zu dem Zeitpunkt das Netzlaufwerk mit dem Container verfügbar sein, sonst ist Essig. Hat also alles Vor- und Nachteile. Welche davon für Euch interessant sind, müßt Ihr entscheiden.

Wie bekomme ich den Container wieder zu?

Wichtige Frage, einfache Antworten:

umount /media/container/server
cryptsetup luksClose cryptocontainer
fusermount -u /media/container/server