PDA

Bekijk de volledige versie : Alternative zum integriertem FTP-Server (vsftp aus ipkg verwenden)



zwenny
04-02-2012, 22:52
Nachdem ich erfolglos versucht habe den integrierten FTP-Server aus der oleg-Firmware (renewed: WL500gpv2-1.9.2.7-rtn-r3121)
nach newbiefan's Anleitung (http://wl500g.info/showthread.php?t=17674) zu konfigurieren, habe ich einfach mal vsftpd aus dem Repo installiert und möchte nun meine Erkenntnisse mit euch teilen.
Voraussetzung ist natürlich ein fertig aufgesetzter WL500gP(v2) nach wengi's How To (http://wl500g.info/showthread.php?t=8424) mit der oleg-Firmware (renewed) (http://code.google.com/p/wl500g/).

Bevor ihr meine Lösung allerdings in die Tat umsetzt, sollte sich einer das Ganze mal kritisch ansehen und vor allem Tipps geben
wie man die Sache sicherer gestalten kann. Der angelegte Benutzer ist ja ein vollwertiger Benutzer!


per SSH (unter Windows mit PuTTY) auf dem Router einloggen und das vsftpd-Paket installieren:

ipkg install vsftpd
falls nicht vorhanden auch "adduser" installieren (wird später für die Benutzerverwaltung benötigt):

ipkg install adduser

Datei "vsftpd" in /opt/etc/xinetd.d/ mit folgendem Inhalt anlegen (damit vsftpd per xinetd gestartet wird):

service ftp
{
socket_type = stream
server = /opt/sbin/vsftpd
protocol = tcp
port = 21
user = admin
group = root
wait = no
disable = no
}

Konfiguration in vsftpd.conf nach Bedarf anpassen. Meine sieht wie folgt aus:

anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
#anon_upload_enable=YES
#anon_mkdir_write_enable=YES
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
#chown_uploads=YES
#chown_username=whoever
vsftpd_log_file=/opt/var/log/vsftpd.log
#xferlog_std_format=YES
idle_session_timeout=600
data_connection_timeout=120
#nopriv_user=ftpsecure
#async_abor_enable=YES
#ascii_upload_enable=YES
#ascii_download_enable=YES
ftpd_banner=Du benutzt zwennysFTPserver auf zwennysgateway
#deny_email_enable=YES
#banned_email_file=/opt/etc/vsftpd.banned_emails
chroot_local_user=YES
#chroot_list_enable=YES
#chroot_list_file=/opt/etc/vsftpd.chroot_list
ls_recurse_enable=YES
listen=NO
#listen_ipv6=YES

Die FTP-Benutzer habe ich einfach mit "adduser" erstellt:

adduser Benutzername

Anschließend müsst ihr ein Passwort eingeben und dieses nochmal bestätigen. Der Benutzer ist dann in /etc/passwd eingetragen.

In /etc/passwd muss dann noch das Heimatverzeichnis (home) zum gewünschten FTP-Pfad für den Benutzer geändert werden.
Der Pfad ist absolut und wird vorgegeben mit /home/Benutzername.
Erstellt man also einen Benutzer namens ftpuser würde der Eintrag in /etc/passwd folgendermaßen aussehen:

ftpuser:waKS/Rlnrx4XY:1001:1001:Linux User,,,:/home/ftpuser:/bin/sh

Aus Sicherheitsgründen glaube ich sollte die letzte Spalte von "/bin/sh" besser auf "/bin/false" gesetzt werden,
damit das Benutzerkonto nicht missbraucht werden kann!

Ihr könnt den Benutzer übrigens ganz einfach wieder mit

deluser Benutzername löschen.

Jetzt könnt ihr xinetd neustarten und damit vsftpd anschmeißen:

/opt/etc/init.d/S10xinetd restart


Damit solltet ihr dann per FTP-Cliet auf die FTP-Freigaben gelangen.

newbiefan
17-02-2012, 19:07
Bevor ihr meine Lösung allerdings in die Tat umsetzt, sollte sich einer das Ganze mal kritisch ansehen und vor allem Tipps geben
wie man die Sache sicherer gestalten kann. Der angelegte Benutzer ist ja ein vollwertiger Benutzer!


Nun, vorerst einmal Danke für deine Mühe - ich habe mir das Ganze einmal wie gewünscht etwas kritisch angesehen.

1.) Es gibt keinen wie auch immer gearteten Grund, nicht den eingebauten vsftpd-Server zu verwenden.
Im Gegenteil: Der Vsftpd im IPKG-Repo ist die Version 2.3.4-1
Seit FW r2624 im d-Branch (Kernel 2.4) wird auch die Version 2.3.4 verwendet.
Im RTN-Branch wird sogar die neuere Version 2.3.5 seit FW r3719 verwendet.

