IT security, FreeBSD, Linux, mail server hardening, post-quantum crypto, DNS, retro computing & hands-on hardware hacks. Privater Tech-Blog seit 2003.

Kategorie: ZFS Filesystem (Seite 2 von 3)

Alles rund um ZFS — Pools, Snapshots, Send/Recv, Verschlüsselung und TRIM unter FreeBSD und Linux.

FreeBSD: Verschlüsseltes ZFS-Backup auf USB-Platte mit geli

Ein Notebook mit Full-Disk-Encryption verdient auch ein verschlüsseltes Backup. Plan: ZFS-Snapshots per zfs send auf eine USB-Platte schieben, die komplett mit geli verschlüsselt ist. Schlüssel und Passphrase sicher aufbewahren — fertig.

Hinweis: Seit OpenZFS 2.0 (FreeBSD 13+) gibt es native ZFS-Verschlüsselung (zfs create -o encryption=aes-256-gcm). Damit entfällt geli als Zwischenschicht. Auf älteren Systemen oder wenn man die gesamte Platte unabhängig vom Dateisystem verschlüsseln will, bleibt geli die richtige Wahl.

USB-Platte verschlüsseln

Platte einstecken und per dmesg das Device identifizieren — in diesem Fall da0. Dann mit gpart eine neue GPT-Partitionstabelle anlegen und eine Partition erstellen.

geli braucht einen Schlüssel aus Zufallsdaten:

dd if=/dev/random of=./backup-key bs=256 count=1

Mit diesem Schlüssel die verschlüsselte Partition einrichten:

geli init -s 4096 -K ./backup-key -l 256 /dev/da0s1
Enter new passphrase:
Reenter new passphrase:

Metadata backup can be found in /var/backups/da0s1.eli and
can be restored with the following command:

    # geli restore /var/backups/da0s1.eli /dev/da0s1

Partition öffnen:

geli attach -k ./backup-key /dev/da0s1
Enter passphrase:

ZFS-Pool anlegen

Auf der geöffneten geli-Partition (da0s1.eli) den ZFS-Pool erstellen:

zpool create usb-backup /dev/da0s1.eli

zpool list
NAME         SIZE  ALLOC   FREE  CAP  HEALTH
zroot        460G   184G   276G  40%  ONLINE
usb-backup   928G   296K   928G   0%  ONLINE

Backup starten

Initiales Vollbackup per zfs send -R (rekursiv, alle Datasets und Snapshots):

zfs send -R zroot@auto-2015-05-23-21-00-00 | zfs recv -u usb-backup/notebook

Die Option -R sendet alles rekursiv. Die Option -u beim Empfänger verhindert, dass die Datasets auf der USB-Platte gemountet werden. Bei allen folgenden Backups muss nur noch die Differenz zwischen zwei Snapshots übertragen werden.

Platte sicher aushängen

Drei Schritte in der richtigen Reihenfolge:

  • Sync erzwingen — alle Daten sicher auf die Platte schreiben
  • ZFS-Pool exportieren
  • geli-Partition schließen
sync
zpool export usb-backup
geli detach /dev/da0s1

Wichtig: Den Schlüssel (backup-key) an einem dritten Ort aufbewahren — weder auf dem Notebook noch auf der Backup-Platte. Ohne Schlüssel und Passphrase sind die Daten nicht wiederherstellbar.

Mehr zu ZFS-Backups: Automatische ZFS-Snapshots und ZFS send/recv Fehler beheben. Fragen? Einfach melden.

FreeBSD: ZFS-Datensicherung mit Snapshots und zfs send/recv

ZFS bringt alles mit, was man für eine solide Datensicherung braucht: Snapshots sind atomar und sofort erstellt, und mit zfs send lassen sie sich über SSH auf ein anderes System replizieren. Nach einem initialen Vollabgleich werden nur noch die Differenzen übertragen.

Der Ablauf:

  • Snapshot auf dem Quellsystem anlegen
  • Ziel-Dataset auf dem Backup-Server erstellen
  • Snapshot per SSH ins Ziel schieben (Vollabgleich)
  • Weitere Snapshots anlegen und nur die Differenz übertragen

Snapshot erstellen

Auf dem Quellsystem — hier ein FreeBSD-Notebook — einen rekursiven Snapshot anlegen:

zfs snapshot -r tank/usr/home/kernel@2014-10-12

Prüfen:

zfs list -t snapshot tank/usr/home/kernel
NAME                                    USED  AVAIL  REFER  MOUNTPOINT
tank/usr/home/kernel@2014-10-12        20,0M      -  96,9G  -

Initialer Vollabgleich

Auf dem Backup-Server ein Ziel-Dataset anlegen:

zfs create DatenPool01/Datensicherung/errorlap

Den Snapshot per SSH ins Ziel schieben — -R sendet rekursiv alle Datasets und Properties mit:

zfs send -R tank/usr/home/kernel@2014-10-12 \
  | ssh root@backup-server zfs recv -Fduv DatenPool01/Datensicherung/errorlap

receiving full stream of tank/usr/home/kernel@2014-10-12 into
DatenPool01/Datensicherung/errorlap/usr/home/kernel@2014-10-12
received 98.4GB stream in 5298 seconds (19.0MB/sec)

Inkrementelle Sicherung

Neuen Snapshot anlegen und nur die Differenz zum vorherigen übertragen:

zfs snapshot -r tank/usr/home/kernel@2014-10-12-02

zfs send -R -i tank/usr/home/kernel@2014-10-12 tank/usr/home/kernel@2014-10-12-02 \
  | ssh root@backup-server zfs recv -Fduv DatenPool01/Datensicherung/errorlap

receiving incremental stream of tank/usr/home/kernel@2014-10-12-02 into
DatenPool01/Datensicherung/errorlap/usr/home/kernel@2014-10-12-02
received 991MB stream in 59 seconds (16.8MB/sec)

991 MB statt 98 GB — das ist der Vorteil inkrementeller Snapshots.

Automatisierung

Dieser Ablauf lässt sich per Skript und Cronjob vollständig automatisieren. Mit automatischen ZFS-Snapshots und SSH-Key-Authentifizierung kann man alle 15 Minuten inkrementell sichern — bei passender Internetanbindung auch standortübergreifend. Falls beim inkrementellen Transfer ein cannot receive incremental stream auftaucht, hilft der Beitrag zur Fehlerbehebung mit zfs recv -F.

Wer das Backup auf eine verschlüsselte USB-Platte statt auf einen Server schieben will, findet dort die geli-Anleitung dazu.

Fragen? Einfach melden.

Warum keine Windows Server Sicherung?

Eine gute Frage, oder? Nun ja, man bekommt diese tolle Windows Server Image oder Image Server Sicherung ja kostenlos von Microsoft dazu. Mit ihr lassen sich auch tatsächlich komplette Server sichern. Dieses sogar zuverlässig.

Ich muss aber sicher nicht erwähnen, dass ich im Grunde keine Ahnung von Microsoft Systemen und vor allem der Windows Server Sicherung habe, oder? Egal, mal weiter! Ich wollte ja die Frage beantworten….

Die Windows Server Sicherung kann nicht mit Bandlaufwerken oder ähnlichem umgehen. Natürlich kann man auf einen Netzwerk Share -eine Freigabe- sichern. Da die Sicherung in diesem Fall leider keine Volume Shadow Copy vom Ziel erstellen kann, würde die laufende Sicherung also die bestehende Überschreiben. Bricht die Sicherung als „unvollständig“ ab, hat man nichts mehr.

Volume Shadow Copy…. Weist man der Windows Server Sicherung ein spezielles Backup Volume zu, gibt es der Windows Sicherung die Möglichkeit solche Schattenkopien vom Ziel anzulegen. Man verliert also bei einer unvollständigen Sicherung nicht unbedingt die alten Sicherungen.. Damit sind wir also bei einer im Rechner verbauten Platte, einer externen USB Platte (bis hier eine schlechte Idee) oder auch bei einer ISCSI Platte. Ersteinmal ok, oder? Jain, warum erkläre ich später! Erst noch etwas zu den Schattenkopien. Windows selbst hat natürlich die Möglichkeit einzelne Schattenkopie von seinen Dateien anzulegen. Diese werden sogar noch von der Serversicherung gesichert. So könnte man also nach dem Zurückspielen einer Vollsicherung sogar noch zu einem etwas älteren Stand zurückspringen. Denn noch muss zuerst die Vollsicherung zurückgespielt werden und dann geht es auf einen älteren Stand. Das ist im Falle einer Rücksicherung sehr langwierig. Funktioniert denn noch sehr gut…

Vollsicherung… Die Windows Server Sicherung kann nur Vollsicherungen erstellen, also keine inkrementell oder differentielle Datensicherung. Das bedeutet man muss jeden Tag die kompletten Daten zum Sicherungsziel „pumpen“. Nutzt man nun als Ziel ein intelligentes Storage System wie ein NetApp oder ein ZFS basiertes System (Nexenta, OpenIndiana, Solaris, FreeNas)… Vielleicht noch zusammen mit ISCSI…. dann bringen einem sehr viele der feinen Zusatzfunktionen des Storage Servers kaum noch etwas. Mal angenommen man möchte sein Storage System mit einem anderen abgleichen, dann wird ebenfalls wieder alles kopiert, da sich ja leider immer alles ändert. Dumme Sache das 🙁

Möchte man also seine Sicherung nicht im Unternehmen liegen haben (Feuer / Flugzeug / Wasser / ..) würde so jeden Tag die vollständige Sicherung bewegt werden müssen. Denkt man nun an ein paar TB wird schnell klar, das man sich schon extreme Anbindungen an seinen Standort mieten muss, nur um die Sicherung überhaupt in einem gewissen Zeitfenster aus dem Haus zu bekommen.

Hier kommen dann wieder die etwas teureren Sicherungsprogramme anderer Hersteller ins Spiel .-)

Um es also auf den Punkt zu bringen… Die Windows Server Sicherung funktioniert und hält was sie verspricht, ohne die Möglichkeit einer differentielle Sicherung wird sie denn noch von mir in fast allen Fällen eine Abfuhr bekommen.

Oh ja, sobald es die Möglichkeit einer differentiellen Datensicherung gibt, bitte melden!

Fragen? Einfach melden.

Linux und die UUID

Ich bin inzwischen ja von ZFS schon sehr verwöhnt… Vor allem was so Dinge angeht sich Kombinationen aus Laufwerk, Partition, Mountpunkt und SATA-Port zu merken. Man denkt einfach nicht mehr darüber nach 🙁 Heute bin ich damit mal wieder auf die Nase gefallen. Ok ok…. Natürlich kann man zur Konfiguration auch einfach die UUID nutzen, diese ist dann eindeutig und man kann ähnlich wie bei ZFS die ganzen Zusammenhänge „vergessen“….. Ich finde die UUID-Geschichte aber anstrengend. Diese viel zu lange Nummer zu tippen geht überhaupt nicht, sich diese erst in Konfigurationsfiles zu schieben und dann…. bäääähhhh. Dann kann ich mir die Nummer auch nur wieder schlecht merken.

Wie auch immer. Der Ansatz ist gut und wenn es Konfiguriert ist, geht es ja auch. Um mir nicht noch ein Komando mehr merken zu müssen friemel ich die Zuordnung UUID ==> Devicename immer wie folgt heraus:

ls -Al /dev/disk/by-uuid/
insgesamt 0
lrwxrwxrwx 1 root root 10 17. Sep 11:26 0e6894c5-1dfd-4fcb-8cc4-12290c28c3dc -> ../../sdb3
lrwxrwxrwx 1 root root 10 17. Sep 11:26 11cc385c-7fcc-4b87-88b9-ebe05af67df8 -> ../../sda1
lrwxrwxrwx 1 root root 10 17. Sep 11:26 2fc86b49-ad36-4755-bd72-aba0ec54f2e4 -> ../../sdb2
lrwxrwxrwx 1 root root 10 17. Sep 11:26 ca266482-0623-43a1-8741-70f8de485023 -> ../../sdb1

Jemand eine bessere Idee? In diesem Sinne….

Fragen? Einfach melden.

SSH Host Keys per SSHFP im DNS veröffentlichen

OpenSSH kann die Fingerprints seiner Host Keys als SSHFP-Records im DNS veröffentlichen. Beim Verbindungsaufbau prüft der Client dann automatisch, ob der Fingerprint des Servers mit dem DNS-Eintrag übereinstimmt — ein wirksamer Schutz gegen Man-in-the-Middle-Angriffe. Ist die Zone zusätzlich per DNSSEC gesichert, kann der DNS-Record selbst nicht gefälscht werden. Die Spezifikation steht in RFC 4255.

Client konfigurieren

Damit OpenSSH beim Verbindungsaufbau SSHFP-Records prüft, muss VerifyHostKeyDNS aktiviert werden. Global für alle Benutzer in /etc/ssh/ssh_config:

VerifyHostKeyDNS yes

Oder nur für die aktuelle Sitzung:

ssh -o "VerifyHostKeyDNS=yes" server.example.de

SSHFP-Records erzeugen

Am einfachsten direkt auf dem Server mit ssh-keygen — das erzeugt die fertigen DNS-Records für alle vorhandenen Host Keys:

ssh-keygen -r server.example.de.

Ausgabe (Beispiel mit RSA, ECDSA und Ed25519):

server.example.de. IN SSHFP 1 1 47890eecc9a2893061734b07b8f60caa1a856148
server.example.de. IN SSHFP 1 2 b2518ad49cc2adf517d3f6a9faaf4017abc2c3e3...
server.example.de. IN SSHFP 3 1 3dd9de0dcf1523341b45a53f1d57043609e26c62
server.example.de. IN SSHFP 3 2 e1c76bd66b5a0641789b0b37be5b80ae3f6395c1...
server.example.de. IN SSHFP 4 1 a1b2c3d4e5f6...
server.example.de. IN SSHFP 4 2 d4e5f6a7b8c9...

Aufbau des SSHFP-Records

Ein SSHFP-Record besteht aus zwei Zahlen und dem Fingerprint:

hostname IN SSHFP [Algorithmus] [Hash-Typ] [Fingerprint]

Algorithmus:

  • 1 — RSA
  • 3 — ECDSA
  • 4 — Ed25519 (empfohlen, ab OpenSSH 6.7)

DSS (2) ist seit OpenSSH 7.0 standardmäßig deaktiviert und sollte nicht mehr verwendet werden.

Hash-Typ: 1 = SHA-1, 2 = SHA-256. Beide sollten veröffentlicht werden — ältere Clients verstehen nur SHA-1, neuere bevorzugen SHA-256.

Prüfen

Mit dig lässt sich prüfen, ob die Records im DNS angekommen sind:

dig +short server.example.de SSHFP
1 1 47890EECC9A2893061734B07B8F60CAA1A856148
1 2 B2518AD49CC2ADF517D3F6A9FAAF4017ABC2C3E3...
3 1 3DD9DE0DCF1523341B45A53F1D57043609E26C62
4 2 D4E5F6A7B8C9...

Wichtig: Bei der DNSSEC-validierten Abfrage muss das ad-Flag (Authenticated Data) gesetzt sein — sonst ist die Antwort nicht vertrauenswürdig:

dig +dnssec server.example.de SSHFP | grep flags
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 6, AUTHORITY: 0, ADDITIONAL: 1

Verbindungsaufbau mit SSHFP

Ohne SSHFP-Records im DNS meldet OpenSSH:

DNS lookup error: data does not exist
No matching host key fingerprint found in DNS.
Are you sure you want to continue connecting (yes/no)?

Mit SSHFP-Records und DNSSEC:

debug1: found 4 secure fingerprints in DNS
debug1: matching host key fingerprint found in DNS

secure bedeutet: Die DNS-Antwort wurde per DNSSEC validiert. Ohne DNSSEC steht dort insecure — der Fingerprint wurde zwar gefunden, aber der DNS-Antwort selbst kann nicht vertraut werden. Für echte Sicherheit braucht man beides: SSHFP-Records und DNSSEC.

Strenge Prüfung erzwingen

Optional: OpenSSH anweisen, die Verbindung nur aufzubauen, wenn der Host Key erfolgreich validiert wurde:

Host *
    VerifyHostKeyDNS yes
    StrictHostKeyChecking yes

Damit wird die Verbindung abgelehnt, wenn kein passender SSHFP-Record gefunden wird oder die DNSSEC-Validierung fehlschlägt. Das ist die sicherste Einstellung — setzt aber voraus, dass alle Zielserver SSHFP-Records haben.

Kleiner Aufwand, viel mehr Sicherheit. Fragen? Einfach melden.

ZFS Scrub: Integritätsprüfung starten, stoppen und überwachen

Ein Scrub ist die Integritätsprüfung von ZFS — jeder Block im Pool wird gelesen und seine Checksumme verifiziert. Beschädigte Blöcke werden automatisch aus der Redundanz repariert (Mirror oder RAID-Z). Ohne Redundanz erkennt ZFS den Fehler immerhin, kann ihn aber nicht korrigieren.

Empfehlung: Einmal pro Woche oder mindestens einmal im Monat. Auf Produktivsystemen am besten per Cronjob.

Scrub starten

zpool scrub backup

Fortschritt prüfen

zpool status backup
  pool: backup
 state: ONLINE
  scan: scrub in progress since Sun May 27 11:11:00 2012
        4.20G scanned out of 74.5G at 102M/s, 0h11m to go
        0 repaired, 5.64% done

Scrub abbrechen

Braucht man die I/O-Leistung gerade für etwas anderes:

zpool scrub -s backup

Im Status sieht man dann den Unterschied — stopped statt completed:

# Abgebrochen
scan: scrub stopped after 0h7m with 0 errors on Sun May 27 11:18:52 2012

# Normal beendet
scan: scrub completed after 0h7m with 0 errors on Sun May 26 10:52:13 2012

Ein abgebrochener Scrub setzt beim nächsten Start nicht dort fort, sondern beginnt von vorne.

Scrub per Cronjob

# Jeden Sonntag um 02:00 alle Pools scrubben
0 2 * * 0 /sbin/zpool scrub backup

Unter FreeBSD läuft der Scrub standardmäßig über periodic daily — dort muss man nichts extra einrichten. Unter Linux gibt es je nach Distribution einen systemd-Timer (zfs-scrub-weekly.timer) oder man legt den Cronjob selbst an.

Mehr zu ZFS: ZFS RAID: Mirror und RAID-Z und ZFS Snapshots. Fragen? Einfach melden.

ZFS iSCSI-Target mit COMSTAR auf OpenIndiana einrichten

COMSTAR (Common Multiprotocol SCSI Target) ist das Framework in Solaris/OpenIndiana, das iSCSI, FC und FCoE unter einem Dach vereint. Es ersetzt den alten iSCSI Target Daemon aus Solaris 10. Hier die Einrichtung eines iSCSI-Targets auf Basis eines ZFS-Volumes für einen Windows-Initiator.

ZFS-Volume anlegen

Zuerst einen eigenen Pool und darin ein ZFS-Volume mit fester Größe erstellen — das Volume wird später die LUN:

zpool create iscsi-target-pool c4t2d0

zfs create -V 10g iscsi-target-pool/iscsi_10gb-lun01
zfs list iscsi-target-pool/iscsi_10gb-lun01
NAME                                   USED  AVAIL  REFER  MOUNTPOINT
iscsi-target-pool/iscsi_10gb-lun01    10,3G  19,6G    16K  -

Die feste Größe (-V 10g) ist wichtig — sonst würde die Poolgröße das Target begrenzen, und bei mehreren Targets im selben Pool wird es unübersichtlich.

COMSTAR-Dienste starten

Das SCSI Target Mode Framework (STMF) aktivieren:

svcadm enable stmf
svcs stmf
STATE   STIME    FMRI
online  13:02:50 svc:/system/stmf:default

stmfadm list-state
Operational Status: online
Config Status     : initialized

Das iSCSI-Target-Paket installieren und den Dienst starten:

pkg install /network/iscsi/target

svcs iscsi/target
STATE   STIME    FMRI
online  13:23:56 svc:/network/iscsi/target:default

Logical Unit erstellen

Eine LUN auf Basis des ZFS-Volumes anlegen:

sbdadm create-lu /dev/zvol/rdsk/iscsi-target-pool/iscsi_10gb-lun01
Created the following LU:

GUID                             DATA SIZE     SOURCE
-------------------------------- ------------- ----------------
600144f051c247000000523ed0050001 10737418240   /dev/zvol/rdsk/iscsi-target-pool/iscsi_10gb-lun01

Prüfen ob die LUN online ist:

stmfadm list-lu -v
LU Name            : 600144F051C247000000523ED0050001
Operational Status : Online
Provider Name      : sbd
Alias              : /dev/zvol/rdsk/iscsi-target-pool/iscsi_10gb-lun01
Data File          : /dev/zvol/rdsk/iscsi-target-pool/iscsi_10gb-lun01
Size               : 10737418240
Block Size         : 512

Damit der Initiator die LUN sehen kann, einen View erstellen:

stmfadm add-view 600144F051C247000000523ED0050001
stmfadm list-view -l 600144F051C247000000523ED0050001
View Entry: 0
  Host group   : All
  Target group : All
  LUN          : 0

iSCSI-Target anlegen

Zwischenstand:

  • STMF und iSCSI-Target-Dienst laufen
  • 10 GB ZFS-Volume als LUN angelegt
  • View erstellt, damit Initiatoren die LUN sehen

Fehlt noch das Target selbst:

itadm create-target
Target iqn.2010-09.org.openindiana:02:6c3939bf-f5e5-4f28-a8d0-d0f0bbb2e1c4 successfully created

itadm list-target -v
TARGET NAME                                                          STATE   SESSIONS
iqn.2010-09.org.openindiana:02:6c3939bf-f5e5-4f28-a8d0-d0f0bbb2e1c4 online  0
  alias:             -
  auth:              none (defaults)
  targetchapuser:    -
  targetchapsecret:  unset
  tpg-tags:          default

Zum Schluss sicherstellen, dass das Target im Discovery auftaucht:

devfsadm -i iscsi

Windows-Initiator verbinden

Auf der Windows-Seite den eingebauten Microsoft iSCSI-Initiator öffnen (ab Windows 7 vorinstalliert):

  • Portal über die IP-Adresse des OpenIndiana-Hosts ermitteln lassen
  • Das Ziel suchen und verbinden
  • Die neue Festplatte in der Datenträgerverwaltung initialisieren und ein Volume erstellen
Screenshot der Windows Fehlermeldung: You do not have permission to update Windows.Screenshot der Windows Fehlermeldung: Setup could not find the update.inf file.Screenshot des Windows iSCSI-Initiators mit der Zielportal-Einstellung.Screenshot des Windows iSCSI-Initiators mit dem erkannten Ziel.
Screenshot des Windows iSCSI-Initiators beim Verbinden mit dem Ziel.Screenshot des Windows iSCSI-Initiators mit der Volumeliste.Screenshot der Windows Datenträgerinitialisierung mit dem erkannten iSCSI-Datenträger.Screenshot der Windows Datenträgerverwaltung mit dem fertig konfigurierten COMSTAR SCSI Device.

Mehr zu ZFS: ZFS Compression und Deduplication. Fragen? Einfach melden.

ZFS-Verschlüsselung: Datasets und Homedirectories unter Solaris verschlüsseln

Hinweis: Dieser Artikel beschreibt die ZFS-Verschlüsselung unter Solaris 11 und OpenIndiana. Unter OpenZFS (FreeBSD 13+, Linux) gibt es seit 2019 native Verschlüsselung mit zfs create -o encryption=aes-256-gcm -o keyformat=passphrase pool/dataset — das funktioniert ohne die Solaris-spezifischen PAM-Module. Für verschlüsselte Backups auf FreeBSD mit geli siehe ZFS-Backup auf USB-Platte mit geli.

Verschlüsseltes Dataset anlegen

Ab ZFS Version 30 lässt sich ein Dataset beim Erstellen verschlüsseln — mit AES-128, AES-192 oder AES-256. Bei Schlüsseln größer 128 Bit macht eine Hardwarebeschleunigung Sinn (SPARC T2/T3, Intel AES-NI). Für die meisten Szenarien reicht AES-128 völlig aus.

zfs create -o encryption=on rpool/export/home/kernel/DatenSafe
Enter passphrase for 'rpool/export/home/kernel/DatenSafe':
Enter again:

Nach einem Reboot wird das verschlüsselte Dataset nicht automatisch eingehängt — man muss es manuell mounten:

zfs mount rpool/export/home/kernel/DatenSafe
Enter passphrase for 'rpool/export/home/kernel/DatenSafe':

Schlüssel als Datei

Statt einer Passphrase kann der Schlüssel auch als Datei auf einem USB-Stick liegen:

zfs create -o encryption=on -o keysource=raw,file:///media/usb-stick/schluessel \
  rpool/export/home/kernel/DatenSafe

Dann den USB-Stick getrennt vom System aufbewahren — und eine Kopie des Schlüssels an einem sicheren dritten Ort. Ohne Schlüssel oder Passphrase sind die Daten nicht wiederherstellbar.

PAM-Integration: Verschlüsselte Homedirectories (Solaris 11)

Unter Solaris 11 gibt es ein PAM-Modul (pam_zfs_key.so.1), das den Encryption Key des ZFS-Homedirectories an das Unix-Passwort des Benutzers koppelt. Beim Login wird das Homedirectory automatisch entschlüsselt und eingehängt — transparent für den Benutzer, funktioniert mit Konsole, SSH und GDM.

Konfiguration in /etc/pam.conf:

login auth     required pam_zfs_key.so.1 create
other password required pam_zfs_key.so.1

sshd-kbdint     auth requisite          pam_authtok_get.so.1
sshd-kbdint     auth required           pam_unix_cred.so.1
sshd-kbdint     auth required           pam_unix_auth.so.1
sshd-kbdint     auth required           pam_zfs_key.so.1 create

gdm     auth requisite          pam_authtok_get.so.1
gdm     auth required           pam_unix_cred.so.1
gdm     auth required           pam_unix_auth.so.1
gdm     auth required           pam_zfs_key.so.1 create

Neuen Benutzer anlegen und beim ersten Login zur Passwortänderung zwingen — dabei wird das verschlüsselte Homedirectory automatisch erstellt:

useradd sebastian
passwd sebastian
passwd -f sebastian

Beim ersten Login passiert alles automatisch:

login: sebastian
Password:
Choose a new password.
New Password:
Re-enter new Password:
login: password successfully changed for sebastian
Creating home directory with encryption=on.
Your login password will be used as the wrapping key.

Prüfen:

zfs get encryption,keysource rpool/export/home/sebastian
NAME                             PROPERTY    VALUE              SOURCE
rpool/export/home/sebastian      encryption  on                 local
rpool/export/home/sebastian      keysource   passphrase,prompt  local

So sieht der Vorgang im GDM (Gnome Display Manager) aus:

GDM-Benutzeranmeldung unter Solaris 11 mit ZFS-Homedirectory-Encryption.
Eingabe des initialen Passworts im GDM.
GDM fordert zur Passwortänderung auf.
Eingabe des neuen Passworts im GDM.
Wiederholte Eingabe des neuen Passworts im GDM.
GDM bestätigt die Passwortänderung.
GDM bestätigt das Anlegen des verschlüsselten Homedirectories.

Bestehendes Homedirectory nachträglich verschlüsseln

Ein bestehendes ZFS-Dataset lässt sich nicht nachträglich verschlüsseln. Der Weg: Dataset umbenennen, Benutzer zur Passwortänderung zwingen (erstellt neues verschlüsseltes Home), Daten zurückkopieren:

# Als anderer Admin mit root-Rechten:
zfs rename -f rpool/export/home/kernel rpool/export/home/kernel-alt
passwd -f kernel

# Nach dem Login (neues verschlüsseltes Home wurde angelegt):
cp -rp /export/home/kernel-alt/* /export/home/kernel/
zfs destroy rpool/export/home/kernel-alt

Wichtig: Die alten unverschlüsselten Daten liegen nach dem Destroy noch physisch auf der Platte und werden erst nach und nach überschrieben. Für echte Sicherheit müsste man die gesamte Platte überschreiben — oder besser: gleich bei der Installation verschlüsseln.

Mehr zu ZFS: ZFS Compression und Deduplication. Fragen? Einfach melden.

ZFS SMB-Freigaben unter Solaris/OpenIndiana mit sharesmb einrichten

Hinweis: Dieser Artikel beschreibt SMB-Freigaben mit dem eingebauten SMB-Server von Solaris/OpenIndiana. Unter FreeBSD und Linux nutzt man stattdessen Samba — dort wird sharesmb nicht unterstützt.

SMB-Server einrichten

Die SMB Server Kernel-Komponenten installieren:

pkg install SUNWsmbskr

Damit lokale Benutzer sich per Benutzername und Passwort authentifizieren können, das PAM-Modul in /etc/pam.conf eintragen:

other password required pam_smb_passwd.so.1 nowarn

SMB-Server starten und prüfen:

svcadm enable -r smb/server

svcs smb/server
STATE   STIME    FMRI
online  20:11:41 svc:/network/smb/server:default

In die gewünschte Workgroup eintreten:

smbadm join -w WORKGROUP
After joining WORKGROUP the smb service will be restarted automatically.
Would you like to continue? [no]: yes
Successfully joined WORKGROUP

ZFS-Freigabe erstellen

Ein neues ZFS-Dataset anlegen und direkt per SMB freigeben — ein einziges Property reicht:

zfs create rpool/daten-freigabe

zfs set sharesmb=on rpool/daten-freigabe

zfs get sharesmb rpool/daten-freigabe
NAME                 PROPERTY  VALUE  SOURCE
rpool/daten-freigabe sharesmb  on     local

Das war es. Das Dataset ist jetzt als SMB-Share im Netzwerk sichtbar. Kein Samba, keine smb.conf — der Kernel-SMB-Server von Solaris arbeitet direkt mit ZFS zusammen. Alle ZFS-Features (Snapshots, Compression, Quotas) gelten für die Freigabe genauso wie für jedes andere Dataset.

Zugriff

Von einem Windows-Client aus die Freigabe über \\hostname\daten-freigabe erreichen. Die Authentifizierung läuft über die lokalen Unix-Benutzer — das PAM-Modul synchronisiert die Passwörter automatisch.

Mehr zu ZFS: ZFS Compression und Deduplication. Fragen? Einfach melden.

ZFS NFS-Freigaben unter Solaris/OpenIndiana mit sharenfs einrichten

ZFS bringt NFS-Freigaben als eingebaute Funktion mit — kein separater NFS-Server nötig, ein einziges Property reicht. Das funktioniert unter Solaris, OpenIndiana und teilweise auch unter FreeBSD.

NFS-Freigabe erstellen

Dataset anlegen und per NFS freigeben:

zfs create rpool/daten

zfs set sharenfs=on rpool/daten

zfs get sharenfs rpool/daten
NAME        PROPERTY  VALUE  SOURCE
rpool/daten sharenfs  on     local

Das war es. Das Dataset ist jetzt per NFS im Netzwerk verfügbar — für alle Clients, ohne Einschränkung.

NFS-Optionen

Statt on lassen sich die üblichen NFS-Optionen direkt im Property angeben — zum Beispiel Zugriff nur für ein bestimmtes Subnetz:

# Nur Lesen/Schreiben für ein Subnetz
zfs set sharenfs="rw=@192.168.1.0/24" rpool/daten

# Nur Lesen für alle, Schreiben für ein Subnetz
zfs set sharenfs="ro,rw=@10.0.0.0/8" rpool/daten

# Freigabe prüfen
share -F nfs

Auf dem Client mounten:

mount -t nfs server:/rpool/daten /mnt/daten

Portabilität

Ein netter Nebeneffekt: ZFS-Properties wandern mit dem Pool. Exportiert man den Pool und importiert ihn auf einem anderen System, ist die NFS-Freigabe sofort wieder aktiv:

# Pool exportieren (z.B. vor dem Umstecken einer USB-Platte)
zpool export nfs-share

# Auf einem anderen System importieren — Share ist sofort da
zpool import nfs-share

Alle ZFS-Einstellungen — Compression, Quotas, Snapshots, Freigaben — bleiben erhalten. Für SMB-Freigaben statt NFS siehe ZFS SMB-Freigaben mit sharesmb. Mehr zu ZFS: ZFS Compression und Deduplication. Fragen? Einfach melden.

« Ältere Beiträge Neuere Beiträge »

© 2026 -=Kernel-Error=-RSS

Theme von Anders NorénHoch ↑