Dedies-Board (https://www.dedies-board.de/wbb2/index.php)
- Linux (https://www.dedies-board.de/wbb2/board.php?boardid=30)
-- FAQs (https://www.dedies-board.de/wbb2/board.php?boardid=32)
--- Einhängen von per cryptsetup/LUKS verschlüsselten Partition über sshfs (https://www.dedies-board.de/wbb2/thread.php?threadid=2696)
Geschrieben von Vimes am 12.08.2010 um 22:34:
Einhängen von per cryptsetup/LUKS verschlüsselten Partition über sshfs
Folgendes Szenario:
An einem kleinen Heimserver (in meinem Falle: ein sheevaplug) hängt - in diesem Falle per USB angeschlossen, das ist aber völlig wurst - eine externe Festplatte, die mit cryptsetup/LUKS verschlüsselt ist.
Jetzt will man mit sshfs diese Platte lokal (in meinem Falle: auf meinem Laptop) einhängen.
Hier die bash-Skripte, die ich mir dafür gebastelt habe:
Einhängen:
code: |
1:
2:
3:
4:
5:
6:
|
#!/bin/bash
read pw
echo $pw | ssh vimes@192.168.1.115 /home/vimes/bin/mtjazz
sshfs 192.168.1.115:/mnt/jazz /home/vimes/jazz
echo "success"
exit 0 |
|
/home/vimes/bin/mtjazz ist ein weiteres skript [1], das diese Platte a) entschlüsselt und b) einhängt, und zwar - natürlich - auf dem Sheevaplug.
Die nächste Zeile hängt dann diese Partition (entschlüsselt) auf meinem lokalen Dateisystem ein, via sshfs.
Wichtig: das cryptsetup/LUKS-Paßwort wird eingegeben; man kann es natürlich auch direkt im Skript übergeben, die Zeile sieht dann so aus:
code: |
1:
|
'Total geheimes Paßwort' |ssh vimes@192.168.1.115 /home/vimes/bin/mtjazz |
|
Wichtig ist, daß das Paßwort in einzelne Anführungszeichen ' eingeschlossen wird.
Persönlich habe ich mich aus Sicherheitsgründen dagegen entschieden, das Paßwort fest zu hinterlegen.
Umgekehrt gilt es, die Platte zunächst lokal auszuhängen und anschließend auf dem Server a) die Partition auszuhängen und b) cryptsetup luksClose auszuführen (damit die Platte nur nach erneuter Eingabe des cryptsetup/LUKS-Paßwortes eingesehen werden kann!):
code: |
1:
2:
3:
4:
|
#!/bin/bash
fusermount -u jazz # hängt Platte lokal aus, d.h. beendet sshfs
ssh vimes@192.168.1.115 /home/vimes/bin/umtjazz # ruft das Skript auf dem Server auf, das die Platte aushängt und verschlüsselt [2]
exit 0 |
|
MfG
Vimes
[1] Gibt es hier auch, trotzdem der Vollständigkeit halber:
code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
|
#!/bin/bash
sudo /sbin/cryptsetup luksOpen /dev/disk/by-uuid/4b3a2e7f-ccb5-42f5-bf3c-98fa22e92f32 jazz
#sudo /sbin/cryptsetup luksOpen -d /home/vimes/luksKey/key.key /dev/disk/by-uuid/4b3a2e7f-ccb5-42f5-bf3c-98fa22e92f32 jazz
#First, open the crypto container
limit="24"
# Set limit after which partition needs to be checked
result=$(sudo /sbin/tune2fs -l /dev/mapper/jazz |grep 'Mount count' |awk '{print $3}')
# get the number of mount operations already performed via tune2fs, grep and awk
if [ $result -ge $limit ]; then
# if number of mount operations equal to or greater than the limit ...
sudo /sbin/e2fsck -p /dev/mapper/jazz
# check the file system before mounting it
fi
mount /mnt/jazz
exit 0 |
|
[2] Wie [1]:
code: |
1:
2:
3:
4:
5:
6:
7:
|
#!/bin/bash
#unmount crypto device safely
if [ -e /dev/mapper/jazz ]; then
umount /mnt/jazz
sudo /sbin/cryptsetup luksClose jazz
fi
exit 0 |
|
Geschrieben von Hertener am 13.08.2010 um 09:36:
Hab zwar keinen lokalen Server, finde das aber trotzdem sehr interessant.
Geschrieben von Vimes am 13.08.2010 um 13:35:
Als kleinen Server teste ich gerade den Sheevaplug, den habe ich inkl. Zoll und Sperenzchen für ungefähr 140 Euro aus den USA importiert. Das ist ein Wort, Atom-Systeme fangen preislich bei knapp 300 an, irgendwelche ITX-Mainboards sind auch nicht gerade günstig ...
ARM-Prozessor mit 1,2GHz ... für meine Anwendungen sollte das locker reichen.
Als nächstes kloppe ich da SAMBA drauf, um auch Windozen einbinden zu können (z.B. zum Tauschen von Dateien ...) und einen WPA2-Enterprise-Server fände ich auch nett. Da gabs in der c't mal eine Anleitung für Debian zu, die müßte ich noch rumfliegen haben ...
Aktuell läuft gerade der Filesystem-Check für meine 2TB-Platte. Das kann dauern ...
Muß ich noch das Skript ändern, damit es jeweils vorher fragt, ob's gerade "genehm" ist.
Edit:
Das modifizierte Einhängeskript lautet bei mir so:
code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
|
#!/bin/bash
sudo /sbin/cryptsetup luksOpen /dev/disk/by-uuid/4b3a2e7f-ccb5-42f5-bf3c-98fa22e92f32 jazz
#sudo /sbin/cryptsetup luksOpen -d /home/vimes/luksKey/key.key /dev/disk/by-uuid/4b3a2e7f-ccb5-42f5-bf3c-98fa22e92f32 jazz
#First, open the crypto container
limit="24"
# Set limit after which partition needs to be checked
result=$(sudo /sbin/tune2fs -l /dev/mapper/jazz |grep 'Mount count' |awk '{print $3}')
# get the number of mount operations already performed via tune2fs, grep and awk
if [ $result -ge $limit ]; then
# if number of mount operations equal to or greater than the limit ...
echo "file system check recommended. Press y to check"
read input
if [ $input = "y" ]; then
sudo /sbin/e2fsck -p /dev/mapper/jazz
fi
fi
mount /mnt/jazz
exit 0 |
|
Die Rückfrage verhindert, daß der Check genau dann durchgeführt wird, wenn ich die Wartezeit nicht brauchen kann, z.B. weil ich mir abends gemütlich einen Film reintun möchte.
MfG
Vimes
Geschrieben von Haui am 15.08.2010 um 20:35:
Hallo,
eine Frage hätte ich. Wäre es nicht um einiges schöner, Pubkey-Authentifizierung statt des read/echo-Konstrukts zu verwenden, oder gibt es etwas was dagegen sprechen würde? Das würde nicht nur einen Sicherheitsgewinn mit sich bringen (wobei das bei einem lokalen Netzwerk in dem du alle Maschinen selbst administrierst natürlich prinzipiell egal ist) , sondern auch den Komfort erhöhen, da man das Passwort nicht jedes Mal eintippen müsste.
Eine eher allgemeine Anmerkung, die fast schon ein wenig off topic ist, hätte ich auch noch, falls jemand die Skripte auf seine eigenen Bedürfnisse anpassen möchte. Die Bash "kennt keine richtigen Variablen", d.h. sie verschluckt sich bei Dingen wie if [ $input = "y" ]; wenn $input so böse Dinge wie Leerzeichen enthält. Das kann man vermeiden, indem man (am besten alle) Variablen in Anführungszeichen packt, also "$input" statt $input. Speziell für Verzweigungen kann man auch [[ ]] statt [ ] verwenden - das hat den Vorteil, dass die Doppelklammer im Gegensatz zu [ kein externes Programm sondern ein Bash-Builtin ist. In den Doppelklammern kann man deshalb auch gefahrlos die Anführungszeichen um Variablen herum weglassen.
Geschrieben von Vimes am 15.08.2010 um 21:29:
Danke für die Rückfrage!
Die ssh-Authentifizierung wird per PubKey durchgeführt, assistiert von ssh-agent. Was Du da als Echo-Eingabe siehst, ist die cryptsetup/LUKS-Authentifizierung. Das geht zwar auch mit einem keyfile, aber kann man das auch über eine SSH-Verbindung würgen? Ich will das keyfile nämlich nicht gerade auf dem Homeserver hinterlegen ...
Danke für die Anmerkungen zur Bash-Syntax; für meine Zwecke reicht's wie oben, weil nur genau dann e2fsck durchlaufen soll, wenn genau y und nichts anderes eingegeben wird. Ansonsten aber eine sehr gute Anmerkung ... ich sollte mich wirklich mehr mit der Bash beschäftigen. :)
MfG
Vimes
Geschrieben von Haui am 15.08.2010 um 22:45:
Zitat: |
Original von Vimes
Die ssh-Authentifizierung wird per PubKey durchgeführt, assistiert von ssh-agent. Was Du da als Echo-Eingabe siehst, ist die cryptsetup/LUKS-Authentifizierung. Das geht zwar auch mit einem keyfile, aber kann man das auch über eine SSH-Verbindung würgen? Ich will das keyfile nämlich nicht gerade auf dem Homeserver hinterlegen ...
|
|
Wenn das so ist, könntest du dir das
read pw aber schenken, da dein Script auf dem Server das Passwort sowieso von STDIN liest.
Gruß
Haui
Geschrieben von Vimes am 17.08.2010 um 21:41:
Hm. Merchwürdich. Genau das hat bei mir nicht funktioniert. Ich muß das mal wieder probieren, wenn ich den Plug wieder lauffähig habe. Wahrscheinlich habe ich mich zu dusselig angestellt.
Danke Dir!
MfG
Vimes