2.) Natürlich kann xinetd den vsftpd der FW genau gleich starten, lediglich der Pfad zum Server ist anders. Darüber hinaus bin ich von xinetd nicht überzeugt, Dienste können nur bei Bedarf gestartet, aber nicht mehr beendet werden. Wo soll dann der Vorteil liegen-unter normalen Umständen läuft ein Server nur wenn er auch wirklich gebraucht wird, also läuft letztendlich lediglich ein Dienst mehr als notwendig. Werden alle Dienste von xinetd gestartet, verbrauche ich mit xinetd nur mehr Speicher als vorher. Das macht höchstens Sinn, wenn man zwar viele Services haben will, aber nur sehr selten braucht. Dann erhebt sich die Frage, ob man nicht gleich mit WinSCP zugreift, dann brauche ich nur Dropbear. Das geht zwar etwas langsamer, aber wenn man es sowieso sehr selten braucht......
Als Linux-Spielerei ist es jedoch in Ordnung.

3.) Die Datei vsftpd.conf kann überall liegen, so z.Bspl. auch auf /opt/etc
Nachstehend das von mir verwendetet Startfile S06vsftpd in /opt/etc/init.d als Bspl.:
#! /bin/sh
#
# startfile for built in vsftpd, by newbiefan @ wl500g.info
# For Olegs & Ily's FW for Asus Routers
# store this script in /opt/etc/init.d if you've installed optware

# Prgmname=/full_path/Prgmname
prgmname="/usr/sbin/vsftpd"
shortname="vsftpd"

#configfile=/full_path/configfile
configfile="/opt/etc/vsftpd.conf"

#location of pid-file, if any, configure stop function of this script
#pidfile="/var/lock/vsftpd.pid"

###########################End of Script configuration###################

start() {
# Code here to start the program
${prgmname} ${configfile} &
logger -t $shortname "$prgmname started with config from $configfile"
return 0
}

stop() {
# Code here to stop the program and check it's dead
if [ -n "`pidof $shortname`" ]; then
killall $shortname
logger -t $shortname "$prgmname stopped"
fi
return 0
}
##########################start here##########################
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
logger -t $shortname "Restart of $prgmname, executed from $(whoami)"
stop
sleep 2
start
;;
*)
echo $"Usage: $0 {start|stop|restart}"
exit 1
esac
sleep 1
exit
(whoami hat nicht jeder installiert...kann man weg lassen)

4.) Als Verbesserung für die vsftpd.conf folgende Zeilen hinzu fügen:

delay_failed_login=15
max_login_fails=2
Wenn jemand einen falschen Loginversuch durchführt, muss er 15 Sekunden warten. Das geht nur 2 x, dann antwortet ihm der Server nicht mehr.
Diese 2 Zeilen verderben Script-Kiddies und Hacker schnell den Spass. Natürlich sollte man den ganzen Server sowieso mit Iptables noch absichern (ip_recent).

5.) Ich habe mit der Verwendung der Standard-Passwd Datei erhebliche Sicherheitsbedenken-deshalb verwende ich eine eigene Password-Datei für vsftpd.

6.) Dein HowTo hat Fehler: So kann zwar ein Benutzer angelegt werden, aber nach einem Reboot sind die Benutzer wieder weg. Dazu musst du noch deine Passwd-Datei in die .files eintragen und danach ein flashfs save, flashfs commit, flashfs enable und ein reboot durchführen. Leider musst du das bei jeder Änderung eines Benutzers durchführen. Falls du die passwd-Datei auf z.Bspl. /opt/etc für vsftpd legst, kannst du eine Änderung viel leichter durchführen, dann brauchst du nicht immer die Änderungen in den Flash-Speicher schreiben.

LG
Newbiefan

P.S.: Es wäre schön, wenn du uns mitteilen würdest woran du bei der ursprünglichen Version gescheitert bist. Was genau ging nicht? War der Server überhaupt jemals in Betrieb?

zwenny
25-04-2012, 18:19
Ich muss zugeben, dass diese Lösung ein Schnellschuss war und nach einem Neustart (das hatte ich nicht getestet) nicht mehr funktioniert.
Dein HowTo (http://wl500g.info/showthread.php?17674-HowTo-vsftpd-jedem-User-sein-eigenes-Verzeichnis) ist besser durchdacht, nur ging bei mir schon an dem Punkt nicht weiter an welchem der integrierte FTP-Server aktiviert werden soll.
Nachdem alle Einstellungen im Webinterface getätigt waren und der Router zum Übernehmen neu gestartet wurde, lief einfach kein Dienst.
Hab Zugriff auf FTP Port 21 per telnet überprüft und mir die laufenden Prozesse (mit ps) auf dem Router anzeigen lassen: Nichts.

Mittlerweile ist ja wieder einige Zeit vergangen und es gab auch schon wieder ein Firmware-Update.
Nun gibt's keine Probleme mehr und die Funktionen des integrierten FTP-Servers reichen für meine Zwecke.
Dein HowTo ist aber nach wie vor in Ordnung und ich finde hier bestimmt auch ein Thema bei dem ich mich einbringen kann ;)

newbiefan
25-04-2012, 20:34
ich finde hier bestimmt auch ein Thema bei dem ich mich einbringen kann ;)

Danke, das freut unsere Community ganz besonders - mit Sicherheit gibt es viele offene Themen.
Und unsere Asus-Router können so manchen User begeistern - schliesslich kann man mit Linux sehr viel machen.
LG
Newbiefan