Linux 15.070 Themen, 107.540 Beiträge

Losetup, LuKS und shutdown

robinx99 / 7 Antworten / Baumansicht Nickles

Hi,
ich habe da ein kleines problem,
wenn ich eine datei mittels cryptsetup mounte, also
losetup /dev/loop0 datei
cryptsetup luksOpen /dev/loop0 xy
mount /dev/mapper/xy /mnt/crypt
in diesem falle kann ich keinen direkten shutdown machen, bzw ich kann es doch, die letzte meldung ist

/ bussy
halt

und beim nächsten neustart wird das root datei system überprüft, da es nicht richtig ausgehangen wurde.
Das selbe problem, scheint auch ab und an aufzutrteten wenn man einfach, mittels losetup etwas gemountet hat, wobei das stark vom dateisystem abhängt, und auch wenn man den swap speicher, mittels losetup mal vergrößert hat.

Meine Idee war jetzt dieses script zu verwenden und automatisch mit in den shutdown prozess einzubeziehen, prinzipiel scheint es auch zu funktionieren, nur gibt es halt ne menge fehlermeldungen aus, da es nicht überprüft ob die dinge wirklich gemountet sind oder ob ein loop device wirklich benutzt wird.

So jetzt zu meiner frage kann dieses script irgendwie schädlich sein, oder kann ich es einfach mit als praktisch letztes laufen lassen (S49)

System ist ein aktuelles ubuntu 64bit.

gruß
robinx99

