FTP-Benutzer einrichten -> Patch für 15.2 + Anleitung

Ganz einfach, weil der DS-Mod damit arbeitet und daraus die Dateien in /tmp (zeigt als Symlink auf /var/tmp) erzeugt, wie das Betriebssystem sie braucht. Was unter /tmp/flash liegt, wird als Teil der DS-Mod-Konfiguration ins TFFS nach /var/flash/ds_mod geschrieben.

Wieso die Befehllsequenz nicht gehen soll, weiß ich nicht. Ich habe gerade extra auf meinem System wieder die Dateien /usr/bin/mod* aus 15.2 eingespielt (hatte was Neueres), und es geht immer noch. Wenn Du
Code:
cat /tmp/passwd
cat /tmp/shadow
cat /tmp/flash/shadow.save
eingibst, steht in allen picard drin?
 
Zuletzt bearbeitet:
Hm, ok, ich hab das jetzt nicht mit "Picard" versucht, sondern mit einem Benutzernamen, mit dem ich es vorher schon probiert hatte. Darin liegt's wohl. Mit einem neuen Benutzernamen funktioniert's dann. Ich werd heut abend mal die Löschmethode für den alten Benutzernamen versuchen.

Wenn ich das allerdins als "picard:*" eingebe, lande ich im FTP in einem leeren Ordner. Wo genau lande ich denn da?

EDIT: Hm, mit
Code:
"picard::0:0:root:/var/media/ftp:/bin/sh" >> /tmp/flash/shadow.save
funktioniert es nicht. Wie geb ich denn dann einen Pfad an?
 
Zuletzt bearbeitet:
Ja, FTP ist so eine Sache. Du willst den Heimatordner im FTP-Verzeichnis haben, aber leider legt der real existierende DS-Mod mit seiner seltsamen Benutzerverwaltungs-Krücke die Infos zu Benutzern und Paßwörtern zwar im Flash persistent ab, schmeißt aber die Infos über UIDs, Gruppenzugehörigkeiten, Heimatverzeichnisse usw. weg, so daß nach dem Neustart immer eine aufsteigend numerierte Benutzerliste da ist, die Standard-Heimatverzeichnisse /mod/home/<benutzername> haben. Man müßte noch zusätzlich per Skript nach dem Neustart /etc/passwd modifizieren, um das wieder auf die Reihe zu kriegen.

Die schlechte Nachricht ist, daß es momentan einfach so ist. Die gute ist, daß ich gerade angefangen habe, aus diesem Anlaß die komplette Benutzerverwaltung fürs nächste Release auf den Kopf zu stellen: Anstatt proprietärer Skripten zum Anlegen von Benutzern oder ändern von Paßwörtern wird es in der Busybox die üblichen Kommandozeilen-Wekzeuge geben: adduser, deluser, addgroup, delgroup. Außerdem werde ich dafür sorgen, daß die Dateien /etc/passwd, /etc/shadow, /etc/group, /etc/gshadow komplett abgespeichert werden. Proprietäre Skripten sorgen nur noch dafür, die in den "normalen" Dateien gemachten Änderungen bei Bedarf zu laden und zu speichern, damit sie einen Neustart überleben. Ich will auch, daß es Standard-PW für die Web-Oberfläche des DS-Mod und evtl. auch für root gibt oder daß man die modpasswd-Prozedur für diesen beiden ohne Telnet-Login über Web machen kann.

Das alles ist viel Arbeit, aber es wird mal langsam Zeit dafür.
 
Ah ok, verstehe. Daran entwickelt ihr also noch, aber das scheint wirklich mal nötig zu sein, soweit ich gesehen hab, haben ja schon einige danach gefragt. Jetzt versteh ich auch, wieso es so schwierig ist per Forensuche 'ne Komplettlösung für dieses Problem zu finden. Für den Übergang:
Man müßte noch zusätzlich per Skript nach dem Neustart /etc/passwd modifizieren, um das wieder auf die Reihe zu kriegen.
Wie mach ich das am besten, per crontab, in debug.cfg? Hast Du irgendwo ein Beispiel für mich? Benutzer und Passwort klappt ja jetzt bereits, ich brauch nur noch Verzeichnisangabe und Rechtevergabe. Büdde, büdde!
 
