[erledigt] 86er-Trunk-Firmware und passwortgeschützte Samba-Freigaben

SaschaBr

Aktives Mitglied
Mitglied seit
1 Mai 2007
Beiträge
2,350
Punkte für Reaktionen
32
Punkte
48
Seit Gestern nun habe ich eine Freetz-Firmware auf Basis der 86er-Firmware auf meiner Box am rennen. Die Firmware läuft stabil, und mit etwas höherem Sync. Soviel dazu.

Nun hatte ich aber Schwierigkeiten, mit den Samba-Freigaben:
Zugriff auf die Freigabe ohne Passwort (also Guest OK) funktionierte wie je zuvor. Nur auf die Freigaben, die ein Passwort verlangen, war kein draufkommen mehr, weder mit XP noch Win7 war etwas zu machen.
Ich habe dann Versucht (wie es schon mal während der Preview-Phase funktionierte) mit "boxusr80" etwas zu tricksen, hatte aber auch hierbei keinen Erfolg, egal was ich tat.
Nun ist mir heute Morgen dann mal aufgefallen, dass die smbpasswd leer ist, also keinen User mehr enthält. Ich habe mir dann über den Umweg smbpasswd.cleartext dort dann den "ftpuser" wieder reingehämmert, und schlagartig hatte ich wieder Zugriff auf meine Passwortgeschützten Freigaben.
Hilfestellung dafür hatte ich durch die Anleitung von hier.

Ich habe diese Anleitung dann auf das für mich Nötigste reduziert, und dachte grade, das könnte auch hier jemandem helfen.

EDIT:
Seit der Änderung im Trunk (Changeset 5885), ist es nun nicht mehr notwendig, den ftpuser über den genannten Umweg anzulegen, dies kann jetzt ganz bequem über das Freetz-WebIF erledigt werden.
 

Anhänge

  • config.txt
    3.9 KB · Aufrufe: 42
  • smbpasswd generieren.txt
    693 Bytes · Aufrufe: 71
Zuletzt bearbeitet:
AVM hat das Format der cleartext-Datei geändert. Deshalb funktioniert der Generator jetzt nicht mehr.
Code:
# cat /var/tmp/smbpasswd.cleartext
boxusr80|1080|test|[UX         ]:LCT-00000001:
Vorher waren die "|" auch ":".
Könnte vielleicht jemand mit C-Kenntnissen den Anhang so anpassen, dass er in beiden Fällen funktioniert?

MfG Oliver
 

Anhänge

  • avm_smbpasswd.c.txt
    5.3 KB · Aufrufe: 23
Ich habe das über die smbpasswd.cleartext aber auch mit Doppelpunkten gemacht! Und das hat (zumindest manuell) funktioniert:
Code:
ftpuser:1000:D9XXXXXXXXXXXXXXXXXXXXXXXXX1F:[UX         ]:LCT-00000001:

Vieleicht sollte man in der Samba-Konfiguration des Freetz-WebIf eine Möglichkeit schaffen, ein Passwort für den Freetz-Samba anzulegen (zumindest für den "ftpuser"), falls der nicht von AVM angelegt wurde.

P.S.: Samba- und FTP-Freigaben über das AVM-WebIF habe ich komplett deaktiviert, vieleicht war/ ist ja deshalb meine smbpasswd komplett leer (gewesen)?
 
