VSFTPD HowTo

Hallo alle zusammen,

Nachdem meine Sceptros HowTo’s doch erstaunlich großen Antrag gefunden haben, wurde ich indirekt um weitere Problemlösungen gebeten. Speziell kam hier der Ruf aus Bayern, wo auf Grund der Umstellung auf Linux doch das ein oder andere Problem auftritt.
Aus diesem Anlass habe ich hier nun mal ein HowTo zum Thema FTP in Petto mit vielen Grüßen nach Bayern.

 

Agenda

  1. Einführung
  2. Installation
  3. Konfiguration

Einführung

FTP ist wohl das verbreiteteste Übertragungsprotokoll im Internet, es ist schnell einfach und in jedem OS fest eingebunden und hat auch so keinerlei Komplikation Probleme. Es kann dadurch auch prima gescriptet werden z.B. für Backups wie Helge erst auf seinem Blog Berichtet hat. Damit bietet es sich ideal für Interne wie Externe Netze an, die unter verschiedenen Betriebssystemen Arbeiten.

Installation

Zuerst brauchen wir eine Linux Installation. Hierbei ist es egal welches wir nehmen. Ich werde auch wie schon in den vergangenen Beiträgen Ubuntu 10.04 LTS nehmen. Das tolle aber an VSFTPD ist aber, dass egal welches Linux ihr verwendet die Konfiguration ist überall gleich und das Packet ist in eigentlich allen Distributionen enthalten. Also fangen wir an das Ganze zu installieren. Das geht mittels diesem Befehl

sudo apt-get install vsftpd

Das war es im Großen und Ganzen auch schon, ihr habt einen FTP-Server. Es geht zwar noch nix aber er läuft.

Konfiguration

Jetzt wird es auch schon ein wenig schwerer, wir müssen unseren FTP so konfigurieren, dass wir auch Zugriff bekommen, dass er sicher ist und stabil läuft. Dazu hab ich euch mal meine config-Datei hochgeladen und soweit es geht übersetzt bzw. Erläutert, dass ihr auch wisst was die einzelnen Parameter machen. Die Parameter die ich verwende ist nur ein Teil, in der original Konfiguration bzw. ManPage findet ihr noch weit mehr Parameter wo ihr halt dann mal schauen müsst was ihr vielleicht noch braucht.

/etc/vsftpd.conf

write_enable=YES
dirmessage_enable=YES #Hier kann man ein- oder ausschalten ob beim ersten Wechsel in ein Verzeichnis eine Meldung ausgegeben werden soll.
nopriv_user=ftpsecure #
ftpd_banner=.Welcome (logging activated). #Diese Meldung erscheint beim anmelden auf dem FTP Server
local_enable=YES #Damit wird die Anwendung von SITE CHMOD erlaubt!
file_open_mode=0755 #Hier kann man die "umask" angeben, die Dateien haben sollen, welche von Anonymous hochgeladen worden sind, nur diesmal für normale User.
local_umask=0022 #Hier die "umask" für Dateien die von lokalen Usern erstellt worden sind.
userlist_deny=NO #Wenn man 'YES' setzt, werden Logins verboten, außer sie sind explizit in der Datei angegeben, die mit userlist_file definiert worden ist.
userlist_enable=YES #Wenn 'YES' gesetzt ist, nimmt vsftpd die Usernamen aus der Liste die mit userlist_file gesetzt wurde.
chroot_local_user=YES #Hier kann man bestimmen ob User mit einem lokalen Account "chroot()"et werden sollen.
local_max_rate=50000 #Hier wird die maximale Transferrate angegeben die für lokale User gelten soll.
anonymous_enable=NO #Diese Option regelt ob Anonymous (die User 'ftp' und 'anonymous') sich überhaupt einloggen dürfen.
anon_world_readable_only=NO #Hier ist Anonymous nur der Download erlaubt.
anon_upload_enable=NO #Hier wird Anonymous erlaubt Dateien hochzuladen. Damit das aber funktioniert, muss write_enable ebenfalls auf 'YES' sein und die Schreibrechte für das Verzeichnis muss gegeben sein.
log_ftp_protocol=YES #Mit dieser Option ist es möglich das erweiterte Logformat zu aktivieren; hier werden dann *alle* Aktivitäten geloggt!
xferlog_enable=YES #Wenn 'YES' gesetzt ist, wird (per Default) nach /var/log/vsftpd.log geloggt. Eine andere Datei kann man mit vsftpd_log_file angeben.
vsftpd_log_file=/var/log/vsftpd.log
xferlog_std_format=YES #Wenn hier 'YES' gesetzt ist, wird im gleichen Format wie WU-FTPD geloggt.
xferlog_file=/var/log/xferlog
connect_from_port_20=YES #Hier kann der Zugriff auf den ftp-data - Port entweder erlaubt oder verboten werden.
pam_service_name=vsftpd #Hiermit kann man den Namen des PAM-Services festlegen. Default ist 'ftp'.
listen=YES #Wenn hier 'YES' angegeben wird, startet vsftpd als Standalone (also ohne die (x)inetd).
#SSH Login
#ssl_enable=YES #Hiermit kann man SSL verwenden. Das setzt allerdings voraus, dass vsftpd mit OpenSSL-Support kompiliert worden ist. Default ist 'NO'
#force_local_data_ssl=YES #Sobald hier 'YES' angegeben wird, werden alle non-Anonymous - User dazu gezwungen eine SSL-Verbindung aufzubauen, damit Daten übertragen werden können. Das funktioniert aber nur, wenn ssl_enable aktiviert ist! Default ist 'YES'
#force_local_logins_ssl=YES #Siehe oben, nur diesmal gilt es nur für die Authentifikation. Default ist 'YES'.
#passwd_chroot_enable=YES #Wenn 'YES' gesetzt ist, dann wird als chroot() das Verzeichnis der /etc/passwd verwendet.
#force_dot_files=YES #Hier kann angegeben werden, ob Dotfiles (Dateien / Verzeichnisse die mit einem Punkt beginnen) beim Aufruf von "ls" angezeigt werden sollen oder nicht.
#ftp_data_port=20 #Hier kann man den ftp-data - Port (Port 20) ändern.
#listen_port=21 #Hier kann man den Standard - Port (Port 21) ändern.

Das sieht nun sehr verwirrend aus, deswegen könnt ihr euch die Datei ohne die ganzen Kommentare hier noch einmal runterladen. Download vsftpd.conf

Anhand des Codes seht ihr aber schon das wir eine weitere Datei brauchen die sich vsftpd.user_list nennt. Diese Datei ist unsere „Gästeliste“, denn nur die, die da drin stehen können bzw. dürfen sich auf unseren FTP verbinden.

vsftpd.user_list
test

User anlegen

Jetzt sind wir soweit mit unserem FTP Server fertig. Wir könnten uns auch theoretisch drauf Verbinden, praktisch aber fehlen uns noch ein paar Sachen, im Moment bekommen wir nur immer den Fehler 550 da wir ja auch Anonymous ausgesperrt haben.

Damit das aber alles so funktioniert, brauchen wir einen User speziell für den FTP Server.

sudo useradd ftpsecure -d /var/www/ftpsecure -s /bin/false
sudo passwd ftpsecure

Damit legen wir einen User nur für den FTP Server an, sollte dieser schon existieren, bekommt ihr eine entsprechende Fehlermeldung, dann könnt ihr einfach weitermachen und braucht nicht mittels passwd ein Passwort setzen.

Nun kommen wir zu unserem Eigentlichen FTP-User.
In diesem Beispiel nennen wir ihn mal „test“. Ihr könnt natürlich nehmen was ihr wollt und auf diesem Weg auch X beliebig viele neue User anlegen für Oma, Opa oder Pinky und Brain. Bei den müsst ihr aber aufpassen, die werden nachts dann immer versuchen sich die Serverherrschaft an sich zu reißen ;-).
Also Fangen wir an

sudo useradd test -m -d /var/www/test -s /bin/false

Zur Aufklärung

  1. Useradd = Legt einen neuen User an
  2. test = der Name eures neuen Users
  3. -m = Legt (sovern nicht vorhanden) ein neues Homeverzeichniss an
  4. -d = gibt an wo das Homeverzeichniss sein soll
  5. /home/test = wo ist das neue Home Verzeichnis
  6. -s /bin/false = Gibt die Loginshell an in dem Fall keine

Mit den folgenden Zeilen setzen wir noch ein paar Parameter. Damit ihr auch wisst was die Machen, steht dahinter immer, was sie machen :-)

sudo passwd test -> Setzt das Passwort für User test
sudo groupadd ftp -> legt die Gruppe ftp an
sudo usermod -g ftp test -> fügt den User test zur Gruppe FTP hinzu
sudo chown test /var/www/test -> Setzt den Besitzer des Verzeichnisses
sudo chgrp ftp /var/www/test ->Setzt die Gruppe des Verzeichnisses

Jetzt müsst ihr den User noch in die Datei /etc/vsftpd.user_list eintragen sonst hat er keinen Zugriff auf den FTP. Das macht ihr am besten wieder mit vi oder einem anderen Editor.

sudo vi /etc/vsftpd.user_list

Warum /bin/false?

Das ist ziemlich einfach, wir möchten ja vermeiden, dass jemand auf unserem Server Schabernack treibt. Aus diesem Grund bekommt er /bin/false verpasst, damit kann er sich weder über SSH oder gar direkt anmelden. So bleibt nur unserem SSH User der direkte Zugriff via SSH, Sicherheit geht schließlich vor.

/bin/false aktivieren

Damit die /bin/false Parameter auch funktionieren, müssen wir diese auch noch in der Datei /etc/shells eingetragen werden. Dazu rufen wir mittels eines Editor unserer Wahl die Datei mit root Rechten auf bei mir ist es vi und tragen in der letzten Zeile /bin/false ein. Das war es auch schon.

sudo VI /etc/shells

Reload

Nachdem wir nun soweit durch sind und nix mehr zu Konfigurieren ist starten wir erstmal VSFTPD das auch ja all unsere Änderungen auch übernommen werden. Das machen wir ganz einfach mit

sudo service vsftpd restart

Final test

Wenn ihr nun alles richtig habt könnt ihr euren ftp Server testen. Das machen wir am besten erst mal lokal.

ftp open localhost
User:test
Pass: ********

Wenn das geklappt hat, könnt ihr von einer anderen Maschine mal versuchen mittels IP Adresse auf euren FTP zu kommen dazu (sofern ein Linux OS) einfach localhorst durch die IP Ersätzen.

 

Bonus

Und funktionierts? Dann heißt es jetzt jubeln und dann ärgern, weil ich euch ein Teil als Script abgenommen habe nämlich das User Anlegen :-) schaut ihn euch mal an.
Damit das ganze auf dauer noch Einfacher wird, packt euch den Script in:

/root/.bashrc

dort gebt ihr in der letzten Zeile

alias useraddftp='/etc/useraddftp.sh'

nun könnt ihr ganz einfach mittels

useraddftp

neue FTP-User Hinzufügen.

Vorher natürlich noch

chown root:root test.sh
chmod 770 test.sh

Die Rechte festlegen.

Download

Bei fragen wie immer unten in die Kommentare ich versuch euch dann zu helfen.

 

Disclaimer

Ich Übernehme wie immer keine Haftung für eure Systeme. Die Benutzung der Scripte und HowTo’s geschieht auf eigene Gefahr hin.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *