[[ftp]]
 

FTP

Es gibt viele FTP-Client-Programme, ich will hier nur ein paar ansprechen.

gFTP

Das ist ein grafischer FTP-Client von Gnome, der eine Bandbreitenbegrenzung ermöglicht.

NcFTP

Das ist ein sehr flexibler FTP-Client, der ursprünglich von NetBSD stammt und mittlerweile auch zu anderen UNI*en portiert wurde.

Leider funktioniert der NcFTP 3.2.3 (July 23, 2009) seit FreeBSD 8.0-RELEASE nicht mehr. Um ihn wieder ans Rennen zu bekommen, muss man ihn patchen.

Was das für ein Problem ist und wo man den Patch bekommt, steht hier: http://www.mail-archive.com/freebsd-stable@freebsd.org/msg107277.html

# vi server1.cfg
host ftp.server.net
user fritz
pass geheim

normales einloggen, wie mit jedem anderen auch:

# ncftp -u fritz -p geheim ftp.server.net

ein „ls“ auf dem entfernten Rechner über das Verzeichnis “/ftp“ mit langer (-l) Ausgabe:

# ncftpls -u fritz -p geheim -l ftp.server.net /ftp

das Verzeichnis „daten“ rekursiv hochschieben:

# ncftpput -u fritz -p geheim -S .tmp -m -R ftp.server.net /ftp /tmp/daten

das Verzeichnis „daten“ rekursiv hochschieben, alle Dateien, die Fehlerlos hochgeladen wurden, sind aus dem Verzeichnis “/tmp/daten“ gelöscht worden:

# ncftpput -u fritz -p geheim -S .tmp -m -R -DD ftp.server.net /ftp /tmp/daten

das Verzeichnis „daten“ rekursiv hochschieben (mit Konfigurationsdatei):

# ncftpput -f server1.cfg -S .tmp -m -R -DD /ftp /tmp/daten

FTP (FreeBSD)

Da ich jetzt keine Lust habe den NcFTP zu patchen, verwende ich dann doch den FTP-Client, der bei FreeBSD (/usr/bin/ftp) schon dabei ist.

Im Grunde ist der garnicht so schlecht, er kann

  1. ~/.netrc auslesen
  2. für jedes einzelne Verzeichnis eine separate Bandbreitenbegrenzung (-T)
  3. Bandbreitenbegrenzung kann für beide Richtungen (hin/zurück) sogar unterschied eingestellt werden (rate)
  4. in Script's verwendet werden

allerdings nicht ganz so schön wie der NcFTP aber dafür funktioniert er. ;-)

früher

Eine Möglichkeit diesen FTP-Client in einem Script (automatisiert) zu verwenden war diese (letztes mal getestet irgendwann zwischen 2003 und 2005):

ftp ftp://fritz:geheim@ftp.server.net:/ftp/ << EOF
put Datei01.txt
put Datei02.txt
put Datei03.txt
put Datei04.txt
by
EOF

FreeBSD 8.0 RELEASE p3

Als erstes schreiben wir mal die “~/.netrc“:

# vi ~/.netrc
machine ftp.server.net login fritz password geheim
# chown ich:meinegruppe ~/.netrc
# chmod 0600 ~/.netrc

Variante 1 (Script)

Ich lege hier erst das Verzeichnis an und trenne die Verbindung dann wieder bevor ich das Verzeichnis mit Daten fülle.

Der Grund ist der, das es ja die beiden Möglichkeiten gibt, dass das Verzeichnis noch nicht existiert oder das es schon existiert. Eigentlich müsste man erst mal nachsehen ob es schon existiert, aber den Aufwand spare ich mir.

In diesem Fall wird die Verbindung sauber beendet, wenn das Verzeichnis angelegt werden konnte. Wenn es aber schon existiert, dann bricht die Verbindung ab, das ist aber egal, da es in unserem Fall ja kein Fehler ist, sondern wir vorher ja nur einen „unnötigen“ Arbeitsschritt durchgeführt haben.

Danach wird die Verbindung wieder aufgebaut und evtl. vorhandene Daten werden aus dem Verzeichnis gelöscht, dann kommen die neuen Daten rein.