Zuletzt bearbeitet:
Ist sicher, dass jeweils nur eines der Zeichen drin ist? Dann könnte gehen:
Code:
[...snipp...]
    unsigned nusers = 0;
    while(line == fgets(line, sizeof(line)-1, fp_in)) {
        char *username, *passwd, *extra;
        unsigned uid;
        uchar new_lanman_p16[LM_HASH_LEN];
        uchar new_nt_p16[NT_HASH_LEN];
        char ascii_p16[32+1];
        char *p;
        [B]char delimkey[] = ":|";[/B]
            
        line[sizeof(line)-1] = '\0';
        if (strlen(line)) {
            p = &line[strlen(line)-1];
            while(p >= line) {
                if (*p != '\n' && *p != '\r') break;
                *p = '\0';
                p--;
            }
        }

        p = line;
        char *p2 = [B]strpbrk[/B](p, [B]delimkey[/B]);
        if (!p2) goto err;
        *p2 = 0;
        username = p;

        p = p2 + 1;
        p2 = [B]strpbrk[/B](p, [B]delimkey[/B]);
        if (!p2) goto err;
        *p2 = 0;
        uid = atoi(p);

        p = p2 + 1;
        p2 = [B]strpbrk[/B](p, [B]delimkey[/B]);
        if (!p2) goto err;
        *p2 = 0;
        passwd = p;

        extra = p2 + 1;

        crypt_password(username, passwd, new_lanman_p16, new_nt_p16);
[...snipp...]

Jörg
 
Könnte vielleicht jemand mit C-Kenntnissen den Anhang so anpassen, dass er in beiden Fällen funktioniert?
Code:
# cat /var/tmp/smbpasswd.cleartext
boxusr80|1080|test|[UX         ]:LCT-00000001:
# cat /mod/etc/smbpasswd
boxusr80:1080:01FC5A6BE7BC6929AAD3B435B51404EE:0CB6948805F797BF2A82807973B89537:[UX         ]:LCT-00000001:

Mit diesem Patch funktioniert das Programm nicht nur mit ':' und '|', es ist auch noch ca. 30 Bytes kleiner.

Code:
--- /tmp/avm_smbpasswd.c        2010-09-27 17:58:12.000000000 +0200
+++ source/target-mipsel_uClibc-0.9.29/samba-3.0.37/source/utils/avm_smbpasswd.c        2010-09-27 18:22:44.000000000 +0200
@@ -89,8 +89,9 @@
                for (i = 0; i < 16; i++)
                        slprintf(&p[i*2], 3, "%02X", pwd[i]);
        } else {
-               strncpy(p, "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", 32);
+               memset (p, 'X', 32);
        }