und hier noch das script
--------------------------
#!/bin/bash
for f in /dev/mapper/* ;
do
umount $f;
done;

for f in /dev/loop* ;
do
umount $f;
done;

swapoff -a

for f in /dev/mapper/* ;
do
cryptsetup luksClose $f;
done;

for f in /dev/loop* ;
do
losetup -d $f;
done;
------------------------


bei Antwort benachrichtigen
KarstenW robinx99 „Losetup, LuKS und shutdown“
Optionen

Ich kann zu diesem Script nicht viel sagen, aber du müßtest eigentlich eine case Anweisung einfügen. Schau mal in die Scripte in /etc/init.d/ (bei Debian ) rein. Da ist immer so eine case Anweisung dabei:

case "$1" in
start)
start_it_up
;;
stop)
shut_it_down
;;
reload|force-reload)
reload_it
;;
restart)
shut_it_down
start_it_up
;;
*)
echo "Usage: /etc/init.d/$NAME {start|stop|reload|restart|force-reload}" >&2
exit 2
;;
esac

Der Parameter $1 ist der Parameter der von init diesem Script übergeben wird..
Diese Werte kann $1 annehmen:

start, stop, reload, force-reload, restart, * (alle anderen Werte)

Beginnt der Link mit S, übergibt init dem jeweiligen Script den "start" Parameter. Deshalb mußt du den "start" Paramter in diesem Script in einer case Anweisung auch auswerten.
Bei allen Links die mit K anfangen , übergibt init dem Script den "stop" Parameter, welchen du auch in diesem Scrip auswerten mußt.

Mit cryptsetup kenne ich mich als Debiananwender nicht aus. Wenn das Script beim shutdown ausgeführt wird, würde ich den Link mit K beginnen und im Script den stop Parameter auswerten.
Außerdem würde ich dieses Script ausführen , bevor das System anhält, damit das Dateisystem syncronisiert werden kann und Daten vom Speicher auf den Datenträger übertragen werden können.

Kennst du schon den Advanced Bash-Scripting Guide ?

http://www.tldp.org/LDP/abs/html/

Da ist auch die case Anweisung erklärt.

Diese Art der init - Scripte mit einer case Anweisung stammt ursprünglich von AT&T Unix und wird auch System V (römisch fünf) Style genannt.

PS: Bei Debian werden alle Dateisystem automatisch von einem Script unmounted, bevor das System runterfährt. Wieso mußt du selbst ein Script programmieren ?
Schau mal in das Script /etc/init.d/umountfs rein. Mit diesem Script werden alle Dateisysteme bei Debian automatisch unmounted, bevor der Rechner runterfährt.






Debian GNU/Linux https://www.debian.org/index.de.html
bei Antwort benachrichtigen
robinx99 KarstenW „Ich kann zu diesem Script nicht viel sagen, aber du müßtest eigentlich eine...“
Optionen

danke für den link, werde ich mir morgen, wenn ich mehr zeit habe mal näher anschaun, wobei ich prinzipiel davon ausgegangen bin dass es auch geht wenn man einfach ein bash script schreibt das in /etc/init.d ablegt und symlinks nur in den runlevels ablegt indenen man es braucht (/etc/rc0.d und /etc/rc6.d)

Prinzipiel veruscht auch Ubuntu alle dateisysteme auszuhängen bevor das system ausgeschaltet wird doch klappt das in meinem fall nicht.
datei auf root system
diese datei wird mittels losetup in /dev/loop0 als blockdevice zur verfügung gestellt
cryptsetup stellt die datei in /dev/mapper/crypt entschlüsselt zur verfügung
und /dev/mapper/crypt ist in /mnt/crypt zur verfügung gestellt.
Mein verdacht, nur ich weiß nicht wie ich den genauer belegen kann ist, dass zwar /mnt/crypt unmountet wird, doch der /dev/mapper/crypt bleibt und in folgedessen ist auch /dev/loop0, sowie die datei noch im zugriff und die letzte meldung vor dem ausgehen ist "/ bussy", also scheitert das unmounten.
Oder sollte soetwas wirklich schon als bug in ubuntu gelten? und ich sollte mich mit deren bugtacker vertraut machen?

gruß
robinx99

bei Antwort benachrichtigen
KarstenW robinx99 „danke für den link, werde ich mir morgen, wenn ich mehr zeit habe mal näher...“
Optionen

Die Init Scrpte sind auch normale Bashscripte, aber du mußt dich genau an den Style mit der case Anweisung halten.
Sonst kann init diese Scripte nicht richtig starten.

Das müßte ein Bug sein.
Bei Debian werden alle Dateisysteme automatisch unmounted. So ein Fehler ist mir bei Debian etch noch nie passiert.
Wobei diese Verschlüsselungsache bei Debian etch nicht zur Verfügung steht.

Debian GNU/Linux https://www.debian.org/index.de.html
bei Antwort benachrichtigen
robinx99 KarstenW „Die Init Scrpte sind auch normale Bashscripte, aber du mußt dich genau an den...“
Optionen

Also das init script wird ja korrekt ausgeführt, ist wohl nur nicht die saubere art und weise wie ich es mache, da muß ich wohl nochmal dran rumfummeln.

So und da ich nicht glauben konnte das Debian etch das nicht zur verfügung stellt hab ich es mal kurz in einer virtuellen maschine getestet. Und es scheint sich genauso zu verhalten. wobei ich da lange genu zeit hatte die letzte meldung genau zu sehen
"mount: / is busy"

Kurze anleitung
---------------------------
#Installieren der software
aptitiude install cryptsetup

#Erstellen eines containers (50MB) und mounten in /mnt/crypt
dd if=/dev/urandom of=crypt bs=1024 count=50K
losetup /dev/loop0 crypt
cryptsetup luksFormat /dev/loop0
cryptsetup luksOpen /dev/loop0 crypt
mkfs.ext3 /dev/mapper/crypt
mount /dev/mapper/crypt /mnt/crypt

#späteres mounten
losetup /dev/loop0 crypt
cryptsetup luksOpen /dev/loop0 crypt
mount /dev/mapper/crypt /mnt/crypt

#unmounten
umount /dev/mapper/crypt
cryptsetup luksClose crypt
losetup -d /dev/loop0
-----------------------

Wenn man jetzt eine verschlüßelte Partition gemountet hat und enfach "poweroff" eingibt, kommt es zu der fehlermeldung.

Wobei es hier sogar noch eine leicht ähnliche fehlermeldung gibt, wobei da allerdings noch LVM im spiel ist
www.nabble.com/lvm-%2B-dm-crypt-%3D-shutdown-problem-(mount:---is-busy)-td15713092.html

Da der link zu früh abgebrochen wird hab ich das http mal entfernt

gruß
robinx99

bei Antwort benachrichtigen
KarstenW robinx99 „Also das init script wird ja korrekt ausgeführt, ist wohl nur nicht die saubere...“
Optionen

Ich habe bei Debian etch noch mal in den Paketquellen gesucht und auch die Pakete cryptsetup und cryptmount gefunden.
Kann es sein das du das Paket cryptmount nicht installiert hast ?

cryptmount
Management and user-mode mounting of encrypted file systems
cryptmount is a utility for creating encrypted filesystems & swap partitions
and which allows an ordinary user to mount/unmount filing systems
without requiring superuser privileges.

It offers the following features (for 2.6-series linux kernels):
* easy and safe on-demand access to filesystems without su/sudo;
* access passwords can be changed easily without involving the sys-admin;
* filesystems can reside on raw disk partitions or ordinary files;
* multiple filesystems can be stored in a single disk partition;
* includes support for encrypted swap partitions;
* temporary filesystems can be setup via command-line,
for use in shell-scripts;
* encrypted filesystems can be initialized at boot-up or on demand;
* transparent configuration of dm-crypt & loopback devices during mounting;
* encrypted access keys are compatible with OpenSSL and can be
stored separately on removable media (e.g. USB flash disks).


cryptsetup

configures encrypted block devices
Since kernel 2.6.4, encrypted filesystem support is provided by the device
mapper target dm-crypt. This utility provides a command-line interface for
configuring this facility. It has integrated support for LUKS.

cryptsetup is backwards compatible with the on-disk format of cryptoloop,
but also supports more secure formats. This package also includes support
for automatically configuring encrypted devices at boot time via the config
file /etc/crypttab. When combined with newer versions of the debian
initrd-tools and standard debian kernels, cryptoroot is also supported.

For information on how to convert your system to use encrypted filesystems
please read /usr/share/doc/cryptsetup/CryptoRoot.HowTo.



Selbst bei Debian mußt du keine Scripte schreiben um Dateisysteme automatisch zu unmounten.

Wahrscheinlich mußt du an Stelle der normalen /etc/fstab Datei die Datei /etc/crypttab editieren.

Ich habe cryptsetup noch gar nicht unter Debian installiert.

Wenn du cryptmount installiert hast, dann schau doch mal in das Verzeichnis /etc/init.d rein, ob da ein neues Shellscript installiert worden ist, um diese verschlüsselten Dateisysteme automatisch beim Herunterfahren zu unmounten.
Wahrscheinlich heißt es wie umount???.


Debian GNU/Linux https://www.debian.org/index.de.html
bei Antwort benachrichtigen
robinx99 KarstenW „Ich habe bei Debian etch noch mal in den Paketquellen gesucht und auch die...“
Optionen

also das Installieren von cryptmount bringt nichts.
es fügt lediglich die init scripts
/etc/init.d/cryptmount
/etc/init.d/cryptmount-early
hinzugefügt

cryptsetup hat schon die pakete
/etc/init.d/cryptdisks
/etc/init.d/cryptdisks-early
hinzugefügt

ein shutdown ohne mein zugegebenermaßen häßliches script führt dazu das beim nächsten start folgendes passiert
[ 15.004731] EXT3-fs: INFO: recovery required on readonly filesystem.
[ 15.004878] EXT3-fs: write access will be enabled during recovery.
[ 18.009546] EXT3-fs: recovery complete.
[ 18.019876] EXT3-fs: mounted filesystem with ordered data mode.
[ 36.680316] EXT3 FS on sda7, internal journal

in der /etc/crypttab hab ich es eigentlich nicht eintragen wollen, da dies eher statisch ist und meines wissens nach dann direkt beim booten nach dem passwort gefragt wird,immerhin klappt ja auch das mounten von USB sticks und USB festplatten ohne das diese in der fstab eingetragen sein müssen und vorallem das unmounten von diesen beim shutdown.

Und auch das debian in der virtuellen maschine hat sich praktisch genauso verhalten, wie mein ubuntu.

bei Antwort benachrichtigen
KarstenW robinx99 „also das Installieren von cryptmount bringt nichts. es fügt lediglich die init...“
Optionen

Dann weiß ich auch nicht weiter. Ich noch das im Ubuntu Wiki gefunden:

http://wiki.ubuntuusers.de/Daten_verschl%C3%BCsseln

Debian GNU/Linux https://www.debian.org/index.de.html
bei Antwort benachrichtigen