Gleich vorneweg: Der Default - ftpd chroot()et nicht! Eingeloggte User koennen sich also in allen Verzeichnissen bewegen, die ihnen auch per $SHELL zugaenglich waeren. Das gilt nicht nur fuer normale User, sondern auch fuer Anonymous! Es ist auch moeglich sftp anzuwenden. OpenBSD installiert per Default und damit steht auch seit 2.9(?) sftp und sftpserver zur Verfuegung. Auf den M$ - Muell gehe ich nicht ein. (That’s a point!).

Login - Konfiguration

Zuerst benoetigen wir eine Shell, die wir fuer User verwenden, die sich nur per ftp einloggen koennen sollen. Dazu werfen wir einen kurzen Blick auf die /usr/bin/false. Dieses kleine Script wird spaeter als Login - Shell fuer Anonymous - User dienen.

Note

Die /usr/bin/false wird zwar per Default von OpenBSD installiert, aber sie ist nicht in der /etc/shells eingetragen. Um dem abzuhelfen haengen wir sie einfach an die Datei an:

# echo "/usr/bin/false" >> /etc/shells

Danach benoetigen wir noch einen User Namens ftp. Der ist zwar per Default auch schon vorhanden, aber wem er fehlen sollte, der kann ihn mit:

# useradd -s /usr/bin/false -c "Anonymous Luser" -g ftp ftp

erstellen. Das Homedirectory kann man zwar hier gleich zuweisen, aber ich mache das in der /etc/login.conf.

Eigentuemer, Rechte, Verzeichnisse, ..

Jetzt brauchen wir zuerst mal das Homedirectory fuer den User ftp. Die Wahl des Verzeichnisses steht jedem frei; ich verwende fuer sowas immer /home/$USER, weil es uebersichtilcher ist. Anschlieszend erstellen wir noch Unterverzeichnisse und aendern die Rechte dafuer ab. Alles ins allem laeuft das wie folgt ab:

# mkdir /home/ftp
# chown root.wheel /home/ftp
# chmod 555 /home/ftp