+       p[32] = '\0';
 }

 static void crypt_password (const char *user_name,
@@ -154,52 +155,37 @@
                unsigned uid;
                uchar new_lanman_p16[LM_HASH_LEN];
                uchar new_nt_p16[NT_HASH_LEN];
-               char ascii_p16[32+1];
+               char ascii_lanman[32+1];
+               char ascii_nt[32+1];
                char *p;

                line[sizeof(line)-1] = '\0';
-               if (strlen(line)) {
-                       p = &line[strlen(line)-1];
-                       while(p >= line) {
-                               if (*p != '\n' && *p != '\r') break;
-                               *p = '\0';
-                               p--;
-                       }
+               p = strchr (line, '\0');
+               while (p >= line && (*p == '\n' || *p == '\r')) {
+                       *p = '\0';
+                       p--;
                }

-               p = line;
-               char *p2 = strchr(p, ':');
-               if (!p2) goto err;
-               *p2 = 0;
+               p = strtok (line, ":|");
+               if (!p) goto err;
                username = p;

-               p = p2 + 1;
-               p2 = strchr(p, ':');
-               if (!p2) goto err;
-               *p2 = 0;
+               p = strtok (NULL, ":|");
+               if (!p) goto err;
                uid = atoi(p);

-               p = p2 + 1;
-               p2 = strchr(p, ':');
-               if (!p2) goto err;
-               *p2 = 0;
+               p = strtok (NULL, ":|");
+               if (!p) goto err;
                passwd = p;

-               extra = p2 + 1;
+               p = strtok (NULL, "\n");
+               extra = p ? p : "";

                crypt_password(username, passwd, new_lanman_p16, new_nt_p16);
+               my_pdb_sethexpwd(ascii_lanman, new_lanman_p16);
+               my_pdb_sethexpwd(ascii_nt, new_nt_p16);

-               fprintf(fp, "%s:%u:", username, uid);
-
-               my_pdb_sethexpwd(ascii_p16, new_lanman_p16);
-               ascii_p16[32] = '\0';
-               fprintf(fp, "%s:", ascii_p16);
-
-               my_pdb_sethexpwd(ascii_p16, new_nt_p16);
-               ascii_p16[32] = '\0';
-               fprintf(fp, "%s:", ascii_p16);
-
-               fprintf(fp, "%s\n", extra);
+               fprintf(fp, "%s:%u:%s:%s:%s\n", username, uid, ascii_lanman, ascii_nt, extra);

                nusers++;
        } // while
 
Würde es in unserem Fall Sinn machen, wenn wir statt den User aus der Cleartext Datei auszulesen immer ftpuser in die smbpasswd schreiben?
Der boxusr80 wird ja über die users.map wieder auf ftpuser gemappt. Welchen Sinn macht das eigentlich?
Und mehr als der eine User wird durch das Verfahren auch nicht geschrieben.

MfG Oliver
 
Ich denke, daß AVM Vorbereitungen für die Verwaltung von mehreren Benutzern auf der Box macht.

Und bist Du sicher, daß boxusr80 auf ftpuser gemappt wird und nicht vielleicht umgekehrt? Weil wenn boxusr80 auf ftpuser umgesetzt wird, sollte er nach einem Paßwort von ftpuser suchen, und das gibt es hier ja nicht.
 
Im Passwort Dialog gibst du ftpuser ein und er sucht das Passwort für ftpuser und findet keins. Deshalb geht es momentan nicht.
Die AVM Variante macht irgendwas mit einer users.map. So dass bei Eingabe von ftpuser im Passwort Dialog das Passwort von boxusr80 aus der smbpasswd genommen wird.

MfG Oliver

edit:
Code:
root@fritz:/usr/www/all/storage# cat /var/users.map
boxusr80 = "ftpuser"
root@fritz:/usr/www/all/storage# cat /var/users.acl
user "ftpuser" id 80
 dir "/"
  access read write
 
Die Zeile
boxusr80 = "ftpuser"
bedeutet, daß der interne User boxusr80 verwendet wird, wenn sich jemand mit "ftpuser" anmeldet. Man kann auch mehrere Namen nach dem Gleichheitszeichen angeben:
boxusr80 = "ftpuser" user1 user2 ...

Wird die Datei users.acl irgendwo in der smb.conf erwähnt?
 
Code:
[global]
server string = FRITZ!Box
syslog = 0
username map = /var/users.map
encrypt passwords = true
passdb backend = smbpasswd
obey pam restrictions = yes
socket options = TCP_NODELAY
unix charset = ISO-8859-1
max stat cache size = 64
mangled names = no
security = user
guest account = boxusr80
[FRITZ.NAS]
 path = /var/media/ftp
 read only = no
 username = boxusr80
 create mask = 0777
 force create mode = 0777
 directory mask = 0777
 force directory mode = 0777
Für Freetz wäre es einfacher, wenn weiterhin der Benutzer ftpuser benutzt werden könnte. Sonst müssen wir Fallunterscheidungen einbauen...

MfG Oliver
 
Für Samba sollten durch die users.map sowohl boxusr80 als auch ftpuser intern als boxusr80 ankommen.
Wo bräuchten wir denn die Fallunterscheidung?
 
Wir schreiben die smb.conf ja selbst. Derzeit mit dem guest ftpuser und nicht wie AVM boxusr80. Und wir wollen, dass man als User ftpuser eingeben soll!?

Wir können ja aber nicht einfach für alle das Mapping von AVM übernehmen, weil in den alten smbpasswd Dateien ja noch ftpuser drinsteht.

Irgendwie müssen wir das aber unter einen Hut bekommen.

MfG Oliver
 
Der ftpuser ist doch auch eine Erfindung von AVM und nicht von uns. Warum sollen wir die Änderung von AVM dann nicht auch übernehmen?
Mit dem vorhandenen Mapping sollten beim Samba beide Namen gleich funktionieren. Beim FTP-Server allerdings nicht.
 
Der FTP-Server liest nicht aus der smbpasswd, deshalb sollte der von der Änderung erstmal nicht betroffen sein. Das Passwort für den ftpuser wird schon seit langem nicht korrekt (bzw. gar nicht) von Freetz in /etc/passwd gesetzt, wie es eigentlich sein müsste. Da muss der Benutzer zur Zeit selbst eingreifen.
Und derzeit funktioniert der Samba-Zugriff über den Freetz-Samba nicht mit ftpuser. Was müssen wir ändern, dass der Zugriff über ftpuser funktioniert, obwohl in der smbpasswd boxusr80 steht? Möglichst so, dass es auch noch klappt, wenn in der smbpasswd ftpuser steht.

Wie es funktioniert ist mir eigentlich egal. Hauptsache es tut.

MfG Oliver
 
Hmm, wenn ich das hier alles lese, verstehe ich zu 80% nur Bahnhof! :bahnhof:
Nochmal für mich zum Verständniss:
Vor dem Flashen der 86er Firmware war die "smbpasswd" ja definitiv nicht leer, denn ich hatte ja Zugriff auf die passwortgeschützten Freigaben. Erst nach dem Flashen auf eine 86er-trunk stand ja dort gar nichts mehr drinne, wodurch der Zugriff logischerweise nicht klappen konnte.
Wie war das denn vorher? Hat AVM das Passwort in der smbpasswd angelegt, oder wurde das von freetz irgendwo anders her dort reingeschrieben?

Wo besteht denn nun das eigentliche Problem?
Den ftpuser gibt es ja immer noch auf der Box, oder sehe ich das falsch? Selbst im AVM WebIF wird doch darauf hingewiesen, beim Zugriff auf das (orginale) Samba-Share als Benutzername "ftpuser" zu verwenden!? Müssen wir uns dann um den "boxusr80" scheren??

Wieso schreiben wir (Freetz) denn diesen User mitsammt Passwort nicht einfach wieder in die smbpasswd? Das Passwort muss ja nicht unbeding aus dem AVM-WebIf kommen, es könnte ja auch ein Eingabefeld in der Freetz-Samba-Konfiguration geben, indem man das Passwort für den ftpuser (oder alternativ freetzuser oder sowas) eintragen kann, und diesen dann über den von mir (oder ähnlich) vorgeschlagenen Weg in die smbpasswd "drücken".

:gruebel:
 
@SaschaBr: Es ist schon besser sich an AVM-User zu halten, sonst kochen wir wieder unser eigenes Süppchen. Die Eingabemaske kann man ja unter FREETZ auch machen, es sollte bloß an einer Stelle abgespeichert werden. Und das sollte vernünftigerweise bei AVM liegen und nicht irgendwo bei uns separat abgelegt.
Es geht hier nicht nur alleine um SAMBA. AVM hängt an diesen blöden User ziemlich viele andere Sachen an. Angefangen vom AVM-ftpd bis auf Mediaserver, Onlinespeicher usw.

MfG
 
Ich bin eigentlich zum Schluss gekommen, dass wir uns nicht mehr an AVM halten und unser eigenes Süppchen kochen. Denn nur so haben wir Ruhe vor deren Machenschaften.

Wir sollten unsere eigene cleartext Passwort Datei schreiben. Der Benutzer und das Passwort werden über das Freetz Webinterface eingegeben. Später könnte man dann überlegen mehrere Benutzer zu machen. Das gilt erstmal nur für die Samba Benutzer.

Die Samba Benutzer haben ja nicht unbedingt was mit den System bzw. FTP-Benutzern zu tun.

Mfg Oliver
 
Die Samba Benutzer haben ja nicht unbedingt was mit den System bzw. FTP-Benutzern zu tun.

Normalerweise und auf großen Serversystemen nicht, gebe ich dir Recht. Nach meiner Beobachtung ist es aber bei solchen kleinen Systemen, wie Fritz!Box und ähnliches quasi zu Standard geworden für alles Systembenutzer zu nehmen und ganze Konzepte darauf zu bauen. Sprich, FTP, MediaServer, Onlinespeicher, WebIF und alles was man sich denken kann bespeisen sich von den Systembenutzern. Sowas stelle ich z.B. auf meiner QNAP-NAS fest und ich vermute sehr stark, dass QNAP nicht die einzigen sind, die sowas tun.
AVM hat es am Anfang anders gemacht, mittlerweile bewegen sie sich aber anscheinend doch in die Richtung. Ich wollte nur vorsichtig anwarnen, dass man doch nicht zu stark vom Original abweichen sollte, selbst wenn AVM-Entwickler manchmal schlimme Sachen tun, die keinem vernünftigen Programmierer in seinem schlechtesten Traum erscheinen werden.

MfG
 
Das hört sich ja gut an. Mal sehen, vieleicht komme ich ja heute Abend zum testen (wahrscheinlich aber erst am WE)..
 

Zurzeit aktive Besucher

Neueste Beiträge

Statistik des Forums

Themen
244,872
Beiträge
2,219,909
Mitglieder
371,594
Neuestes Mitglied
AA-Idealbau
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.