#!/bin/sh
# cd /lokales/verzeichnis
# ftp -p -i -N ~/.netrc ftp.server.net << EOF
mdir ftp
by
EOF
# ftp -p -i -N ~/.netrc ftp.server.net << EOF
cd ftp
pwd
ls -l
mode bin
mdelete *
mput *
by
EOF

Variante 2 (Script)

Dieses Beispiel ist deutlich einfacher gehalten, hier wird nur in ein Verzeichnis gewechselt, dann das aktuelle Verzeichnis und der Inhalt ausgegeben.

#!/bin/sh
cd /lokales/verzeichnis
echo "
cd /ftp
pwd
ls -l
by
" | ftp -p -i -N ~/.netrc ftp.server.net

Variante 3 (Kommandozeile)

Hier wurde das Beispiel aus „Variante 2“ in einer Kommandozeilentauglichen Form dargestellt.

Der Befehl „echo“ muss den Parameter “-e“ bekommen, damit er die Schreibweise „\n“ für „Zeilenumbruch“ versteht. So kann man mehrere Zeilen in einer einzigen darstellen.

# echo -e "cd /ftp\npwd\nls -l\nby" | ftp -p -i -N ~/.netrc ftp.server.net

FTP-Server (FTPD) einrichten

Gruppe anlegen:

# pw groupadd -n programmierer -g 2000

Benutzer anlegen:

# echo "geheim" | /usr/sbin/pw useradd -n fritz -u 2300 -c "Der Programmierer Fritz" -d /home/fritz -g programmierer -G admins -m -s /bin/tcsh -h 0
Passwort:   . . . . . . . . . . . .  geheim
User-Name:  . . . . . . . . . . . .  fritz
User-ID:  . . . . . . . . . . . . .  2300
Kommentar:  . . . . . . . . . . . .  Der Programmierer Fritz
Homeverzeichnis:  . . . . . . . . .  /home/fritz
Gruppen-Name:   . . . . . . . . . .  programmierer
Gruppen-Mittglied in der Gruppe:  .  admins
Shell:  . . . . . . . . . . . . . .  /bin/tcsh

Leider kann man die maximale Anzahl der Verbindungen nur mit dem inetd einstellen, als Daemon verursacht der FTP-Dienst aber weniger Systemlast.

als Daemon

aktivieren und den FTPD konfigurieren:

# vi /etc/rc.conf
...
ftpd_enable="YES"
ftpd_flags="-8 -h -l -M -m -t 7200 -u 007"
...

starten:

# /etc/rc.d/ftpd start

per Super-Server (inetd)

aktivieren und den inetd konfigurieren:

# vi /etc/rc.conf
...
inetd_enable="YES"
inetd_flags="-wW -C 60 -l -c 20"
...

den FTPD konfigurieren:

# vi /etc/inetd.conf
...
ftp     stream  tcp     nowait  root    /usr/libexec/ftpd       ftpd -8 -h -l -M -m -t 7200 -u 007
...

starten:

# /etc/rc.d/inetd start

Change-Root aktivieren

1. Change-Root - Variante
# vi /etc/ftpchroot
fritz
@programmierer

Der Benutzer fritz kann aus seinem Homeverzeichnis nicht raus, wenn er per FTP eingelogt ist. Ebenso geht es allen Benutzern, die der Gruppe programmierer angehoeren.

1. Change-Root - Variante

Eine andere Moeglichkeit fuer Change-Root wird mit der Konsolenkonfiguration erreicht.

Als erstes muss eine Klasse ftpchroot angelegt werden:

# vi /etc/login.conf
        ftpchroot|FTP Benutzerzugang:\
        :ftp-chroot:\
        :tc=default:
        

jetzt muss der FTP-Benutzer noch der Klasse ftpchroot zugewiesen werden:

# vipw
ftp:*:3000:3000:ftpchroot:0:0:FTP Benutzer:/var/ftp:/sbin/nologin

Man kann den Eintrag auch in einer Bestehenden Klasse mit aufnehmen.

Verbotsliste erstellen

# vi /etc/ftpusers
schultz
@webgruppe

Der Benutzer schultz darf sich, per FTP, nicht einloggen! Ebenso dürfen sich auch alle Benutzer der Gruppe webgruppe per FTP nicht einloggen!

 
Falls nicht anders bezeichnet, ist der Inhalt dieses Wikis unter der folgenden Lizenz veröffentlicht:GNU Free Documentation License 1.2
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki