AG-Intra.net Arbeitsgemeinschaft
Intranet

Home
Was ist ein Intranet
Grundlagen
Netzwerke
Linux
Windows
Java
Sicherheit
Datenbanken
Projekte
Links
Impressum
Mitmachen ?
Diskussionsforum
Letztes Update:
13.11.2000
Liebe Besucher, ein aktueller Hinweis in eigener Sache:
Es ist beabsichtigt, diese Seiten und die Domain im Januar/Februar 2004 auf einen anderen Server umzuziehen. Es ist leider nicht auszuschließen, daß es während des Umzugs zu technischen Problemen mit diesen Seiten kommen wird. Insbesondere im eMail-Bereich wird es vermutlich Probleme geben. Wenn Sie fragen haben oder mich sonstwie erreichen wollen empfehle ich an rebel@snafu.de zu posten.
Nachdem der Umzug abgeschlossen ist, wird es allerdings auch inhaltliche Änderungen während des ersten Halbjahrs 2004 geben. Keine Angst. Es werden keine Inhalte verlorengehen, aber die Struktur der Seiten wird komplett geändert. Diese Seite hat eben eine andere Entwicklung genommen seit 2000, als das Projekt gestartet wurde ;-) Ich werde mich bemühen, daß bei ihnen vorhandene alte Bookmarks wenigstens zu einem Verweis auf die Neustruktur führen, und die gesuchten Inhalte für sie trotzdem leicht und schnell auffindbar sein werden.
Die eigentlich zu dieser Seite gehörenden Domains ag-intra.com, ag-intra.org und ag-intra.de werden von mir geschlossen bzw. gelöscht und unregistriert.

Anleitung - WuFTPD für Guest FTP einrichten und absichern 
Copyright 2000 by Frank Gehde

Dies ist eine Anleitung die Ihnen die nötigsten Informationenzum Thema Guest FTP nahebringt. Gerade der WuFTPD hat aber eine hervorragende Dokumentation (versuchen sie mal man ftpaccess) die Sie später zu Rate ziehen sollten.

Sie benötigen hierfür den WuFTPD. Dieser ist auf SuSE 6.4 enthalten. Es ist dringen angeraten, sich das Update von SuSE zu besorgen (siehe auch Einspielen von Updates und Patches), da der ausgelieferte WuFTPD schwere Sicherheitsmängel aufweist.
Sie müssen sicherstellen, daß der WuFTPD auch installiert ist. Bei SuSE ist standardmäßig der ProFTD zur Installation ausgewählt. Wenn der WuFTPD installiert ist, müßen Sie ihn als erstes aktivieren.
Der WuFTPD wird von inetd aus gestartet. Deshalb finden sich die Einstellungen zum Start in der Datei /etc/inetd.conf. Achten Sie darauf, daß dort die Option -a angegeben ist. Dadurch wird sichergestellt, daß die Datei /etc/ftpaccess verarbeitet wird. Die gesamte Zeile darf nicht auskommentiert sein, also kein "#" Zeichen am Anfang aufweisen (sie auch Erste Schritte nach der SuSE Installation).
Mit dem Kommando

killall -HUP inetd     (?!?!)

können Sie den inetd nach dem Ändern der inetd.conf-Datei neu starten, damit er die neuen Einstellungen kennt, und bei Bedarf den WuFTPD aufruft.

Der WuFTP kennt drei verschiedene FTP-Möglichkeiten: Anonymes FTP, Real FTP und Guest FTP. Anonymes FTP, ist der Zugriff mit dem Nutzernamen "anonymous" und der eigenen eMail-Adresse als Passwort. Der FTP Server gibt uns dann eine "chroot"-Umgebung vor, in der wir beliebig herunterladen können, und oft auch in ein Verzeichnis hochladen können. "chroot" heißt hierbei change root. Tatsächlich liegt das Verzeichnis, in dem wir uns austoben (bei SuSE 64) unter /usr/local/ftp. Wir können nicht höher in die Verzeichnis-Hierarchie wechseln, wenn wir per FTP eingeloggt sind. Uns wird dort vorgetäuscht, daß wir uns in / befinden. Das root-Verzeichnis wird also für diesen einen Login-Prozess woanders hin verschoben. Aus diesem Grunde benötigen wir an der Stelle, zu der es verschoben wird auch eine spezielle Verzeichnisstruktur und Kopien von einigen Unix-Kommandos.
Bei Real-FTP melden Sie sich mit einem tatsächlich auf dem System (in der /etc/passwd) vorhandenen Nutzernamen und mit dessen Passwort ein. Der FTP-Server loggt Sie nun zuerst in das entsprechende Home-Verzeichnis ein. Dieses Szenario habe ich in dem Beispiel mit der Windows-Freigabe und smbmount auch gezeigt. Der Nachteil ist aber der folgende. Wenn Sie so eingeloggt sind, dann können Sie sich tatsächlich auf der gesamten UNIX-Maschine bewegen. Sie können also auch zB. in das Verzeichnis /root wechseln (daß wir dort kein Datei-Listing bekommen, steht auf einem anderen Blatt). Gerade in dem genannten Beispiel ist dies aber unerwünscht. Viel schöner wäre es, wenn auch hier mit einer chroot-Umgebung gearbeitet werden könnte, sich der eingeloggte Nutzer nur in seinem Homeverzeichnis austoben könnte. Und genau das ist unter Guest FTP möglich, weshalb wir uns dies hier einmal genau ansehen wollen.

