Michael_64
Anmeldungsdatum: 17. Dezember 2006
Beiträge: 9
|
Hallo zusammen, gibt es eigentlich eine Möglichkeit, dass dropbear per scp selbst ein keyfile zieht um das System zu entschlüsseln? Damit würde das verschlüsselte System immer automatisch hochfahren, solange der key über das Netz erreichbar ist. Michael
|
cuco
Anmeldungsdatum: 6. August 2011
Beiträge: 34
|
gekmihesg schrieb: Ich nutze das zwar selber nicht mehr, aber nachdem der Thread jetzt doch schon einige Hits hat, hier mal eine überarbeitete Version für 12.04. 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56 | #!/bin/sh
PREREQ="dropbear"
prereqs() {
echo "$PREREQ"
}
case "$1" in
prereqs)
prereqs
exit 0
;;
esac
. "$CONFDIR/initramfs.conf"
#. /usr/share/initramfs-tools/hook-functions
if [ "$DROPBEAR" != "n" ] && [ -r "/etc/crypttab" ] ; then
# fix for dropbear in Ubuntu 12.04 x86_64
[ -d /lib/x86_64-linux-gnu ] && cp -p /lib/x86_64-linux-gnu/libnss_* "$DESTDIR/lib/"
mkdir -m 755 -p "$DESTDIR/lib/unlock"
##### /bin/unlock
cat > "${DESTDIR}/bin/unlock" <<EOF
#!/bin/sh
if PATH=/lib/unlock:/bin:/sbin /scripts/local-top/cryptroot ; then
for n in cryptroot "plymouth ask-for-pass" cryptsetup ; do
p=\$(ps w | grep "\$n" | awk '\$5 != "grep" {print \$1}')
[ -n "\$p" ] && kill \$p
done
exit 0
fi
exit 1
EOF
##### EOF /bin/unlock
##### /lib/unlock/plymouth
cat > "$DESTDIR/lib/unlock/plymouth" <<-EOF
#!/bin/sh
[ "\$1" == "--ping" ] && exit 1
exec /bin/plymouth "\$@"
EOF
##### EOF /lib/unlock/plymouth
chmod 755 "$DESTDIR/bin/unlock"
chmod 755 "$DESTDIR/lib/unlock/plymouth"
# enable password login
[ -n "$SSHUSERPASS" ] &&
touch "$DESTDIR/etc/shadow" && chmod 640 "$DESTDIR/etc/shadow" &&
getent shadow "$SSHUSERPASS" | sed -n "s/^$SSHUSERPASS:/root:/p" /etc/shadow >> "$DESTDIR/etc/shadow"
sed -i'' 's|^\(root:.*\):[^:]*$|\1:/bin/sh|' "$DESTDIR/etc/passwd"
fi
|
Das Skript ist übrigens viel besser in /etc/initramfs-tools/hooks/ aufgehoben. Ich hab auch ein paar Fixes übernommen:
Für root wird jetzt nochmal sichergestellt, dass die Shell auch /bin/sh ist pkill ist rausgeflogen, die Methode von servern00b hab ich ein bisschen angepasst Zumindest bei mir (12.04 Server x86_64 Beta 2) hat der SSH Login erstmal garnicht funktioniert, nachdem der dropbear-Hook die nss-Libs nicht gefunden hat
Funktioniert übrigens hervorragend mit 12.10 ☺ Danke dafür!
|
bboyzrulez
Anmeldungsdatum: 23. Dezember 2012
Beiträge: Zähle...
|
Besten Dank an gekmihesg und an alle die beigetragen haben. Ich habe einpaar Aenderungen eingebaut.
Das "ps" Command in der BusyBox akzeptiert keine Optionen.
Die Zeile zum Ermitteln der Pids ist jetzt einfacher geworden.
Es wird ein SIG 9 beim beenden der Prozesse geschickt.
Beim "fix for dropbear in Ubuntu 12.04 x86_64" wird das copieren trotz evtl. vorhandener cp, mv ... aliases ausgefuehrt. 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56 | #!/bin/sh
PREREQ="dropbear"
prereqs() {
echo "$PREREQ"
}
case "$1" in
prereqs)
prereqs
exit 0
;;
esac
. "$CONFDIR/initramfs.conf"
#. /usr/share/initramfs-tools/hook-functions
if [ "$DROPBEAR" != "n" ] && [ -r "/etc/crypttab" ] ; then
# fix for dropbear in Ubuntu 12.04 x86_64
[ -d /lib/x86_64-linux-gnu ] && \cp -a /lib/x86_64-linux-gnu/libnss_* "$DESTDIR/lib/"
mkdir -m 755 -p "$DESTDIR/lib/unlock"
##### /bin/unlock
cat > "${DESTDIR}/bin/unlock" <<EOF
#!/bin/sh
if PATH=/lib/unlock:/bin:/sbin /scripts/local-top/cryptroot ; then
for n in cryptroot "plymouth ask-for-pass" cryptsetup ; do
p=\$(ps | grep "\$n" | awk '!/grep/ {print \$1}')
[ -n "\$p" ] && kill -KILL \$p
done
exit 0
fi
exit 1
EOF
##### EOF /bin/unlock
##### /lib/unlock/plymouth
cat > "$DESTDIR/lib/unlock/plymouth" <<-EOF
#!/bin/sh
[ "\$1" == "--ping" ] && exit 1
exec /bin/plymouth "\$@"
EOF
##### EOF /lib/unlock/plymouth
chmod 755 "$DESTDIR/bin/unlock"
chmod 755 "$DESTDIR/lib/unlock/plymouth"
# enable password login
[ -n "$SSHUSERPASS" ] &&
touch "$DESTDIR/etc/shadow" && chmod 640 "$DESTDIR/etc/shadow" &&
getent shadow "$SSHUSERPASS" | sed -n "s/^$SSHUSERPASS:/root:/p" /etc/shadow >> "$DESTDIR/etc/shadow"
sed -i'' 's|^\(root:.*\):[^:]*$|\1:/bin/sh|' "$DESTDIR/etc/passwd"
fi
|
Fuer Ubuntu Lucid ist Folgendes noch zu beachten (getestet auf 10.04 amd64)!
Im script "/usr/share/initramfs-tools/scripts/init-premount/devpts" muss folgender Eintrag
hinzugefuegt werden damit pts terminals funktionieren nachdem Dropbear installiert wurde (ist ein kleiner bug im Dropbear packet).
| # If /dev/pts is already mounted, don't re-mount it.
mountpoint -q /dev/pts || exit 0
|
Zum Schluss muss das Script wei folgt aussehen:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 | #!/bin/sh
PREREQ="udev"
prereqs() {
echo "$PREREQ"
}
case "$1" in
prereqs)
prereqs
exit 0
;;
esac
. /scripts/functions
grep -E "[[:space:]]+devpts$" /proc/filesystems >/dev/null 2>&1 || exit 0
# If /dev/pts is already mounted, don't re-mount it.
mountpoint -q /dev/pts || exit 0
log_begin_msg "Mounting devpts"
mkdir -p /dev/pts
mount -t devpts none /dev/pts
|
Damit die Aenderungen auch wirksam werden muss noch ein
| update-initramfs -k all -u
|
ausgefuehrt werden. Cheers Happy Chritsmas and happy new year everybody
|
Gerrit507
Anmeldungsdatum: 26. Mai 2014
Beiträge: Zähle...
|
Vielen Dank erstmal für die Scripts. In meinen Augen ist es die beste Möglichkeit die luks boot Partition zu entsperren, da das lokale entsperren aktiviert bleibt. Ich weiß der Thread ist schon relativ alt aber ich versuche gerade das Skript auf ubuntu 14.04 Server zum laufen zu bekommen. Ich kann mich soweit mit mit ssh in der busybox anmelden aber wenn ich den Befehl unlock ausführe bekomme ich nur die Fehlermeldung: Device /dev/md/1 doesn't exist or access denied.
Das zu entsperrende LVM heißt bei mir nicht /dev/md/1 und ich weiß auch nicht wieso der Skript genau diese Partition enstperren will. Gibt es irgendein workaround den Skript auf 14.04 zum Laufen zu bekommen?
|
cuco
Anmeldungsdatum: 6. August 2011
Beiträge: 34
|
Wie genau bist du vorgegangen und welche Version des Skripts genau hast du benutzt? Hier im Thread kursieren ja inzwischen mehrere Versionen. Ich frage deshalb, weil ich vor ca. 2 Wochen wieder mit Hilfe genau dieses Threads einen Server eines Bekannten mit der Möglichkeit "ausgestattet" habe, ihn per SSH entsperren zu können. Dabei läuft 14.04. Also liegt es nicht an 14.04, sondern irgendwo anders an deiner Config. Hast du mal die /etc/crypttab unter die Lupe genommen? Klingt so, als wenn dort /dev/md/1 eingetragen ist.
|
bboyzrulez
Anmeldungsdatum: 23. Dezember 2012
Beiträge: 2
|
bboyzrulez schrieb: Besten Dank an gekmihesg und an alle die beigetragen haben. Ich habe einpaar Aenderungen eingebaut.
Das "ps" Command in der BusyBox akzeptiert keine Optionen.
Die Zeile zum Ermitteln der Pids ist jetzt einfacher geworden.
Es wird ein SIG 9 beim beenden der Prozesse geschickt.
Beim "fix for dropbear in Ubuntu 12.04 x86_64" wird das copieren trotz evtl. vorhandener cp, mv ... aliases ausgefuehrt. 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56 | #!/bin/sh
PREREQ="dropbear"
prereqs() {
echo "$PREREQ"
}
case "$1" in
prereqs)
prereqs
exit 0
;;
esac
. "$CONFDIR/initramfs.conf"
#. /usr/share/initramfs-tools/hook-functions
if [ "$DROPBEAR" != "n" ] && [ -r "/etc/crypttab" ] ; then
# fix for dropbear in Ubuntu 12.04 x86_64
[ -d /lib/x86_64-linux-gnu ] && \cp -a /lib/x86_64-linux-gnu/libnss_* "$DESTDIR/lib/"
mkdir -m 755 -p "$DESTDIR/lib/unlock"
##### /bin/unlock
cat > "${DESTDIR}/bin/unlock" <<EOF
#!/bin/sh
if PATH=/lib/unlock:/bin:/sbin /scripts/local-top/cryptroot ; then
for n in cryptroot "plymouth ask-for-pass" cryptsetup ; do
p=\$(ps | grep "\$n" | awk '!/grep/ {print \$1}')
[ -n "\$p" ] && kill -KILL \$p
done
exit 0
fi
exit 1
EOF
##### EOF /bin/unlock
##### /lib/unlock/plymouth
cat > "$DESTDIR/lib/unlock/plymouth" <<EOF
#!/bin/sh
[ "\$1" == "--ping" ] && exit 1
exec /bin/plymouth "\$@"
EOF
##### EOF /lib/unlock/plymouth
chmod 755 "$DESTDIR/bin/unlock"
chmod 755 "$DESTDIR/lib/unlock/plymouth"
# enable password login
[ -n "$SSHUSERPASS" ] &&
touch "$DESTDIR/etc/shadow" && chmod 640 "$DESTDIR/etc/shadow" &&
getent shadow "$SSHUSERPASS" | sed -n "s/^$SSHUSERPASS:/root:/p" /etc/shadow >> "$DESTDIR/etc/shadow"
sed -i'' 's|^\(root:.*\):[^:]*$|\1:/bin/sh|' "$DESTDIR/etc/passwd"
fi
|
Fuer Ubuntu Lucid ist Folgendes noch zu beachten (getestet auf 10.04 amd64)!
Im script "/usr/share/initramfs-tools/scripts/init-premount/devpts" muss folgender Eintrag
hinzugefuegt werden damit pts terminals funktionieren nachdem Dropbear installiert wurde (ist ein kleiner bug im Dropbear packet).
| # If /dev/pts is already mounted, don't re-mount it.
mountpoint -q /dev/pts || exit 0
|
Zum Schluss muss das Script wei folgt aussehen:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 | #!/bin/sh
PREREQ="udev"
prereqs() {
echo "$PREREQ"
}
case "$1" in
prereqs)
prereqs
exit 0
;;
esac
. /scripts/functions
grep -E "[[:space:]]+devpts$" /proc/filesystems >/dev/null 2>&1 || exit 0
# If /dev/pts is already mounted, don't re-mount it.
mountpoint -q /dev/pts || exit 0
log_begin_msg "Mounting devpts"
mkdir -p /dev/pts
mount -t devpts none /dev/pts
|
Damit die Aenderungen auch wirksam werden muss noch ein
| update-initramfs -k all -u
|
ausgefuehrt werden. Cheers Happy Chritsmas and happy new year everybody
Kleiner Bugfix. Ein unnötiges "-" vor dem EOF im Skript gelöscht.
Cheers
|
Gerrit507
Anmeldungsdatum: 26. Mai 2014
Beiträge: 6
|
cuco schrieb: Wie genau bist du vorgegangen und welche Version des Skripts genau hast du benutzt? Hier im Thread kursieren ja inzwischen mehrere Versionen. Ich frage deshalb, weil ich vor ca. 2 Wochen wieder mit Hilfe genau dieses Threads einen Server eines Bekannten mit der Möglichkeit "ausgestattet" habe, ihn per SSH entsperren zu können. Dabei läuft 14.04. Also liegt es nicht an 14.04, sondern irgendwo anders an deiner Config. Hast du mal die /etc/crypttab unter die Lupe genommen? Klingt so, als wenn dort /dev/md/1 eingetragen ist.
In der /etc/crypttab ist die richtige LVM eingetragen. Benutze die letzte Version.
|
cuco
Anmeldungsdatum: 6. August 2011
Beiträge: 34
|
Gerrit507 schrieb: cuco schrieb: Wie genau bist du vorgegangen und welche Version des Skripts genau hast du benutzt? Hier im Thread kursieren ja inzwischen mehrere Versionen. Ich frage deshalb, weil ich vor ca. 2 Wochen wieder mit Hilfe genau dieses Threads einen Server eines Bekannten mit der Möglichkeit "ausgestattet" habe, ihn per SSH entsperren zu können. Dabei läuft 14.04. Also liegt es nicht an 14.04, sondern irgendwo anders an deiner Config. Hast du mal die /etc/crypttab unter die Lupe genommen? Klingt so, als wenn dort /dev/md/1 eingetragen ist.
In der /etc/crypttab ist die richtige LVM eingetragen. Benutze die letzte Version.
Habe nun gerade wieder einen Server mit 14.04 so eingerichtet, dass er sich per SSH entsperren lässt. Vorgehen:
- openssh-server ist bereits installiert
- mit apt-get den "dropbear" installieren
- das hier im Thread als letztes genannte Script in /etc/initramfs-tools/hooks/ unter dem Namen "unlock" anlegen und mit chmod +x ausführbar machen
- in /etc/initramfs-tools/initramfs.conf die Zeile SSHUSERPASS=Benutzername einfügen und Benutzername durch deinen Benutzernamen ersetzen
- wenn er keine Netzwerkverbindung bekommt: /usr/share/initramfs-tools/scripts/init-premount/dropbear bearbeiten und "configure_networking &" durch "ipconfig eth0 &" ersetzen. Für eth0 natürlich den Namen des Netzwerkinterfaces einsetzen
- alles per "update-initramfs -u -k all" in die Ramdisks übernehmen
- neu starten
- Verbindung mit dem SSH-Clienten aufbauen, Benutzername "root" und das Passwort von dem Benutzer, den man bei SSHUSERPASS eingetragen hat
- "unlock" tippen/ausführen
- Passwort eintippen
- läuft...
|
alex42
Anmeldungsdatum: 6. Juni 2007
Beiträge: 124
|
Hm,bei mir klappt es unter 14.04 leider nicht. Ich habe diese Version des Skripts genutzt: 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56 | #!/bin/sh
PREREQ="dropbear"
prereqs() {
echo "$PREREQ"
}
case "$1" in
prereqs)
prereqs
exit 0
;;
esac
. "$CONFDIR/initramfs.conf"
#. /usr/share/initramfs-tools/hook-functions
if [ "$DROPBEAR" != "n" ] && [ -r "/etc/crypttab" ] ; then
# fix for dropbear in Ubuntu 12.04 x86_64
[ -d /lib/x86_64-linux-gnu ] && \cp -a /lib/x86_64-linux-gnu/libnss_* "$DESTDIR/lib/"
mkdir -m 755 -p "$DESTDIR/lib/unlock"
##### /bin/unlock
cat > "${DESTDIR}/bin/unlock" <<EOF
#!/bin/sh
if PATH=/lib/unlock:/bin:/sbin /scripts/local-top/cryptroot ; then
for n in cryptroot "plymouth ask-for-pass" cryptsetup ; do
p=\$(ps | grep "\$n" | awk '!/grep/ {print \$1}')
[ -n "\$p" ] && kill -KILL \$p
done
exit 0
fi
exit 1
EOF
##### EOF /bin/unlock
##### /lib/unlock/plymouth
cat > "$DESTDIR/lib/unlock/plymouth" <<EOF
#!/bin/sh
[ "\$1" == "--ping" ] && exit 1
exec /bin/plymouth "\$@"
EOF
##### EOF /lib/unlock/plymouth
chmod 755 "$DESTDIR/bin/unlock"
chmod 755 "$DESTDIR/lib/unlock/plymouth"
# enable password login
[ -n "$SSHUSERPASS" ] &&
touch "$DESTDIR/etc/shadow" && chmod 640 "$DESTDIR/etc/shadow" &&
getent shadow "$SSHUSERPASS" | sed -n "s/^$SSHUSERPASS:/root:/p" /etc/shadow >> "$DESTDIR/etc/shadow"
sed -i'' 's|^\(root:.*\):[^:]*$|\1:/bin/sh|' "$DESTDIR/etc/passwd"
fi
|
wenn ich in der Busybox dann das Skript aufrufe, bekomme ich folgende Fehlermeldung: Unlocking the disk /dev/disk/by-uuid/45006904-2da1-4396-b2dc-fb1cd5877013 (vda5_crypt)
Enter passphrase: No key available with this passphrase.
cryptsetup: cryptsetup failed, bad password or options? Die eingegebene Passphrase ist aber ganz sicher korrekt! Hat jemand eine Idee was ich falsch mache?
|
cuco
Anmeldungsdatum: 6. August 2011
Beiträge: 34
|
Lokal klappt das Entsperren mit dem Key aber? Hast du vielleicht Probleme mit Umlauten, Zeichensatzcodierungen (UTF-8 vs. Latin-1 im SSH-Clienten), Sonderzeichen oder dem Tastaturlayout?
|
alex42
Anmeldungsdatum: 6. Juni 2007
Beiträge: 124
|
Super! Das wars (ein Kodierungsproblem). Vielen Dank! PS: Kann man das Problem umgehen, dass der SSH-Client jedesmal blockiert, da der Fingerprint nicht stimmt und man daher erst diesen löschen muss?
|
elektronaut
Anmeldungsdatum: 3. Mai 2005
Beiträge: 59
|
Bei mir klappt es unter 12.04 (im Zentyal Flavour) leider nicht, weder mit dem Skript hier noch mit dem auf http://blog.asiantuntijakaveri.fi/2013/09/ubuntu-server-12043-1210-1304-1310-with.html Der SSH Client endet immer mit einem "Connection refused", nmap sagt mir immerhin, dass der Port offen ist und dort ssh verfügbar ist, aber weiter komme ich nicht. Bin nun leider ratlos, hat noch jemand eine Idee, woran es liegen könnte?
|
Gruentee
Anmeldungsdatum: 7. November 2007
Beiträge: 52
Wohnort: Hass'e nich'eseehn...
|
Hat das schon jemand mit 16.04 getestet?
|