Per "sed" Heimverzeichnis in /etc/passwd ändern

Im Wiki steht doch, wie man Benutzer für FTP anlegt. Daraus kann man ja auch ableiten, wie man per sed-Skript eine automatisch vom mod generierte Zeile ändern müßte, um eine bestimmte UID bzw. ein bestimmtes Heimatverzeichnis zu haben. Beispiel (in der Annahme, der Benutzer picard wurde bereits gemäß Wiki angelegt, mit Paßwort versehen und persistent gespeichert):

Code:
# Ausgangspunkt: Benutzer in /etc/passwd vorher
picard:x:[COLOR="Red"][B]3[/B][/COLOR]:1:Cpt. Jean-Juc Picard:[COLOR="Blue"][B]/mod/home/picard[/B][/COLOR]:/bin/sh

# Ziel: Benutzer in /etc/passwd nachher
picard:x:[COLOR="Red"][B]555[/B][/COLOR]:1:Cpt. Jean-Juc Picard:[COLOR="Blue"][B]/var/media/ftp/uStor01/picard[/B][/COLOR]:/bin/sh

Wir wollen also die (nach dem Neustart jedes mal automatisch vom DS-Mod vergebene) User-ID (rot) durch eine vorbestimmte, z.B. 555, ersetzen. außerdem soll unser FTP-Benutzer auf dem USB-Stick unter uStor01 sein eigenes Heimatverzeichnis (blau) haben - einmalig das Anlegen nicht vergessen!

Folgender Ersetzungs-Ausdruck in /tmp/flash/rc.custom bewirkt das Gewünschte. Achtung, Datei editieren mit "n" vor dem Editor-Namen, also nvi, nmcedit, nnano. Das bewirkt, daß auch die rc.custom anschließend persistent gespeichert wird.

Code:
sed -ir 's#^(picard:x):[COLOR="Red"][B][0-9]+[/B][/COLOR]:(.*):[COLOR="Blue"][B]/mod/home/picard[/B][/COLOR]:(.*)#\1:[COLOR="Red"][B]555[/B][/COLOR]:\2:[COLOR="Blue"][B]/var/media/ftp/uStor01/picard[/B][/COLOR]:\3#' /etc/passwd
Nachtrag: Die Sequenz [0-9]+ bitte nicht ersetzen, sie paßt auf jede Ziffernfolge, nur in der Ersetzung die gewünschte UID eintragen.

