Archiv/ecryptfs/Problembehandlung

Archivierte Anleitung

Dieser Artikel wurde archiviert. Das bedeutet, dass er nicht mehr auf Richtigkeit überprüft oder anderweitig gepflegt wird. Der Inhalt wurde für keine aktuell unterstützte Ubuntu-Version getestet. Wenn du Gründe für eine Wiederherstellung siehst, melde dich bitte in der Diskussion zum Artikel. Bis dahin bleibt die Seite für weitere Änderungen gesperrt.


Anmerkung: Die im Artikel beschriebenen Probleme und deren zugehörige Lösungen sind nicht mehr relevant, da die Pakete aus den Ubuntu-Quellen, welche die Probleme verursachten, Mitte April 2015 aktualisiert wurden, so dass die Probleme nicht mehr auftreten.

Artikel für fortgeschrittene Anwender

Dieser Artikel erfordert mehr Erfahrung im Umgang mit Linux und ist daher nur für fortgeschrittene Benutzer gedacht.

Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:

  1. Ein Terminal öffnen

  2. einen Editor benutzen

  3. Root-Rechte

Inhaltsverzeichnis
  1. Arbeitsweise allgemein
  2. System einrichten
    1. Datei für upstart erstellen
    2. rc.local für systemd benutzen
    3. Datei für systemd erstellen
    4. systemd anpassen
  3. Weitere Anpassungen
    1. Partition einrichten
  4. Probleme mit systemd
  5. Links

Diese Beschreibung gilt als workaround für die Ubuntuversionen:

Andere Versionen sind von dem nachfolgend beschriebenen Problem nicht betroffen. Mit Einführung / Release von Ubuntu 15.04 wurde das Problem behoben.

Arbeitsweise allgemein

Mit der Verschlüsselung vom Homeverzeichnis mittels ecryptfs wird die Partition, die für eine SWAP eingerichtet wurde, auch verschlüsselt. Das lief bisher ohne Probleme.

Mit der Abfrage im Terminal

swapon -s 

und einer beispielhaften Ausgabe von

Filename			Type		Size	Used	Priority
/dev/mapper/cryptswap1          partition	8519672	0	-1

kann man das überschlägig abschätzen - es sind je nach System auch andere, vergleichbare Ausgaben möglich. Dann ist eine Überarbeitung nicht unbedingt erforderlich. Fehlt jedoch eine solche Ausgabe, dann muss man von einer fehlerhaften Aufbereitung der SWAP ausgehen.

System einrichten

Mit der Umstellung auf upstart bzw. mit der Einführung von systemd wird das Erstellen der verschlüsselten SWAP, in der Regel

nicht mehr richtig bzw. falsch ausgeführt. Diese Beschreibung zeigt Wege auf, wie das bis zu einer offiziellen Umstellung des Paketes ecryptfs-utils repariert werden kann.

Ab Ubuntu 14.04 wurden die Basispakete - hier speziell das Paket ecryptfs-setup-swap in einer überarbeiteten Form eingeführt. Das erlaubte jetzt zwar, dass die verschlüsselte SWAP für den Bereitschafts- und Schlafmodus benutzt werden kann, führte aber zu anderen Problemen - bis hin zur Unbrauchbarkeit - die SWAP konnte und wurde nicht mehr benutzt.

Dazu gibt es mehrere workarounds, jedoch waren die alle irgendwie nicht querschnittlich benutzbar.

Die folgende Beschreibung und die Skripte sollen alle diese Probleme beheben und sind auch gegen mögliche Updates sicher.

Man sollte beide Start-Modi für

neu gestalten/aufbereiten, da diese sich nicht gegenseitig beeinflussen/stören.

Datei für upstart erstellen

Bei dem Startmodus für upstart werden die Skripte/Anweisungen im Verzeichnis

ausgewertet, die je nach der internen Gestaltung den Ablauf bei der Initialisierung regeln.

Um die SWAP /dev/mapper/cryptswap1 beim Bootvorgang einzurichten wird folgender Text als cryptswap.conf benötigt:

1
2
3
4
5
6
start on started mountall
script
    /sbin/cryptdisks_start cryptswap1
    /bin/sleep 1
    /sbin/swapon /dev/mapper/cryptswap1 
end script

Man erstellt diese Datei mit einem Editor [3] seiner Wahl im Homeverzeichnis und kopiert diese dann mit Rootrechten

sudo cp -f ~/cryptswap.conf /etc/init/ 

in das Verzeichnis /etc/init.

rc.local für systemd benutzen

Man setzt das Skript /etc/rc.local für die Aktivierung ein, in dem man dort folgende Ergänzung mit einem Editor [3] seiner Wahl mit Rootrechten vor dem vorhandenen exit 0 einbringt:

1
2
3
/sbin/cryptdisks_start cryptswap1
/bin/sleep 1
/sbin/swapon /dev/mapper/cryptswap1

Aufgerufen wird das dann von der Unit, die unter /lib/systemd/system/rc-local.service vorhanden ist.

