Luks in Freetz - ab Trunk #1975

Patches für die übrigen Kernel sind im Anhang - sehr "generic".
Der 7270 Kernel wich von den anderen ab, er hatte "CONFIG_CRYPTO_AES=y" gesetzt. Alle anderen hatten CONFIG_CRYPTO_AES nicht gesetzt Ich habs im Patch (wie alle anderen auch) auf "m" gesetzt. Aber vielleicht hatte es ja einen besonderen Grund
PS: Cool, dass es schon im svn ist!
 
Zuletzt bearbeitet:
Seh ich das richtig, dass man für cryptsetup den Kernel tauschen muss, weil sonst die Crypto-API nicht drin ist?

MfG Oliver
 
Äh, ja. Die Abhängigkeit sollte auch noch eingecheckt werden
 
Bin gerade über Folgendes gestolpert:
Code:
wget -nd --passive-ftp -P dl http://rpm5.org/files/popt/popt-1.13.tar.gz/popt-1.13.tar.gz
--11:45:08--  http://rpm5.org/files/popt/popt-1.13.tar.gz/popt-1.13.tar.gz
           => `dl/popt-1.13.tar.gz'
Auflösen des Hostnamen »rpm5.org«.... 194.97.152.138
Verbindungsaufbau zu rpm5.org|194.97.152.138|:80... verbunden.
HTTP Anforderung gesendet, warte auf Antwort... 404 Not Found
11:45:09 FEHLER 404: Not Found.

Die richtige Download-URL lautet:
Code:
http://rpm5.org/files/popt/popt-1.13.tar.gz

Hier noch ein Problem, für das ich keine Lösung gefunden habe ("frische" Rev. 1976):
Code:
pager.c:42: error: conflicting types for 'getenv'
/home/guenter/freetz/freetz-trunk/toolchain/build/gcc-4.2.1-uClibc-0.9.28/mipsel-linux-uclibc/bin/../lib/gcc/mipsel-linux-uclibc/4.2.1/../../../../mipsel-linux-uclibc/sys-include/stdlib.h:531: error: previous declaration of 'getenv' was here
make[3]: *** [pager.o] Fehler 1
Gruß,
alpha1974
 
Zuletzt bearbeitet:
Zu welchem Paket gehört das denn? Kannst du bitte auch noch den Compiler-Aufruf posten?

MfG Oliver
 
Die URL hatte ich in Post #22 auch schon bemerkt. Ist ab #1977 gefixt
 
Der Fehler aus Post #44 betraf e2fsprogs.
Ein "make e2fsprogs-dirclean" hat das Problem beseitigt (was mich einigermaßen verwundert, da ich die aktuelle Rev. ausgecheckt hatte und außer make menuconfig und make nichts gemacht hatte).

Leider meckert make nun bei cryptsetup:

EDIT: Die Ursache lag darin, dass GnuPG crypto library nicht ausgewählt war; wenn man sie händisch im menuconfig mit kompiliert, läuft es durch. Sollte vielleicht als Abhängigkeit mit eingecheckt werden.
Code:
Making all in lib
make[3]: Entering directory `/home/guenter/freetz/freetz-trunk/source/cryptsetup-1.0.5/lib'
if /bin/sh ../libtool --tag=CC --mode=compile /home/guenter/freetz/freetz-trunk/toolchain/target/bin/mipsel-linux-uclibc-gcc -DHAVE_CONFIG_H -I. -I. -I.. -I.. -I../luks -DDATADIR=\""/usr/share"\" -DLIBDIR=\""/usr/lib"\" -DPREFIX=\""/usr"\" -DSYSCONFDIR=\""/etc"\" -DVERSION=\""1.0.5"\" -D_GNU_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -DBUILTIN_LIBDEVMAPPER -DBUILTIN_GCRYPT    -Os -pipe -march=4kc -Wa,--trap -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -MT gcrypt.lo -MD -MP -MF ".deps/gcrypt.Tpo" -c -o gcrypt.lo gcrypt.c; \
	then mv -f ".deps/gcrypt.Tpo" ".deps/gcrypt.Plo"; else rm -f ".deps/gcrypt.Tpo"; exit 1; fi
 /home/guenter/freetz/freetz-trunk/toolchain/target/bin/mipsel-linux-uclibc-gcc -DHAVE_CONFIG_H -I. -I. -I.. -I.. -I../luks -DDATADIR=\"/usr/share\" -DLIBDIR=\"/usr/lib\" -DPREFIX=\"/usr\" -DSYSCONFDIR=\"/etc\" -DVERSION=\"1.0.5\" -D_GNU_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -DBUILTIN_LIBDEVMAPPER -DBUILTIN_GCRYPT -Os -pipe -march=4kc -Wa,--trap -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -MT gcrypt.lo -MD -MP -MF .deps/gcrypt.Tpo -c gcrypt.c  -fPIC -DPIC -o .libs/gcrypt.o
gcrypt.c:4:20: error: gcrypt.h: No such file or directory
gcrypt.c: In function 'gcrypt_hash':
gcrypt.c:15: error: 'gcry_md_hd_t' undeclared (first use in this function)
gcrypt.c:15: error: (Each undeclared identifier is reported only once
gcrypt.c:15: error: for each function it appears in.)
gcrypt.c:15: error: expected ';' before 'md'
gcrypt.c:20: error: 'md' undeclared (first use in this function)
gcrypt.c:32: warning: passing argument 2 of 'memcpy' makes pointer from integer without a cast
gcrypt.c: In function 'gcrypt_get_hashes':
gcrypt.c:50: error: 'gcry_error_t' undeclared (first use in this function)
gcrypt.c:50: error: expected ';' before 'r'
gcrypt.c:59: error: 'r' undeclared (first use in this function)
gcrypt.c:79: warning: passing argument 1 of 'strdup' makes pointer from integer without a cast
make[3]: *** [gcrypt.lo] Fehler 1
make[3]: Leaving directory `/home/guenter/freetz/freetz-trunk/source/cryptsetup-1.0.5/lib'
make[2]: *** [all-recursive] Fehler 1
make[2]: Leaving directory `/home/guenter/freetz/freetz-trunk/source/cryptsetup-1.0.5'
make[1]: *** [all] Fehler 2
make[1]: Leaving directory `/home/guenter/freetz/freetz-trunk/source/cryptsetup-1.0.5'
make: *** [source/cryptsetup-1.0.5/src/cryptsetup] Fehler 2
 
Zuletzt bearbeitet:
@alpha1974: hab die Abhängigkeit eingecheckt.
 
Kann mir jemand sagen warum man cryptsetup gegen libgcrypt linken kann? Ansonsten schmeiß ich die Abhängigkeit wieder raus.

MfG Oliver
 
Lt. manpage für cryptsetup wird libgcrypt für's password hashing benötigt, wenn man die create-Option direkt verwendet (mit Luks wird die Option -h ignoriert).
 
Danke für die Erklärung. Aber wirklich weiter bringt mich das jetzt trotzdem nicht. Wie wird das Passwort denn ohne libgcrypt gehasht?

MfG Oliver
 
Ich habe es so verstanden, dass cryptsetup mit LUKS nur SHA1 verwendet, während man mit cryptsetup --create --hash (also ohne LUKS) alle Hash-Verfahren der libgcrypt verwenden kann (dann aber offenbar ohne die Vorteile der LUKS Extensions).
 
Hoi,

da ich grundsätzlich faul bin, hab ich ein skript geschrieben, das für mich die lästige mount/umount Arbeit (inklusive mountpoint erstellen und berechtigungen) im zusammenhang mit cryptsetup erledigt. Den code hab ich in meine debug.cfg eingetragen, weil mir keine andere, weniger aufwändige Methode bekannt ist, skripts dauerhaft auf die FB zu bekommen. Ich denke mal das Skript erkärt sich von selbst.
Einfach nach nem reboot mount_crypt auf der FB eingeben, passphrase eintippen und fertig ;)

Hat jemand ne Ahnung, wie sauber die FB bei einem reboot die devices unmounted? Falls das sauber gemacht wird, stellt es ein Problem dar, wenn cryptsetup luksClose ?? nicht ausgeführt wird? Es geht mir darum, ob ich mir nen Kopf machen muss das ganze eventuell in ein init-skript zu integrieren.

Code:
user=username
mountpoint=/var/media/ftp/disk
device=/dev/sda2
luksdevice=media

echo "#!/bin/sh

cat /proc/bus/usb/devices | grep usb-storage >/dev/null
if test $? -ne 0; then
        echo No USB-Disk attached!
        exit 1
fi


if [ ! -e $mountpoint ]; then
        mkdir $mountpoint
        chown $user:$user $mountpoint
fi


if [ -e /dev/mapper/$luksdevice ]; then
        grep /dev/mapper/$luksdevice /proc/mounts >/dev/null
        if test $? -eq 0; then
                /etc/init.d/rc.knfsd stop
                umount /dev/mapper/$luksdevice && /usr/bin/cryptsetup luksClose $luksdevice
                /etc/init.d/rc.samba restart smbd
                echo Unmounted and closed
        fi
else
        /usr/bin/cryptsetup luksOpen $device $luksdevice && mount /dev/mapper/$luksdevice $mountpoint
        /etc/init.d/rc.knfsd stop
        /etc/init.d/rc.samba restart smbd
        /etc/init.d/rc.knfsd start
fi" >/mod/usr/bin/mount_crypt
chmod +x /mod/usr/bin/mount_crypt
if [ ! -f /mod/usr/bin/umount_crypt ]; then
        ln -s /mod/usr/bin/mount_crypt /mod/usr/bin/umount_crypt
fi


Grüße
ratz
 
Zuletzt bearbeitet:
Hallo,
ein paar Verbesserungsverschläge:
-den Befehl zum unmounten könntest du in die autoend.sh auf einer Partition des USB Gerätes eintragen,
-bei dmesg sollten nur die letzten Zeilen beachtet werden (falls mehfach/mehrere gemountet werden
-eigene Benutzer kannst du (einmalig) mit adduser - modusers - modsave anlegen
-samba kannst du zum neuenlesen der Freigeben mit "/etc/init.d/rc.samba restart smbd" bewegen
 
Hallo,
ein paar Verbesserungsverschläge:
-den Befehl zum unmounten könntest du in die autoend.sh auf einer Partition des USB Gerätes eintragen,
Funktioniert das auch, wenn ich auf der Platte keine Partition hab, die von der Box automatisch gemounted wird? Ich hab keine Infos bezüglich autorun.sh/autoend.sh gefunden. Wie arbeiten die skripten?
-bei dmesg sollten nur die letzten Zeilen beachtet werden (falls mehfach/mehrere gemountet werden
Das greppen hat mit dem mounten gar nichts zu tun. Es dient lediglich als rudimentäres Prüfen, ob die Platte angeschlossen ist. (liefert in meinem Fall die Zeile sda: sda1 sda2 wenn die Platte dran ist)
-eigene Benutzer kannst du (einmalig) mit adduser - modusers - modsave anlegen
Das hab ich so auch gemacht, aber leider "vergisst" meine FB mich nach jedem reboot. :mad: Ich hab irgendwo gelesen, dass da AVM an der /etc/passwd (und shadow) noch was schraubt. Das geschieht meiner Beobachtung nach noch nach dem abarbeiten der debug.cfg. Ich hatte die beiden "cat"-Zeilen nämlich auch schon testweise da drin, was aber nicht den gewünschten Erfolg gebracht hat :(
-samba kannst du zum neuenlesen der Freigeben mit "/etc/init.d/rc.samba restart smbd" bewegen
Das umständliche "händische" stoppen und starten rührt von dem Verhalten des rc Skripts vom knfsd-Addon. Ein /etc/init.d/rc.knfsd restart bricht ab, wenn der knfsd nicht lief. Dass da samba etwas schlauer ist hab ich nicht überprüft, sondern bin gleich auf Nummer sicher gegangen :)
Ich hab den start und stop Befehlen für samba das smbd angehängt, damit der nmbd nicht unnötigerweise neu gestartet wird. Die Zweiteilung lass ich, weil es in meinen Augen sauberer ist (siehe knfsd).
Andererseits könnte man argumentieren, dass der Dienst der vorher nicht gestartet war hinterher auch nicht gestartet sein sollte...
Ich denke aber, dass es so schon mehr Sinn macht, weil ich z.B. den knfsd nicht automatisch starten lasse. Der exportiert nur den Inhalt meines verschlüsselten Dateisystems und ist somit ohne mein Zutun eh nutzlos.
 
Wenn autorun/end im root einer automatisch gemounteten Partition gefunden wird, wird es ausgeführt. Ähnlich der autorun.inf bei CDs in Windows. autoend.sh wird zB ausgeführt, wenn man im avm webif den Stick "trennt"

Code:
Das greppen hat mit dem mounten gar nichts zu tun. Es dient lediglich als rudimentäres Prüfen, ob die Platte angeschlossen ist. (liefert in meinem Fall die Zeile sda: sda1 sda2 wenn die Platte dran ist)
Schon klar, aber die Meldung kann weiter oben schonmal angezeigt worden sein!

Die Userverwaltung wurde gefixt: Ticket 61 (Trunk #1952). Speichern musst du aber schon mit den 2 Befehlen selbst, nachdem du einen Benutzer angelegt hast.

Samba: Falls Samba nicht läuft, wird fürs Beenden ein Fehler _angezeigt_ und danach gestartet. Falls samba nur restartet werden soll falls es läuft kannst du das AVM Skript "/etc/samba_control" aufrufen (nur auf USB-Host Boxen)
 
Ok also bringen die auto-skripte in meinem Fall nichts. sda1 ist swap und sda2 verschlüsselt. Ausserdem hab ich die automounter für die Filesysteme nicht in der Firmware.

Ich hab das Skript in Bezug auf das greppen angepasst. Ich greppe jetzt, ob in /proc/bus/usb/devices eine Zeile mit usb-storage gefunden wird. Das Sichert, dass eine Platte oder ein Stick angesteckt ist. Wer sicher gehen will, dass ein bestimmtes Gerät dran hängt kann hier ja nach dem Hersteller suchen.

Den Teil mit passwd/shadow hab ich wieder entfernt. Hatte es wohl seit dem Fix nicht mehr richtig probiert.

Samba:
da "/etc/samba_control" (neben anderen Sachen) auch nur "/etc/init.d/rc.samba restart smbd" ausführt, lass ich das mal so drin. Dass rc.samba restart anzeigt, wenn Samba nicht lief und dann samba startet hab ich schon gesehen. Ich habs zwar geändert, dennoch ist es sauberer (im Sinne von sicherer), wenn man sich nicht darauf verlässt, dass das skript auch das tut, was es tun soll bzw. sich so verhält wie sich solche skripten verhalten sollten. Klar sollte es so sein, dass ein restart auch einen start zur Folge hat, selbst wenn der Dienst vorher nicht lief, dass das aber nicht immer der Fall sein muss, zeigt das skript vom knfsd.
 
Fast perfekt. Oben im Skript hast du aber "smbd restart" vertauscht :doktor:
 
Hallo,

eine freudige nachricht an alle 7270 besitzer, die luks verwenden wollen. ich hab es zum laufen gebracht!!
nach einigen erfolglosen versuchen war ich gerade dabei hier die straces von insmod crypto_algapi.ko und den von cryptsetup luksOpen /dev/bla blubb zu posten. cryptsetup meldet nämlich trotz aller geladenen module
Code:
Failed to setup dm-crypt key mapping.
Check kernel for support for the aes-cbc-essiv:sha256 cipher spec and verify that /dev/sda2 contains at least 258 sectors.
Failed to read from key storage
Command failed: No key available with this passphrase.
daher lag meine vermutung, dass crypto_algapi zum zugriff auf die anderen module benötigt wird. als ich aber mit md5sum überprüfen wollte, ob die module auf meiner box auch denen entsprechen, die ich auf dem rechner hab, bin ich über den inhalt von freetz-trunk/kernel/modules-8mb_26-7270/lib/modules/2.6.19.2/kernel/crypto
gestolpert und hab gesehen, dass da mehr module drin sind, als auf meiner box. also rüber kopiert, alle (erfolgreich) geladen und siehe da es geht!!!

meine bitte also an die entwickler: abhängigkeit zu replace_kernel für die 7270 bei cryptsetup entfernen und dafür sorgen, dass die module aus oben genanntem verzeichnis auch auf der box landen (es geht konkret um cbc.ko und blkcipher.ko EDIT: cryptmgr.ko wird auch noch gebraucht)
 
Zuletzt bearbeitet:
Die Module werden gebaut, aber sind im menuconfig nicht auswählbar und kommen deswegen auch nicht ins Image?
Dann schreib ich das mal auf meine TODO-Liste.

MfG Oliver
 
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.