• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

[gelöst] Verschlüsseltes Loop Device manuell mounten

f.gruber

Hacker
Hallo,
ich habe erstmals versucht, mit Hilfe des Partitionierer-Moduls in YAST ein verschlüsseltes Loop Device einzurichten.
Das hat so weit geklappt.
Nun möchte ich aber nicht jedes Mal beim Booten das Passwort eingeben und habe in der /etc/fstab die Option
Code:
noauto
hinzugefügt.
Nun weiß ich aber nicht, wie ich das verschlüsselte Dateisystem manuell mounten soll. :???:
Folgendes steht in der /etc/fstab:
Code:
# /etc/fstab
/dev/mapper/cr_secret   /mnt/secret   ext2   loop,noauto,acl,user_xattr,nofail 0 0
Das verschlüsselte Dateisystemimage befindet sich in folgendem Verzeichnis:
Code:
/sda2/secret
Ich habe die Partition /dev/sda2 im Verzeichnis /sda2 gemountet.

Bitte um Hilfe.
 

abgdf

Guru
Du wirst Dich mit der Macht vertraut machen müssen:

https://en.opensuse.org/SDB:Encrypted_filesystems
 

marce

Guru
Man kann das Passwort ja auch auf einem USB-Stick speicher, den man für's Booten / mounten einstecken muss...
Es gibt auch andere SmartCard, Yubi-Key, ...-Auth-Lösungen, die kein manuelles Tippen des Passwortes bedingen.
 
OP
F

f.gruber

Hacker
Ich möchte das Passwort nicht beim Booten eingeben, sondern den verschlüsselten Container bei Bedarf manuell mounten, wie ich es ja im Titel des Threads formuliert habe.
Ich habe nicht die Root Partition verschlüsselt, sondern mit dem YAST Partitionierer-Tool einen verschlüsselten Container angelegt (YAST nennt das Crypt-Datei), den ich als Loop Device manuell mounten möchte.
 
f.gruber schrieb:
Ich möchte das Passwort nicht beim Booten eingeben..
Ok
f.gruber schrieb:
sondern den verschlüsselten Container bei Bedarf manuell mounten
Und dann? Password Ja/Nein? Key Ja/Nein? Wenn key - woher?
f.gruber schrieb:
Ich habe nicht die Root Partition verschlüsselt, sondern mit dem YAST Partitionierer-Tool einen verschlüsselten Container angelegt (YAST nennt das Crypt-Datei), den ich als Loop Device manuell mounten möchte.
Vergiß Yast! Verzichte auf solche Automatismen. Für die Sicherheit bist du selbst verantwortlich. Beschäftige dich mit cryptsetup
Wähle den Algorithmus selbst aus, entscheide dich, welches Verfahren du verwenden willst (Luks,dm-crypt,keyfile,passphrase,..)
Die Crypt-Datei ist etwas ganz anderes.

Beschreibe den Vorgang, wie dieser Prozess des mount nach deinen Vorstellungen logistisch ablaufen soll.
"manuell" sagt gar nichts.

Gruß
Gräfin Klara
 

spoensche

Moderator
Teammitglied
Manuell musst du wie folgt vorgehen:

Mounten:
1. Loop Device erzeugen:
Code:
losetup -f /pfad/zum/container.img
2. Loop Device ermitteln:
Code:
losetup
3. Ich nehme jetzt als Beispiel /dev/loop0:
Code:
cryptsetup luksOpen /dev/loop0 crypt-container
4. Unter /dev/mapper existiert jetzt ein Symlink namens crypt-container. (/dev/mapper/crypt-container)
5. Jetzt kannst du ganz normal /dev/mapper/crypt-container mounten.

Unmounten:

1.
Code:
 umount /mountpoint/crypt-container
2.
Code:
 cryptsetup luksClose /dev/mapper/crypt-container
3.
Code:
losetup -d /dev/loop0
 

abgdf

Guru
f.gruber schrieb:
Ich möchte das Passwort nicht beim Booten eingeben, sondern den verschlüsselten Container bei Bedarf manuell mounten, wie ich es ja im Titel des Threads formuliert habe.
Ich habe nicht die Root Partition verschlüsselt, sondern mit dem YAST Partitionierer-Tool einen verschlüsselten Container angelegt (YAST nennt das Crypt-Datei), den ich als Loop Device manuell mounten möchte.
Ah! Das hab' ich auch so gemacht. spoensches Anleitung oben ist auch gut.
Ich verwende aus Gründer der (Rechner-)Tradition twofish, was möglicherweise veraltet sein kann. Für eine gewisse Sicherheit dürfte es reichen. Mein Skript zum Mounten sieht (nach allerhand Probieren mit der Webseite, die ich oben verlinkt hatte) so aus:
Code:
#!/bin/bash

# mosa_run

checka () {
    if test $1 != $2; then
        echo "Check failed at step $2. Aborting."
        echo "Try 'cryptsetup close /dev/mapper/secret_img' as root."
        exit 2
    fi
}

crfile="/home/user/containerfile"
safedir="/home/user/directory"