Ein Standard SuSE ermöglicht erst einmal kein Anonymous-FTP. Real FTP ist aber möglich. Wenn ich hier nur unter einem bestimmten Nutzernamen einigen Freunden Zugriff auf bestimmte Grafikdateien oder Sonstigem gewähren möchte, so ist es für mich ärgerlich, daß sie alledottedFiles (also Dateien die mit einem Punkt beginnen) sehen können, und daß sie sich in der Verzeichnisstruktur nach oben bewegen können.
Um dies zu verhindern, werden wir einen bestimmten Nutzer anlegen, der nur Guest FTP durchführen kann. Denn seine dotted Files können Sie gefahrlos löschen. Achten Sie darauf, falls sie einen bestehenden Nutzer Account jetzt ändern wollen, daß dieser nicht mehr mit einer Shell arbeiten kann, oder sonst etwas tun kann als FTP, wenn wir fertig sind. Optimalerweise legen Sie dazu also einen neuen Nutzer an. Tun Sie das mit Yast. Als Beispiel sei es der neue Nutzer "freunde", da ich ja Freunden die Zugangskennung mitteilen will sowie das spezielle Passwort. Als Shell weisen Sie dem neuen Nutzer /bin/false (Unter SuSE so vorhanden) zu. Ein Login ist damit für den Nutzer nicht möglich.
Um chroot-FTP zu ermöglichen, modifizieren Sie die /etc/passwd jetzt wie folgt. Die ursprüngliche Zeile:

freunde:x:516:100:fuer freunde:/home/freunde:/bin/false

ändern Sie bitte in

freunde:x:516:100:fuer freunde:/home/freunde/./graphics/:/bin/false

In diesem Fall bleiben wir bei dem Beispiel, daß in der Windows-Freigabe genannt ist, und in dem wir ebenfalls das Verzeichnis graphicsals interessantes Verzeichnis verwendet haben. Nur daß wir hier nicht den Nutzer frankie (ignorieren sie das, wenn sie nicht das smbmount kapitel gelesen haben), der ja auch Shell-Zugang haben soll, sondern  die neuen Nutzer freunde verwenden. Wenn Sie das wie hier gezeigt einstellen, dann muß also im home-Verzeichnis von freundeein Verzeichnis namens graphics existieren. Die Änderung betrifft das chroot. Das vor /./ genannte Verzeichnis ist das Verzeichnis, für daß das chroot gilt. In diesem müssen wir die später genannten Dateien anlegen. Das Verzeichnis nach dem /./ ist das Verzeichnis, in das der Nutzer nach erfolgreichem FTP-Login gleich mit einem automatischen chdir gebracht wird. Dort startet der FTP-Nutzer also seine Session. Das ist nützlich, weil man nicht allen Leuten erklären muß, was sie von dem ganzen Zeug zu halten haben, das sie zuerst auf dem Bildschirm sehen. Die "freunde" kommen ja zu einem bestimmten Zweck, und sehen so auf den ersten Blick, daß was sie auch sehen sollen, nämlich das graphics-Verzeichnis.
Es bietet sich direkt an, für derartige FTP-Logins auch gleich noch eine neue Gruppe anzulegen. Dazu fügen wir in die Datei /etc/group die folgende Zeile ein:

fclient::200:freunde

Danach Ändern wir die Gruppen-ID des Nutzers freunde in der /etc/passwd auch gleich von 100 auf 200:

freunde:x:516:200:fuer freunde:/home/freunde/./graphics/:/bin/false

So, daß Nutzermanagement für unseren Guest-FTP Login ist erledigt. Kommen wir nun zu den Dateien die ein chroot erwartet. Für eine chroot-Umgebung müssen bestimmte Systemdateien vorhanden sein, damit der FTP-Server Prozess arbeiten kann, da er ja selbst keinen Zugriff mehr auf das echte Wurzelverzeichnis / hat. Diese Verzeichnisse sind im betreffenden Fall also erst einmal anzulegen.
Hierbei ist sehr hilfreich, daß SuSE den Anonymous-FTP Zugriff in der Standard Installation zwar nicht gestattet, aber die notwendige Verzeichnisstruktur trotzdem erstellt hat. Es ist nämlich von OS zu OS und Distribution zu Distribution verschieden, wie diese Umgebung aussehen muß. Aber wir haben ja etwas, woran wir uns prima orientieren können. Die gewünschten Verzeichnisse liegen unter /usr/local/ftp. Das einzige Verzeichnis, welches wir nicht weiter beachten ist pub. Dort sind bei Anonymous-FTP die eigentlichen Dateien abgelegt. Aber wir haben dafür ja unser Verzeichnis /home/freunde/graphics.
Wenn Sie ls /usr/local/ftp machen, sehen Sie die Verzeichnisse, die sie jetzt unter /home/freunde anlegen müßen. Dazu wechseln Sie mit cd /home/freunde dorthin und geben dann folgendes ein:

mkdir bin dev etc lib msgs usr

wechseln sie jetzt in das Verzeichnis usr und geben folgendes ein

mkdir bin

So, die Verzeichnisse sind erstellt. Jetzt benötigen Sie Inhalte. Dazu nehmen Sie einfach die Inhalte aus den entsprechenden Verzeichnissen aus /usr/local/ftp. Es bietet sich an, diese zum Beispiel mit dem Midnight Commander (zum Start mc eingeben) zu kopieren. Wenn nicht, kopieren Sie die Inhalte mit cp /usr/local/ftp/bin/* /home/freunde/bin  etc. etc.
So kommen wir nun zu den Dateirechten. Bei dem ganzen Prozess haben wir Verzeichnisse und Dateien erzeugt, die root gehören. Wenn wir also im Verzeichnis /home/freunde stehen geben wir folgendes ein:

chmod 0555 *

danach gehen wir noch in das Verzeichnis usr und ändern die Verzeichnisrechte von bin auch darauf

cd usr
chmod 0555 *

So, jetzt setzen wir die Rechte für die Dateien. Fangen wir im Verzeichnis /home/freunde/bin an. Dort könnten jetzt Dateien wie ls, compress und tar stehen. Setzen Sie die Rechte alle auf 111:

chmod 111 *

Wenn Sie das Verzeichnis dev mittels Midnight Commander kopiert haben, enthält es bereits ein Geräte-File namens NULL. Wenn nicht, legen Sie es dort an

mknod -m 666 zero c 1 5

Als nächstes sind die Dateien unter /etc relevant. Dort müßen jetzt die Dateien group und passwd stehen. Die Rechte sollten bei root bleiben und die Inhalte sollten etwa so aussehen (für die passwd):

root:*:0:0:Superuser:/:bin/false
freunde:*:516:200::/graphics:/bin/false

im groupfile sollte es so aussehen:

fclient::200:freunde

also genau wie im normalen groupfile.
Jetzt legen Sie noch das Verzeichnis

mkdir /home/freunde/upload

an. Dies soll das einzige Verzeichnis sein, in das Uploads erlaubt sind. Mit chmod 3773 uploads setzen wir die Rechte noch freundlich.

So, kommen wir jetzt zum harten Teil. Die Datei /etc/ftpaccess. Das ist nur hart, weil wir beim ersten Betrachten nur Bahnhof verstehen. Ein man ftpaccess hilft da wie immer weiter. Aber wir haben ja ein konkretes Beispiel, für das wir die Änderungen hier mal zeigen. Also, die Original-Datei unter SuSE find ich erstmal grundsätzlich dünn. Da ist sicher einiges zu machen. Aber konzentrieren wir uns erstmal auf das wesentliche. Hier die Datei, wie ich Sie jetzt verändert habe:

email ftpadmin@localhost

class local real,guest *
class remote real,guest *

guestgroup fclient

limit all 10 Any /etc/ftpmsg.dead

readme README* login
readme README* cwd=*

shutdown /etc/shutmsg
message /welcome.msg login
message .message     cwd=*

upload /home/freunde * no
upload /home/freunde/uploads yes root root 0440 nodirs
upload /home/freunde/* /         no
upload /home/freunde/* /bin      no
upload /home/freunde/* /dev      no
upload /home/freunde/* /etc      no
upload /home/freunde/* /lib      no
upload /home/freunde/* /msgs     no
upload /home/freunde/* /uploads  no
upload /home/freunde/* /usr      no

compress  no all
tar       no all
delete    no fclient
overwrite no fclient
rename    no fclient
chmod     no fclient
umsak     no fclient

log commands real,guest
log transfers guest,real inbound,outbound

noretrieve core .notar passwd group ls
noretrieve /home/freunde/bin
noretrieve /home/freunde/dev
noretrieve /home/freunde/etc
noretrieve /home/freunde/lib
noretrieve /home/freunde/msgs
noretrieve /home/freunde/uploads
noretrieve /home/freunde/usr

(So, diese Einstellungen funktionieren zwar erstmal, aber noch nicht so wie erwartet. Wird überarbeitet und nachgereicht)
Uff, was haben wir damit getan ? Als erstes gibt man die eMail-Adresse des Administrators an. Das sollte eigentlich ftpadmin sein. Als nächstes werden Nutzerklassen definiert (man beachte, daß anonymous hier fehlt, weil wir so einen Zugriff zur Zeit nicht wollen).
Die nächste Anweisung ist entscheidend. Mit guestgroup fclients erhalten die Mitglieder der (systemweiten) Gruppe fclients nur noch Guest-FTP Zugang. Das heisst durch diese Anweisung wird dem FTPD mitgeteilt, daß er für den Server eine ChangeRoot Umgebung starten soll.
Mit limit wird der Zugriff zunächst beschränkt (siehe manpage).
Die readme und message Direktiven stehen für den Pfad, wo die entsprechenden Dateien zu finden sind. Damit ließe sich, wenn die Pfade denn korrekt gesetzt sind, und die entsprechenden Dateien vorhanden wären, eine gute Kommunikation mit dem Nutzer herstellen, indem ihm immer die passenden Kommentare zum entsprechenden Verzeichnis angezeigt werden. Dies wird hier auch nicht weiter diskutiert.
Die upload-Anweisungen sind entscheidend. Die erste verbietet erst einmal generell alle Uploads. Mit der zweiten wird dann konkret der Upload in das uploads Verzeichnis freigegeben. Die Dateien gehören danach root, und haben die genannten Dateirechte. Ferner dürfen keine Directorys im uploads Verzeichnis angezeigt werden. Unter den genannten Umständen funktionieren Uploads, aber der Nutzer sieht die Dateien in dem Verzeichnis nicht mal.
Die folgenden Upload-Anweisungen verbieten den Upload in die anderen Verzeichnisse unseres Homeverzeichnisses von freunde.
Zu den folgenden Befehlen läßt sich festlegen, ob die folgend genannten Klassen oder Gruppen diese ausführen dürfen, oder nicht. Aus Sicherheitsgründen darf in diesem Beispiel keiner etwas davon (Dafür müssen wir ab und an mal die Verzeichnisse aufräumen).
Schließlich wird das Logging komplett angeschaltet. Dies führt zu umfangreichen Log-Dateien. Wer diese zu groß findet, schaltet einfach das commands-Logging ab. Man sieht dann immer noch die Transfers.
Mit noretrieve legen wir schließlich fest, welche Dateien nicht heruntergeladen werden dürfen. Was mein Beispiel mit den Dateien angeht, funktioniert das auch. Meine Beispiele mit den Verzeichnissen funktionieren allerdings nicht (ich hatte sie aus einem anderen Beispiel). Hmm. Das lösen wir noch.

Abgesehen davon funktionierte bei mir nach dieser Vorgehensweise der Zugriff über Guest FTP problemlos. Die User kamen nicht mehr über das Verzeichnis freunde in die Reste des Dateisystems hinaus. Und für den Zugriff ist dennoch ein bestimmter Nutzername und ein bestimmtes Passwort erforderlich. Somit stehen die Daten auch nicht der ganzen Welt offen.

Weitere Hinweise finden Sie vielleicht auch noch unter: Developer Shed


zurück zur Linux Übersicht

Copyright 2000 by Frank Gehde