chmod/chown schraenkt die Rechte dahingehend ein, das die Verzeichnisse (und spaeter auch die Dateien) nicht beschreibbar sind. In der Manpage von ftpd(8) werden noch zusaetzliche Verzeichnisse aufgefuehrt, die man zwar anlegen kann, aber nicht musz. Diese Verzeichnisse (~ftp/(etc|pub|bin) stammen noch aus einer Zeit, in der Wu-ftpd das Internet verseucht hat. In den ersten Versionen muszte man zum Beispiel unter ~ftp/bin/* alle Programme ablegen, die fuer Anonymous zur Verfuegung stehen sollten, aber das ist heutzutage nicht mehr noetig.

Benutzer einschraenken

Es gibt zwei Dateien die ftpd fuer die Benutzerverwaltung liest:

/etc/ftpusers

Hier werden die User eingetragen, die sich nicht einloggen sollen.

/etc/ftpchroot

Hier werden die Usernamen eingetragen, die chroot()'et werden sollen.

Die /etc/login.conf

In der /etc/login.conf werden folgende noch folgende Einstellungen benoetigt:

:ftp-chroot:\

Dieser Eintrag ist dafuer zustaendig, dasz User dieser Klasse automatisch chroot()'et werden.

:ftp-dir=~:

Hier gibt man dann das Verzeichnis an, in das sich gepackt werden sollen. Die Tilde wird zu dem dementsprechenden Homedirectory expandiert (in dem Fall also /home/ftp).

Die /etc/login.conf sieht dann anschlieszend so aus:

default:\
   :path=/usr/bin /bin /usr/sbin /sbin /usr/X11R6/bin /usr/local/bin:\
   :umask=022:\
   :datasize-max=256M:\
   :datasize-cur=64M:\
   :maxproc-max=128:\
   :maxproc-cur=64:\
   :openfiles-cur=64:\
   :stacksize-cur=4M:\
   :localcipher=blowfish,6:\
   :ypcipher=old:\
   :tc=auth-defaults:\
   :tc=auth-ftp-defaults:\
   :ftp-chroot:\
   :ftp-dir=~:

Man kann auch eine extra Klasse anlagen und diese Eintraege dort angeben:

ftpusers:\
   :<irgendwelche Eintraege>
   :ftp-chroot:\
   :ftp-dir=~:

ftpd durch die /etc/rc.conf starten

Man kann den ftpd einmal durch die Datei /etc/rc.conf starten oder direkt per $SHELL. Ich werde hier auf beide Moeglichkeiten eingehen, aber zuerst kommt die Variante mit der /etc/rc.conf dran. Bei einer aelteren Version von OpenBSD (=< 2.8) heiszt die Datei /etc/rc.conf.local (ist seit ~2.9 >= anders). Zuerst oeffnen wir die Datei /etc/rc.conf und suchen den Eintrag ftpd_flags. Der wird dann abgeaendert damit er letztendlich so aussieht: ftpd_flags="-DllUSA". Wenn -D als Startparameter mit angegeben wird, musz man die /etc/inetd.conf editieren und sicherstellen das der ftpd dort nicht gestartet wird.

ftpd per $SHELL starten

ftpd liegt unter /usr/libexec/ rum und das ist per Default nicht im $PATH; also nicht wundern wenn beim Aufruf von ftpd ein Command not found kommt. Um ihn zu starten geben wir einfach:

# /usr/libexec/ftpd -DllUSA

ein und das wars dann auch schon. Anschlieszend kann man noch mit echo $? den exit-Status ueberpruefen und sich freuen wenn er bei 0 liegt.

Startparameter

Die Startparameter die man verwenden kann, sind folgende:

-A

Nur Anonymous - Logins. Regulaeren Usern wird der Login untersagt.

-d

Hier wird er im Debugging - Modus gestartet. Die Logdatei wird von syslogd geschrieben und kann dort auch geaendert werden.

-D

Damit kann der ftpd im Hintergrund gestartet werden.

-l

Hier werden alle erfolgreichen - und fehlgeschlagenen - Logins protokolliert.

-n

Hier werden Logins von Anonymous verboten. Es koennen sich nur noch regulaere User einloggen.

-P

Hier kann man auch verbotene Ports zulassen.

-S

Wenn die Datei /var/log/ftpd existiert, wird alles was Anonymous runtergeladen hat, dort protokolliert. Wenn sie nicht vorhanden ist, wird sie nicht erstellt!

-U

Gleichzeitige Verbindungen werden nach /var/run/utmp geloggt und koennen mit who abgerufen werden.

-4, -6

Wenn der ftpd mit -D gestartet wird, stehen diese beiden Optionen zur Verfuegung. -6 steht fuer IPv6 und -4 fuer IPv4 (fast logisch oder?).

-T

Hier kann man das Timeout angeben. Default sind zwei Stunden; wer die ganze Zeit auf dem Server war, wird nach zwei Stunden gekickt).

-t

Hier wird das Timeout fuer Idler angegeben. Default ist 15 Minuten. Bei -T und -t wird die Zeit in Sekunden angegeben!

-u

Ist mit Vorsicht zu genieszen. Hier kann man die umask angeben, die per Default aber schon von der /etc/login.conf vorgegeben wird.

Andere Dateien

Der ftpd liest auch noch andere Dateien:

/etc/ftpwelcome

Die wird ausgegeben wenn man sich mit dem ftp verbindet.

.message

Wenn man in ein Verzeichnis wechselt, wird diese Datei angezeigt. Wenn sie nicht vorhanden ist, dann nicht.

/var/run/ftpd.pid

Hier wird per Default die PID des ftpd’s abgelegt.

/var/log/ftpd

Das ist die Logdatei die per Default verwendet wird.