Fast genauso dumm wie der Rest…

verschlüsselte Platte mounten

April 15th, 2008 @ 18:52 by lookshe

So, nach langer Zeit komm ich mal wieder dazu was zu schreiben. Irgendwer hat mich auf die sinnlose Idee gebracht, doch mal einige meiner Shell-Skripte hochzuladen. Kann man ja gleich sinnvoll ‘nen Blogeintrag machen und die erklären, dacht ich mir. Da wolle wa mal anfange:

Meine externe Platte hat 3 Partitionen. Und da ich die mal hier mal dort anstöpsel, nervt es ein wenig, jedesmal das Mapping für die verschlüsselte Partition anzulegen. Linux-User sind ja von Natur aus faul, also hab ich mir da ein Skript für geschrieben, dass das alles übernimmt. Hier mal bröckchenweise mit Erklärungen:

1
2
3
4
5
6
7
8
9
#!/bin/bash            
 
#first get su
sudo ls > /dev/null
if [ $? -ne 0 ]
then
   echo "You need root-privileges to go on! So type your password correct!"
   exit 2
fi

Hier holen wir uns nur die benötigten Root-Rechte, da diese im weiteren Verlauf des Skriptes benötigt werden.

11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#check if device is connected
cat /proc/partitions | grep 488386584 > /dev/null
if [ $? -ne 0 ]
then
   echo "Device not connected!"
   exit 1
fi   
 
printf "checking device: "
dev=$(cat /proc/partitions | grep 488386584 | awk '{print $4}')
for i in $dev
do
   if [ $(udevinfo --query=all --name=/dev/$i | grep "ID_SERIAL=" | awk -F= '{print $2}') = "WD_5000AAK_External_574341505734313138393536-0:0" ]
   then
      dev=$(echo /dev/$i)
   fi
done
partition=$(echo $(echo $dev)7)

Anhand der Blockanzahl wird geprüft ob die Festplatte angeschlossen ist. Dies ist natürlich nicht ideal, da es auch andere 500GB Modelle darauf zutreffen. Da ich dieses Skript aber nur bei angeschlossener Festplatte ausführe, reicht mir das. Anhand der Seriennummer wird dann geprüft, an welchem Device die Platte erkannt wurde. Speichern wir uns natürlich alles schön weg :)

29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
luksMapper=""
mapName="externe"
mount1="/media/usb-1"
mount2="/media/usb-2"
mount3="/media/usb-3"   
 
printf "found at $dev\n"   
 
printf "checking mappings: "
#check for cryptmount
for mapper in $(ls /dev/mapper/)
do
   devFound="false"
   sudo cryptsetup status $mapper > /dev/null 2>&1
   if [ $? -eq 0 -a $devFound=false ]
   then
      actDev=$(sudo cryptsetup status $mapper | grep device | awk '{print $2}')
      if [ "$actDev" = "$partition" ]
      then
         devFound="true"
         luksMapper=$mapper
      fi
   fi
done

Oben sind eigentlich nur ein paar Variablen, die später gebraucht werden, z.B. wohin die 3 Partitionen gemountet werden und wie das Mapping benannt wird. Nach diesen Definitionen wird geprüft, ob die Platte schon auf ein Mapping gehangen wurde. Da die Mappings in /dev/mapper sind, wird einfach alles dort drin mit “cryptsetup status $mapper” geprüft, ob das Mapping auf meine Partition passt. Das wird dann, wenn gefunden, gespeichert.

54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
#get all mounts to unmount
mountDev=""  
 
if [ "$luksMapper" = "" ]
then
   printf "no mapping found\n"
else
   mountDev=$(echo $mountDev $(mount | grep /dev/mapper/$luksMapper | awk '{print $3}'))
   printf "found at /dev/mapper/$luksMapper\n"
fi  
 
printf "checking mounts: "
for mounts in $(mount | grep $dev | awk '{print $3}')
do
   mountDev=$(echo $mountDev $mounts)
done  
 
if [ "$mountDev" = "" ]
then
   printf "nothing found\n"
else
   printf "found at $mountDev\n"
   printf "unmounting: "
   for mounts in $mountDev
   do
      sudo umount $mounts
   done
   printf "done\n"
fi  
 
if [ "$luksMapper" = "" ]
then
   echo > /dev/null
else
   printf "closing mapping: "
   sudo cryptsetup luksClose $luksMapper
   printf "done\n"
fi

Langes Stückchen, kurzer Text. Es werden alle Mountpunkte der Platte gesucht und unmountet. Zusätzlich auch eventuell geöffnete Mappings.
Bis zu diesem Punkt kann man das Skript auch wunderbar nehmen um die Platte korrekt zu unmounten usw. um sie gefahrlos abzustöpseln.

94
95
96
97
98
99
100
101
102
103
printf "opening mapping at /dev/mapper/$mapName: \n"
sudo cryptsetup luksOpen $partition $mapName > /dev/null 2>&1
if [ $? -ne 0 ]
then
   printf "\n\n"
   echo "error while opening the mapping!"
   exit 2
else
   echo "mapping opened successfully"
fi

Das vorher definierte Mapping wird geöffnet. Das ist auch der Punkt, wo dann vom User das Passwort abgefragt wird.

105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
echo "checking for mount directories: "  
 
printf "checking $mount1: "
if [ ! -d "$mount1" ]
then
   printf "creating\n"
   sudo mkdir "$mount1"
else
   printf "ok\n"
fi
printf "checking $mount2: "
if [ ! -d "$mount2" ]
then
   printf "creating\n"
   sudo mkdir "$mount2"
else
   printf "ok\n"
fi
printf "checking $mount3: "
if [ ! -d "$mount3" ]
then
   printf "creating\n"
   sudo mkdir "$mount3"
else
   printf "ok\n"
fi

Damit das Skript auch problemlos auf anderen Rechnern genutzt werden kann, sind die Mountpunkte definiert und werden bei Bedarf angelegt.

132
133
134
135
136
137
138
echo "mounting devices: "
sudo mount -t ntfs-3g -o rw,uid=1000,gid=1000 $(echo $dev)5 $mount1
sudo mount -t vfat -o rw,uid=1000,gid=1000 $(echo $dev)6 $mount2
sudo mount -t xfs /dev/mapper/$mapName $mount3  
 
echo "device mountet successfully and can now be used"
exit 0

Abschließend sollte natürlich auch noch alles gemountet werden :)

Angehängt findet man das komplette Skript. Natürlich sollte es individuell angepasst werden. Dies betrifft die jeweiligen Mountpunkte und die Partitionen. Bei Fragen, kann man sich gern an mich wenden.

Mountskript

3 Responses to “verschlüsselte Platte mounten”

  1. Fauler Hund, blog mal wieder!

  2. Als hätt ich grad nichts besseres zu tun… *auf Diplomarbeit schiel*

  3. So, Kommentare hier mal deaktiveren, scheiss Spambots