Falls sich jemand über die "#"-Zeichen im Ersetzungsausdruck wundert, das ist ein nicht jedem bekanntes Feature von sed: Wenn das Meta-Zeichen "/" selbst im Ersetzungsausdruck vorkommt und man es ständig mit vorangestelltem Backslash ("\") markieren müßte, kann man einfach ein anderes Zeichen als Trenner im Ersetzungsausdruck verwenden und spart sich die Escape-Sequenz bei den übrigen Schrägstrichen. Das macht den Ersetzungsausdruck einfacher lesbar.

P.S.: Ist jetzt auch im Bftpd-Wiki vermerkt.
 
Zuletzt bearbeitet:
Klappt bei mir nicht. Vorgehensweise:
Per SSH als root eingeloggt.
Code:
cat /etc/passwd
um zu sehen, welche ID picard hat (15)
Code:
nvi /tmp/flash/rc.custom
geht nicht, da Datei nicht angelegt also
Code:
echo > /tmp/flash/rc.custom
und nochmal
Code:
nvi /tmp/flash/rc.custom
und i gedrückt
Das Verzeichnis "picard" auf dem USB-Stick mit dem Standard-Benutzer ftpuser angelegt.
In die rc.custom folgendes eingetragen:
Code:
sed -ir 's#^(picard:x):15:(.*):/mod/home/picard:(.*)#\1:555:\2:/var/media/ftp/uStor01/picard:\3#' /etc/passwd
ESC, :wq, speichern y, reboot
Der FTP ist mir ein Mal abgestürzt, das nächste Mal kam ich immer noch auf das alte Homeverzeichnis und in der /etc/passwd hat sich auch nichts geändert.

Ach ja, für Schreibzugriff muss die User-ID 0 sein, oder? Hatte ich hier jetzt zwar nicht drin, wollt's trotzdem nochmal fragen.
 
Erstens würde es nicht schaden, rc.custom mit chmod +x ausführbar zu machen, was aber nicht der Grund sein kann, daß es nicht ausgeführt wird beim Startvorgang, weil es mit einem Source-Kommando (. /tmp/flash/rc.custom) inkludiert wird.

Zweitens, wozu so umständlich? Mein Ersetzungsausdruck braucht die alte UID, die sich sowieso ändern kann, nicht, es steht doch statt einer festen Zahl bereits [0-9]+ darin, das findet jede positive Ganzzahl.

Drittens, hast Du das Kommando mal auf der Konsole probiert, um zu testen, ob es geht?

Viertens, was für eine Art Datenträger ist Dein USB-Medium, wie groß ist die Partition und welches Dateisystem ist darauf?

Fünftens, falls die Antwort auf #4 lauten sollte, daß es FAT32 sei und die Größe unter 2 GB liege, wäre da immer noch das Problem, daß das Auto-Mount-Skript von AVM erstens FAT-Datenträger mit UID 1000 und GID 0 mountet, was in den wenigsten Fällen hilft, da Du Deinem Benutzer Picard sonst entweder diese beiden Merkmale verpassen müßtest (also nicht nur UID ersetzen, auch GID) oder aber dafür sorgen müßtest, daß, falls mehrere FTP-Benutzer ihre Heimverzeichnisse auf dem Datenträger haben, er auch für alle Benutzer schreibbar gemountet wird. Das ist leider nicht der Fall, denn er wird, wie der Befehl mount zeigt, standardmäßig mit fmask=0022,dmask=0022 gemountet. Was wir wollen, ist fmask=0000,dmask=0000. Ab 15.3 wird dazu der USB-Patch, der auch die Mounts so hübsch in uStor01 etc. umbenennt, eine entsprechende Erweiterung haben, die ich hier vorab mal gegen meine Gewohnheit zur Verfügung stelle. Die Datei im Anhang speicherst Du direkt im Basisverzeichnis des DS-Mod und entpackst sie so:
Code:
tar xvjf usbstorage-improved-patch.tar.bz2
Danach bitte nochmal in Menuconfig kontrollieren, ob der Patch "Patch USB storage names" auch ausgewählt ist, make ausführen und Firmware neu flashen.

Sechstens, falls die Partition 2 GB oder größer ist, könntest Du ein Problem haben mit LFS (Large File Support). In dem Fall müßtest Du Deine Toolchain komplett neu bauen, die Pakete anschließend auch. Auf deutsch: neu anfangen, das ist am sichersten. Bei unter 2 GB spielt es keine Rolle.

Siebtens hoffe ich nun, nichts wesentliches vergessen zu haben.
 

Anhänge

  • usbstorage-improved-patch.tar.bz2
    536 Bytes · Aufrufe: 40
1. Ok.
2. Achso, das wusste ich nicht. Werd ich ändern, aber darin liegt's wohl auch nicht. Meine manuell eingetragene ID stimmte ja vorher und nachher.
3. Ne, aber jetzt:
Code:
sed: no temp file
Geht nur aus /tmp/flash/rc.custom o.ä. heraus, oder?
4. Zwei USB-Sticks an einem USB-Hub, uStor01 mit 4GB Fat32, uStor11 mit 1GB Fat32
5.+6. Gut, dann werd ich grad mal von Grund auf neu kompilieren. Zum x-ten Mal...:rolleyes: Aber bei so einem tollen Support will ich doch mit meinen Anstrengungen mithalten. ;)
So wie ich das jetzt verstanden hab, brauch ich meine Sticks nicht mit ext3 formatieren. Wüsste im Moment auch nicht wie, hab noch kein Tool entdeckt, das das bei USB-Sticks machen kann.
 
