gekmihesg
Anmeldungsdatum: 6. Mai 2009
Beiträge: 106
|
Erstmal alles so einrichten wie hier beschrieben: Verschlüsseltes System via SSH freischalten Wenn man jetzt aber das /usr/share/initramfs-tools/scripts/local-top/cryptroot Skript nicht ändern will, hab ich hier dieses Skript gebastelt:
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 | #!/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
cat > "${DESTDIR}/bin/unlock" <<-EOF
#!/bin/sh
if PATH=/lib/unlock:/bin:/sbin /scripts/local-top/cryptroot
then
/sbin/pkill cryptroot
/sbin/pkill -f "plymouth ask-for-pass"
/sbin/pkill cryptsetup
exit 0
fi
exit 1
EOF
chmod 755 "${DESTDIR}/bin/unlock"
mkdir -p "${DESTDIR}/lib/unlock"
cat > "${DESTDIR}/lib/unlock/plymouth" <<-EOF
#!/bin/sh
[ "\$1" == "--ping" ] && exit 1
/bin/plymouth "\$@"
EOF
chmod 755 "${DESTDIR}/lib/unlock/plymouth"
# Enable password login
if [ -n "$SSHUSERPASS" ]
then
sed -n "s/^${SSHUSERPASS}:/root:/p" /etc/shadow > "${DESTDIR}/etc/shadow"
chmod 640 "${DESTDIR}/etc/shadow"
fi
fi
|
Das fügt man einfach in /usr/share/initramfs-tools/hooks/ ein, dann einmal update-initramfs -u .
Jetzt kann man sich wie im Wiki beschrieben über SSH einloggen und dann aber das System mit dem Befehl unlock freischalten. Wenn man sich zusätzlich mit einem Passwort einloggen will (also nicht mit Schlüsseldatei) hat man die Möglichkeit in der /etc/initramfs-tools/initramfs.conf die Zeile SSHUSERPASS=<Benutzername> einzufügen. Dadurch wird der Login als root mit dem Passwort von <Benutzername> freigeschaltet. Man kann hier natürlich auch den Benutzer root angeben, aber dann muss man ein root-Passwort festlegen und den root-Login Systemweit aktivieren. Das Ganze ist ein ziemlicher Hack, aber bei mir funktionierts. Falls es also jemand testen will, wäre ich über Erfahrungsberichte sehr dankbar!
|
Timmeey
Anmeldungsdatum: 10. November 2007
Beiträge: 77
|
Juhu geil, des funktioniert übrigens auch für 10.10 (bei mir egrade) Jetzt kann man entfernt UND lokal entsperren, ziemlich fett. Allerdings tuts des mit dem Benutzernamen bei mri noch nciht. UND was ich machen musste war nen chmod +X auf [...]/hooks/unlock und dann liefs. Und so ein krasser hack ist das garnicht. Wenn ich des richtig verstanden habe wartet des plymouth doch darauf das enteder ein passwort kommt ODER nen ping oder sowas, und dann umspringt. und genau das machst du doch. ist doch geil
Glückwunsch, und ne dose voller Kekse
|
gekmihesg
(Themenstarter)
Anmeldungsdatum: 6. Mai 2009
Beiträge: 106
|
Naja, ich trickse das cryptroot Skript aus. Das ermittelt mit plymouth --ping ob es plymouth oder askpass für die Passworteingabe verwenden soll. Über die PATH Variable schalte ich ein eigenes Skript zwischen, das für cryptroot plymouth --ping abfängt und immer false zurück gibt. Das cryptroot Skript läuft also zwei mal nachdem man unlock ausführt, einmal lokal mit plymouth und einmal über ssh mit askpass. Das mit dem Benutzernamen weiß ich nicht woran das liegt. In /etc/ sollte die Datei shadow liegen mit einem einzigen Eintrag für root. Das reicht für mein System. Aber du kannst mal versuchen noch diese Zeilen hinzuzufügen: | if [ -n "$SSHUSERPASS" ]
then
grep -m1 "^root:" /etc/passwd > "${DESTDIR}/etc/passwd"
grep -m1 "^root:" /etc/group > "${DESTDIR}/etc/group"
chmod 644 "${DESTDIR}/etc/passwd" "${DESTDIR}/etc/group"
sed -n "s/^${SSHUSERPASS}:/root:/p" /etc/shadow > "${DESTDIR}/etc/shadow"
chmod 640 "${DESTDIR}/etc/shadow"
fi
|
Allerdings hab ich das jetzt nicht getestet. Du solltest vorher überprüfen, ob die Dateien nicht eh schon da sind und noch mehr Einträge drin sind. Nicht das du dir damit was anderes zerschießt. Das mit den Rechten hab ich vergessen. Danke! Achso: Der Login erfolgt über ssh root@<IP> aber mit dem Passwort von <Benutzername> und nicht mit ssh <Benutzername>@<IP>. <Benutzername> muss existieren, da das zugehörige Passwort root zugewiesen wird.
|
Hurga
Anmeldungsdatum: 20. März 2011
Beiträge: 3
|
Funktioniert auch bei mir bestens auf einer 10.10, sowohl mit Key wie mit Passwort. Besten Dank für deine Mühe! Eine Ergänzung noch: ich konnte mich nicht einloggen, bis ich in /usr/share/initramfs-tools/hooks/plymouth die Zeile echo 'root:x:0:0:root:/root:/bin/bash' >${DESTDIR}/etc/passwd in echo 'root:x:0:0:root:/root:/bin/sh' >${DESTDIR}/etc/passwd geändert hatte - plymouth überschreibt hier die passwd-Zeile vom dropbear-Skript, und bash ist eine unbekannte shell für dropbear, woraufhin der Login verweigert wird. Dieser Fix ist aber wohl in Natty schon drin.
|
cuco
Anmeldungsdatum: 6. August 2011
Beiträge: Zähle...
|
Moin Auf 10.04 funktioniert das einwandfrei. Auf 11.04 auch. Auf 11.10 kann man (ich) es nicht testen, da die Systemverschlüsselung dort nicht funktioniert. Unter 12.04 funktioniert es (zumindest jetzt in den Testversionen) nicht mehr. Dort kommt die Fehlermeldung /bin/unlock: line 8: /sbin/pkill: not found Wenn man dann danach versucht vor Ort zu entschlüsseln, wird gemeldet, dass das Device schon exisitert. Also funktioniert da noch "irgendwas" aber nicht mehr alles ^^
|
Hurga
Anmeldungsdatum: 20. März 2011
Beiträge: 3
|
cuco schrieb:
Auf 10.04 funktioniert das einwandfrei. Auf 11.04 auch. Auf 11.10 kann man (ich) es nicht testen,
da die Systemverschlüsselung dort nicht funktioniert.
Ich benutze derzeit die 11.10 mit Verschlüsselung und da tut es problemlos.
|
lalelooo
Anmeldungsdatum: 30. Januar 2012
Beiträge: 5
|
edit:
-hat sich erledigt- danke für das script 😀
|
Hurga
Anmeldungsdatum: 20. März 2011
Beiträge: 3
|
lalelooo schrieb:
habe das script kopiert und unter namen "unlock" gespeichert im ordner /usr/share/initramfs-tools/hooks/ gespeichert
dann "chmod +x unlock" und "update-initramfs -u" muss ich sonst noch irgendwas machen ?
Das sollte es eigentlich gewesen sein...
wenn ich "unlock" eingebe erhalte ich "-sh: unlock: not found"
Hmm, seltsam. "unlock" ist richtig... pack mal deine initrd aus (also die neu erzeugte) und schau nach, wo das abgeblieben ist.
mkdir /tmp/initrd
cd /tmp/initrd
zcat /boot/initrd.img-<version> | cpio -i
find . -name 'unlock' Das gefundene ./bin/unlock sollte ausführbar sein und folgendermaßen aussehen:
ls -l ./bin/unlock
-rwxr-xr-x 1 root root 176 2012-01-31 00:05 ./bin/unlock
cat ./bin/unlock
#!/bin/sh
if PATH=/lib/unlock:/bin:/sbin /scripts/local-top/cryptroot
then
/sbin/pkill cryptroot
/sbin/pkill -f "plymouth ask-for-pass"
/sbin/pkill cryptsetup
exit 0
fi
exit 1
|
lalelooo
Anmeldungsdatum: 30. Januar 2012
Beiträge: 5
|
thx für deine antwort
war leider nur doof und hab n leeres unlock script gespeichert
geht mir schon seit tage so das ich stunden wegen solchem schwachsinn verlier 😀 eine frage hätt ich noch von der anleitung hab ich folgendes nie hingebracht (habs dann mit usbstick gemacht) scp user@server:/etc/initramfs-tools/root/.ssh/id_rsa ~/
war immer permission denied obwohl ich die richtigen passes eingegeben hab und sicherheitshalber gleich noch sudo mit dazu...
|
Tabea
Anmeldungsdatum: 31. März 2007
Beiträge: 659
|
Hallo, ich möchte auf mein verschlüsseltes Lubuntu 11.10 auch per Tastatur freischalten können. Meine Vorgehensweise bisher war: - Das Skript aus dem ersten Post /usr/share/initramfs-tools/hooks/unlock erstellt - chmod +x unlock - update-initramfs -u Nach einem Neustart konnte ich zwar wieder schön per ssh alles freischalten, aber auf die Tastatureingabe des Passworts reagiert das System nicht. Hab ich was vergessen?
|
Tabea
Anmeldungsdatum: 31. März 2007
Beiträge: 659
|
|
cuco
Anmeldungsdatum: 6. August 2011
Beiträge: 34
|
Gerade nochmal wieder unter Ubuntu 12.04 getestet. Es geht nicht. In der Busybox scheint der Befehl "pkill" zu fehlen. Kann man den irgendwie "nachrüsten" oder durch was anderes ersetzen?
|
servern00b
Anmeldungsdatum: 30. März 2012
Beiträge: 1
|
Hi susammen, bin grade dabei, das für Ubuntu Server 12.04 einzurichten. Wie cuco bermerkt hat, wurde busybox für die neue Version wohl ohne den Befehl pkill kompiliert. Der lässt sich aber ersetzen durch: | kill `ps | grep cryptroot | grep -v "grep" | awk '{print $i}'`
|
sieht schlimm aus, ist aber nix anderes als pkill auch macht. Übrigens genügt es, den cryptroot-Prozess zu killen, plymouth und cryptsetup gehen dann wohl mit hops. Also muss das Script aus dem Eingangspost für 12.04 wie folgt angepasst werden: 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 | #!/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
cat > "${DESTDIR}/bin/unlock" <<-EOF
#!/bin/sh
if PATH=/lib/unlock:/bin:/sbin /scripts/local-top/cryptroot
then
kill \`ps | grep cryptroot | grep -v "grep" | awk '{print \$i}'\`
exit 0
fi
exit 1
EOF
chmod 755 "${DESTDIR}/bin/unlock"
mkdir -p "${DESTDIR}/lib/unlock"
cat > "${DESTDIR}/lib/unlock/plymouth" <<-EOF
#!/bin/sh
[ "\$1" == "--ping" ] && exit 1
/bin/plymouth "\$@"
EOF
chmod 755 "${DESTDIR}/lib/unlock/plymouth"
# Enable password login
if [ -n "$SSHUSERPASS" ]
then
sed -n "s/^${SSHUSERPASS}:/root:/p" /etc/shadow > "${DESTDIR}/etc/shadow"
chmod 640 "${DESTDIR}/etc/shadow"
fi
fi
|
(die Änderungen sind in Zeile 24, wo die drei pkill's durch obigen Befehl ersetzt wurden). Man beachte die Backslashes. Diese müssen rein, da dieses Script selbst wieder ein Script erzeugt. Wenn man die Backticks nicht escaped, wird der Befehl ausgeführt, statt in das Script geschrieben. Die Backticks (misbrauchte französische accents, KEINE einfachen Anführungszeichen!) findet man normalerweise neben der Taste mit ? und \ drauf. Mit dieser Anpassung kann man das root-Dateisystem jetzt sowohl lokal als auch über SSH (mit "unlock") freischalten. Dabei muss man auch über SSH einfach das Passwort eingeben, das auch nicht angezeigt wird.
Ich hoffe, das hilft jemandem.
|
cuco
Anmeldungsdatum: 6. August 2011
Beiträge: 34
|
Ich bekomme zwar folgende Ausgabe: login as: root
root@xxx.ath.cx's password:
BusyBox v1.18.5 (Ubuntu 1:1.18.5-1ubuntu3) built-in shell (ash)
Enter 'help' for a list of built-in commands.
# unlock
Unlocking the disk /dev/disk/by-uuid/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx (sda5_crypt)
Enter passphrase:
Reading all physical volumes. This may take a while...
Found volume group "xxx" using metadata type lvm2
2 logical volume(s) in volume group "xxx" now active
cryptsetup: sda5_crypt set up successfully
kill: invalid number 'root'
kill: can't kill pid 4588: No such process
kill: invalid number 'S'
kill: invalid number '/bin/sh'
kill: invalid number '/scripts/local-top/cryptroot'
# Aber dann scheint er zu booten!! Es läuft auf jeden Fall! Danke ☺
|
gekmihesg
(Themenstarter)
Anmeldungsdatum: 6. Mai 2009
Beiträge: 106
|
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
|