if test -e "/dev/mapper/secret_img"; then
    echo
    echo "Seems, a safe is already open. Please close it first. Aborting."
    echo
    exit 1
fi


# modprobe twofish
a=0
modprobe cryptoloop && let "a += 1"
checka $a 1
losetup /dev/loop0 "$crfile" && let "a += 1"
checka $a 2
cryptsetup --hash sha512 --cipher twofish-cbc-plain --key-size 256 create secret_img /dev/loop0 && let "a += 1"
checka $a 3
mount /dev/mapper/secret_img "$safedir" && let "a += 1"
checka $a 4
Muß von root ausgeführt werden. Deshalb verwende ich ein zweites Skript, das nur dieses hier aufruft, und für das sudo gesetzt ist. (Weiß nicht, ob man das noch eleganter lösen könnte).

Zum Umounten dann:
Code:
#!/bin/bash

umount /home/user/directory

cryptsetup close /dev/mapper/secret_img
losetup -d /dev/loop0
# rmmod cryptoloop
 
OP
F

f.gruber

Hacker
Auf https://wiki.ubuntuusers.de/LUKS/Containerdatei/ habe ich ein einfaches Skript gefunden, in dem die Befehlsfolge verpackt ist. Ich habe das Skript ein wenig abgeändert. Mein Skript verarbeitet den Pfadnamen des Containers als Eingabeparameter. Containerdatei und Mountpoint müssen den gleichen Dateinamen haben.
Nach Ausführen dieses Skriptes als root erscheint im Dateimanager in der Sidebar nun der Container. :p
Code:
param=$1
if [ $# -eq 0 ] ; then
cat << 'delimiter'
---------------------------------------------------------
Beschreibung
Usage 1:
    mount_container.sh <Pfad zum Containerfile>
Usage 2:
    Aufruf ohne Parameter: Pfad zum Containerfile wird abgefragt.
---------------------------------------------------------
delimiter
      read -p "Pfad zum Containerfile eingeben: " param
fi
if [ -z $param ] ; then exit ; fi
SAFE=$param
CRYPTNAME=$(basename $param)
MNT=/mnt/$CRYPTNAME
FS=ext2
LOOPDEV=`/sbin/losetup -f`
if [ "`/sbin/losetup -a | grep -c "$SAFE"`" != "0" ]; then
        echo "bereits eingehängt"
        exit
fi
/sbin/losetup $LOOPDEV $SAFE
/sbin/cryptsetup luksOpen $LOOPDEV $CRYPTNAME
/bin/mount -t $FS /dev/mapper/$CRYPTNAME $MNT
Das Skript zum Einhängen des Containers speichern als
Code:
/usr/local/bin/mount_container.sh
Code:
param=$1
if [ $# -eq 0 ] ; then
cat << 'delimiter'
---------------------------------------------------------
Beschreibung

Usage 1:
    umount_container.sh <Pfad zum Containerfile>
Usage 2:
    Aufruf ohne Parameter: Pfad zum Containerfile wird abgefragt.
---------------------------------------------------------
delimiter
      read -p "Pfad zum Containerfile eingeben: " param
fi

if [ -z $param ] ; then exit ; fi
SAFE=$param
CRYPTNAME=container
MNT=/mnt/$(basename $param)
LOOPDEV=`losetup -a | grep "$SAFE" | sed "s/: .*//"`
if [ "`losetup -a | grep -c "$SAFE"`" != "1" ]; then
        echo "nicht eingehängt"
        exit
fi
/bin/umount $MNT
/sbin/cryptsetup luksClose $CRYPTNAME
/sbin/losetup -d $LOOPDEV
Das Skript zum Aushängen des Containers speichern als
Code:
/usr/local/bin/umount_container.sh
Ich habe mit kmenuedit außerdem zwei Starterdateien erzeugt, eine zum Einhängen und eine zum Aushängen des Containers. Nach einigem Herumprobieren funktioniert es nun:
Unter "Erweitert" muss man anklicken:
  • Im Terminal starten
  • Mit anderer Benutzerkennung starten: root
Hier der Inhalt der zwei von kmenuedit erzeugten Desktop-Dateien:
Code:
~/.local/share/applications/Mount Container.desktop
Code:
[Desktop Entry]
Comment=Verschlüsselten Container einhängen
Exec=/usr/local/bin/mount_container.sh /sda2/container
GenericName=Container einhängen
Icon=kipi-dropbox
Name=Mount Container
NoDisplay=false
Path[$e]=
StartupNotify=false
Terminal=1
TerminalOptions=
Type=Application
X-KDE-SubstituteUID=true
X-KDE-Username=root
und
Code:
~/.local/share/applications/Umount Container.desktop
Code:
[[Desktop Entry]
Comment=Verschlüsselten Container aushängen
Exec=/usr/local/bin/umount_container.sh /sda2/container
GenericName=Container aushängen
Icon=preferences-web-browser-adblock
Name=Umount Container
NoDisplay=false
Path[$e]=
StartupNotify=true
Terminal=1
TerminalOptions=
Type=Application
X-KDE-SubstituteUID=true
X-KDE-Username=root/code]
 
Oben