Datei für systemd erstellen

Bei dem Startmodus für systemd werden die Skripte/Anweisungen (Units) im Verzeichnis

für das Basissystem bzw.

für eigene Anweisungen ausgewertet, die je nach der internen Gestaltung den Ablauf bei der Initialisierung regeln.

Um die SWAP /dev/mapper/cryptswap1 beim Bootvorgang einzurichten wird folgender Text als cryptswap.service benötigt:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
[Unit]
Description=Cryptswap Service
Requires=cryptsetup.target
After=network.target

[Service]
SysVStartPriority=99
Type=forking
ExecStartPre=/sbin/cryptdisks_start cryptswap1 
ExecStart=/bin/sleep 1
ExecStartPost=-/sbin/swapon /dev/mapper/cryptswap1 start

[Install]
WantedBy=multi-user.target

Man erstellt diese Datei mit einem Editor [3] seiner Wahl z.B. im Homeverzeichnis und kopiert diese dann mit Rootrechten

sudo cp -f ~/cryptswap.service /lib/systemd/system/ 

in das Verzeichnis /lib/systemd/system.

Experten-Info:

Hinweis zur obigen Dateien: Der Befehl /bin/sleep 1 ist abhängig von der Qualität der Festplatte, auf der die SWAP-Partition sich befindet. Bei den Tests hat sich eine Verzögerung von einer (1) Sekunde als ausreichend gezeigt.

systemd anpassen

Jede vom Benutzer eingebrachte Veränderung an einer "systemd-Unit" muss man dem System bekannt machen - z.B nach dem obigen Kopieren der neu erstellten Datei. Dazu muss man im Terminal [1] (hier beispielhaft cryptswap.service) mit

sudo systemctl disable cryptswap.service
sudo systemctl enable cryptswap.service 

die interne Struktur von systemd anpassen.

Weitere Anpassungen

Achtung!

Arbeiten am System, wie diese nachfolgend beschrieben werden, können immer zu Fehlern führen, die das System unbrauchbar machen. Deshalb sollte die Eingabe der Befehle mit der notwendigen Sorgfalt erfolgen - am besten arbeitet man dabei mit

  • Kopieren -> Einfügen

von der WIKI-Vorlage in das Terminal.

Hinweis:

Um die SWAP als verschlüsselte Partition querschnittlich benutzen zu können, sollte man das insgesamt neu aufbauen. Die Schritte dazu werden nachfolgend beschrieben.

Mit einem Editor [3] seiner Wahl entfernt man mit Rootrechten in der /etc/fstab alle Einträge für eine Swap-Partition, entweder durch auskommentieren oder löschen!

Partition einrichten

Anhand der Beschreibung Swap sollte man die SWAP-Partition neu einrichten/formatieren und ermittelt danach die UUID zur weiteren Verwendung im Terminal [1] mit

sudo mkswap /dev/sdXY # XY an das eigene System anpassen 

Mit der angezeigten UUID einzusetzen bei <ermittelte UUID> (mit ->kopieren -> übertragen) werden nun in einem Terminal [1] folgende Eingaben ausgeführt

sudo export SWAP_UUID=<ermittelte UUID>
sudo echo "RESUME=UUID=$SWAP_UUID" > /etc/initramfs-tools/conf.d/resume
sudo update-initramfs -u 
sudo sed -i s/'cryptswap'/'# cryptswap'/g /etc/crypttab
sudo echo "cryptswap1 UUID=$SWAP_UUID /dev/urandom swap,cipher=aes-xts-plain64,offset=8,noauto" >> /etc/crypttab 

Nach Abschluss obiger Befehle im Terminal sollte man das korrekte Anlegen der neuen Dateien

überprüfen, bevor man jetzt den Rechner neu startet.

Hinweis:

Die oben eingesetzte, aktuelle Verschlüsselung mit >cipher=aes-xts-plain64< kann gegen jede andere, gängige Methode ausgewechselt werden.

Probleme mit systemd

Kommt es trotz aller Sorgfalt zu Problemen beim Einsatz der Unit >cryptswap.service so sollte man zu erst eine Überprüfung im Terminal [1} ausführen

sudo blkid | grep swap
sudo systemctl --all | grep cryptswap.service 

wobei man mit dem ersten Befehl eine Überprüfung vom Zustand der SWAP-Partition abfragt, der zweite Befehl sollte im Normalfall diese Ausgabe ergeben:

cryptswap.service      loaded inactive dead      Cryptswap Service

Weicht der markierte Bereich ab, so sollte man eine Reinstalltion der betreffenden Pakete

ausführen. Dazu offnet man ein Terminal [1] und gibt dort ein:

sudo systemctl disable cryptswap.service
sudo apt-get update
sudo apt-get install --reinstall systemd
sudo apt-get install --reinstall systemd-sysv
sudo update-grub
sudo systemctl enable  cryptswap.service 

Nach einem Reboot kann man dann den Erfolg dieser Arbeiten überprüfen.