So. Ich hab jetzt das image neukompiliert, von Grund auf in einem neuen Ordner. Ich hab alle Patches angewandt, die ich vorher auch angewandt hab, bis auf die nanoshell, und den neuen USB-Patch noch dazu natürlich.
Bei der Kompilierung wurden mir keine Fehler angezeigt. Als ich jetzt aber das Update über das Webinterface gemacht hab kam: "Es trat ein nicht näher spezifizierter Fehler während des Updates auf." Ich hab's noch mal versucht, gleicher Fehler. Als ich dann versucht hab, mein altes Image wieder einzuspielen kam "Die Update-Datei ist nicht vorhanden oder zu klein." (Hm, seltsam, die hat auf einmal wirklich 0KB.) Meine FB läuft noch, aber wahrscheinlich nicht mit dem neuen Image, sondern mit dem alten. Ins DS-Mod-Interface komm ich nicht rein.

EDIT: Mein Fehler. Entweder es lag daran, dass ich den ds-mod per GUI entpackt habe oder weil altes und neues Image in einem Ordner lagen (obwohl, die haben doch unterschiedliche Namen). Jedenfalls konnte ich das neue Image nun flashen. Das DS-Mod-Webinterface geht allerdings immer noch nicht.
EDIT2: Ok, dass das Interface nicht auftauchte, lag daran, dass ich die USB-Sticks noch nicht wieder dran hatte, die aber doch im debug.cfg drinstehen hatte. Jetzt bekomme ich die Passwortabfrage vom Interface zu sehen, aber mein Passwort nimmt er nicht mehr.
 
Zuletzt bearbeitet:
Sooo... Ich komm wieder ins DS-Mod Interface, keine Ahnung woran's lag.
Die neue Firmware ist auch drauf. Ich hab sed... nochmal in die rc.custom geschrieben (diesmal mit [0-9]+), aber ich lande immer noch im alten home-Verzeichnis. Noch irgendne Idee?
 
Zuletzt bearbeitet:
Stehen denn nach dem Start die richtige UID und das richtige Homedir in /etc/passwd bzw. drin? Genauer gesagt: Zeigt /etc/passwd wie gewohnt auf /tmp/passwd und steht es dort drin? Klappt ein login <user> mit dem Benutzer und landest Du im richtigen Verzeichnis? (Kann nur klappen, wenn die passwd okay ist.)
 
Zeigt /etc/passwd wie gewohnt auf /tmp/passwd [...]?
Wie zeigt? /etc/passwd und /tmp/passwd haben beide den gleichen Inhalt. Die angelegten Benutzer sind vorhanden aber das Homedir lautet immer noch /mod/home/... und die UID ist immer noch die alte (nicht 555)
Code:
sed -ir 's#^(picard:x):[0-9]+:(.*):/mod/home/picard:(.*)#\1:555:\2:/var/media/ftp/uStor01/picard:\3#' /etc/passwd
ist aber in der rc.custom vorhanden.
 
Dann stimmt etwas in der rc.custom nicht oder irgendein Prozeß überschreibt Deine Änderungen wieder. Erst mal manuell versuchen, wie schon einmal erbeten: sed-Befehl an der Konsole ausführen und überprüfen, ob er erfolgreich war. Dann Login testen. Danach kümmern wir uns um die rc.custom.

/etc/passwd ist keine Datei, sondern ein sogenannter Symbolic Link, kurz Symlink (symbolische Verknüpfung) auf /tmp/passwd. Für /etc/groups gilt Ähnliches. Sonst könnten die Dateien ja nicht auf magische Weise gleich sein, nachdem Du nur eine änderst. Das sieht man so (Unix-Shell-Grundlagen!):
Code:
$ ls -l /etc/passwd
lrwxrwxrwx    1 root     root           17 Oct 14 10:49 /etc/passwd -> ../var/tmp/passwd
$ ls -l /tmp
lrwxrwxrwx    1 root     root            7 Oct 14 10:49 /tmp -> var/tmp

Wir erkennen: /etc/passwd zeigt auf /var/tmp/passwd, außerdem zeigt /tmp auf /var/tmp, weswegen /etc/passwd, /tmp/passwd und /var/tmp/passwd im Grunde das Gleiche sind.
 
sed-Befehl an der Konsole: Ausgabe nicht anders als zuvor ( #28 ):
Code:
sed: no temp file

Symbolic Link hab ich schon gehört, wusste nur nicht, dass dann auch die Ausgabe gleich von der anderen Datei hergeholt wird. (Hätte z.B. auch nur ein Verweis drin stehen können o.ä.)
 
sed versucht, eine temporäre Ausgabedatei für das Filtern zu erzeugen, und zwar unter /etc, weil dort auch das Original liegt. In BusyBox 1.7.2, das ich hier verwende, lautet die Meldung etwas anders, und der problematische Dateiname wird auch angegeben. Bei Dir ist das schwer zu erkennen, aber ich habe in den Quellcode geschaut.

Die Lösung ist so banal wie effektiv: Ersetze den Dateinamen /etc/passwd am Ende des sed-Befehls durch /tmp/passwd, denn in /tmp (RAM-Disk) hast Du Schreibrechte, in /etc (SquashFS im Flash) nicht. Bei mir tritt der Fehler nicht auf, weil mein /etc beschreibbar ist, ich habe das etwas anders gemountet - anderes Thema - sonst wäre ich früher drauf gekommen.
 
Wunderbar, jetzt klappt's! 3 Fragen hätt ich jetzt noch, 2 davon nicht zum Thema, aber für die will ich nicht gleich nen neuen Thread aufmachen ...
1. Lassen sich auch Benutzer realisieren, die nur Lese-/Downloadrechte bzw. nur Schreib-/Uploadrechte haben?
2. Gibt's wget in 15.3+ mal mit --http-user und --http-password? Ist soweit ich das sehen konnte nicht dabei.
3. Gibt's den bftpd in 15.3+ mal mit SSL?
Ach ja... Danke für den tollen Support! :groesste:
 
1. Vermutlich - RTFM: http://bftpd.sourceforge.net/docs.html
2. Nein, weil das nicht irgendein wget ist, sondern das der Busybox. Das "große" wget kann man auch bauen für die Fritz!Box, aber das braucht wesentlich mehr Platz und ist nicht im DS-Mod enthalten. Selber machen! Es gibt Infos dazu im Forum, such mal, ich habe mal was gelesen vor einiger Zeit.
3. Siehe 1. - nein, meines Wissens. Aber wenn Du via SSL an Deine Box willst, gibt es SSH-Tunnel oder, falls es direkt mit HTTP sein soll, Matrixtunnel.
 
jungs ich bin jetzt seit tage dabei und versuche mein usb zum laufen zu kriegen
wenn ich

Code:
cat /etc/passwd
Code:
root:x:0:0:root:/mod/root:/bin/sh
ftp:x:1:1:ftp:/mod/home/ftp:/bin/sh
samba:x:2:1:samba:/mod/home/samba:/bin/sh
ftp:x:3:1:ftp:/mod/home/ftp:/bin/sh
LockTown:x:4:1:LockTown:/mod/home/LockTown:/bin/sh

Code:
nvi /tmp/flash/rc.custom
Code:
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
- /var/vi.tmp 1/1 100%

Code:
nvi /tmp/flash/rc.custom
Code:
 /tmp/flash/rc.custom

~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
I /var/vi.tmp [modified] 2/2 100%

was mach ich da oder was muss ich weiter eingeben
 
Grundlagen von vi lernen, Google benutzen.
 
ich will schon nicht mehr fragen das thema Fritzbox ist ganz schön schwer für micht so ich habe

Code:
cat /etc/passwd
eingeben und da kam

Code:
root:x:0:0:root:/mod/root:/bin/sh
ftp:x:1:1:ftp:/mod/home/ftp:/bin/sh
samba:x:2:1:samba:/mod/home/samba:/bin/sh
ftp:x:3:1:ftp:/mod/home/ftp:/bin/sh
picard:x:555:1:picard:/var/media/ftp/uStor01/picard:/bin/sh
ftp:x:5:1:ftp:/mod/home/ftp:/bin/sh
ftp:x:6:1:ftp:/mod/home/ftp:/bin/sh
ftp:x:7:1:ftp:/mod/home/ftp:/bin/sh

ich weiss nicht ob das richtig ist wegen denn ganzen ftp user ich habe kein account mit FTP gemacht
 

Statistik des Forums

Themen
246,070
Beiträge
2,245,572
Mitglieder
373,512
Neuestes Mitglied
ah1982
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.