• Teilen
  • Bookmark "proFTPD" auf del.icio.us
  • Bookmark "proFTPD" auf Digg
  • Bookmark "proFTPD" auf Reddit
  • Bookmark "proFTPD" auf StumbleUpon
  • Bookmark "proFTPD" auf Facebook
  • Bookmark "proFTPD" auf Twitter
  • Bookmark "proFTPD" auf Slashdot

proFTPD

Ein FTP-Server ermöglicht den Dateitransfer (Download/Upload) über das Internet oder über ein privates Netz. Viele Webapplikationen benötigen beispielsweise einen FTP-Server, der schreibend auf das Webroot zurückgreifen kann. In dieser Anleitung geht es um die Einrichtung von proFTPD.

Softwarevoraussetzungen: Paketverwaltung | Editor
Schwierigkeitsgrad: Einfach
Ausgetestet mit folgenden Betriebssystemen: Ubuntu | Debian

Achtung! sudo: In dieser Anleitung verdeutlicht der Befehl sudo, dass die folgende Codezeile mit Root-Rechten ausgeführt werden muss. In normalen Ubuntu Installationen (Root-/VServer siehe Debian) kann dies durch den Befehl sudo erreicht werden.
Bei Debian wird bei der Installation ein Passwort für den Root-Benutzer festgelegt, so kann man sich entweder direkt als Root oder als „normaler“ Benutzer mit Eingabe von su als Root einloggen (Root-Passwort benötigt) → sudo bleibt dann überflüssig!

Ziel

Ziel ist es einen FTP-Server einzurichten, der Zugriff auf /var/www (Webroot des Webservers) und auf die Home-Verzeichnisse der Systembenutzer bietet. Optional ist die Möglichkeit eines anonymen Zugangs, so kann der FTP-Server auch als Downloadserver dienen.

Mögliche Zugänge

1. Anonymer Zugang
Der FTP-Server kann als Downloadserver dienen, ohne Login können Besucher die dort veröffentlichten Dateien herunterladen (nur lesen, nicht schreiben). Die zu veröffentlichten Dateien müssen nach /home/ftp oder /srv/ftp/ kopiert werden.

2. Zugang für Systembenutzer
Systembenutzer können sich über FTP einloggen und auf ihr Homeverzeichnis sowohl lesend, als auch schreibend zurückgreifen. Die Zugangsdaten sind die gleichen, wie auf dem System.

3. Virtuelle Benutzer
proFTPD bietet die Möglichkeit virtuelle Benutzer anzulegen, diesen kann man beliebige Rechte (einer Gruppe/eines Benutzers) versehen werden, so ist nach Belieben schreiben, als auch lesen möglich (hängt von den Rechten der Gruppe/des Benutzers ab).

Installation

Benötigte Pakete

Es wird nur das Paket proftpd benötigt:

user@server:~$ sudo apt-get install proftpd

Bei der Installation wird man nach der Startmethode von proFTPD gefragt, hier wählt man von Inetd.

Hinweis: hierzu muss ein Inet-Daemon vorhanden sein:

user@server:~$ sudo apt-get install openbsd-inetd    # Installation (falls kein Inet-Daemon vorhanden)

Kontrolle des Inet-Daemons

Nachträglich muss überprüft werden, ob in der /etc/inetd.conf

user@server:~$ cat /etc/inetd.conf

…bereits folgende Zeile vorhanden ist:

ftp		stream	tcp	nowait		root		/usr/sbin/tcpd /usr/sbin/proftpd

Falls nicht, muss der Datei

user@server:~$  sudo nano /etc/inetd.conf

am Besten am Ende folgendes anghängt werden:

ftp		stream	tcp	nowait		root		/usr/sbin/tcpd /usr/sbin/proftpd

Anschließend noch den Inet-Daemon neu starten:

user@server:~$ sudo /etc/init.d/openbsd-inetd restart

Konfiguration

Ein Großteil der Konfiguration findet in /etc/proftpd/proftpd.conf statt:

user@server:~$ sudo nano /etc/proftpd/proftpd.conf

Konfigurationsdatei

Dieser hier abgebildete Code ist die Konfigurationsdatei eines proFTPD Servers, gehe sie Stück für Stück durch und ergänze ggf. an deiner Config etwas. Ich hab mir Mühe gemacht die Konfigurationsdatei zu gut wie möglich durch Kommentare (#) zu ergänzen.

# Includes DSO modules
Include /etc/proftpd/modules.conf

# Set off to disable IPv6 support which is annoying on IPv4 only boxes.
UseIPv6				on
# If set on you can experience a longer connection delay in many cases.
IdentLookups			off

ServerName			"ein FTP-Server Name"        # hier kannst du den Servernamen eintragen
ServerType			inetd                        # dieser Parameter gibt an, dass der proFTPD als inetd-Server gestartet wird
DeferWelcome			off

MultilineRFC2228		on
DefaultServer			on
ShowSymlinks			on

TimeoutNoTransfer		600
TimeoutStalled			600
TimeoutIdle			1200

DisplayLogin                    welcome.msg
DisplayChdir               	.message true
ListOptions                	"-l"

DenyFilter			\*.*/

# Use this to jail all users in their homes 
 DefaultRoot			~                      # dieser Parameter lässt zu, dass sich Systembenutzer (oder virtuelle User) in ihr Home (mit ihrem Passwort) verbinden können

# Users require a valid shell listed in /etc/shells to login.
# Use this directive to release that constrain.
 RequireValidShell		off                    # nicht nur Systembenutzer dürfen sich einloggen (wird für einen anonymen Zugang oder virtuellen Benutzer benötigt)

#virtueller user - einstellungen
AuthUserFile /etc/proftpd/ftpd.passwd        # dieser Parameter erlaubt virtuelle Benutzer
AuthPAM off                                  # ...und dieser

# Port 21 is the standard FTP port.  
Port				21           # der Port, auf dem der FTP-Server horchen soll (Standard: 21)


# To prevent DoS attacks, set the maximum number of child processes
# to 30.  If you need to allow more than 30 concurrent connections
# at once, simply increase this value.  Note that this ONLY works
# in standalone mode, in inetd mode you should use an inetd server
# that allows you to limit maximum number of processes per service
# (such as xinetd)
MaxInstances			30           # maximale Verbindungen zum Server

# Set the user and group that the server normally runs at.
User				proftpd               
Group				nogroup

# Umask 022 is a good standard umask to prevent new files and dirs
# (second parm) from being group and world writable.
Umask				022  022
# Normally, we want files to be overwriteable.
AllowOverwrite			on

TransferLog /var/log/proftpd/xferlog
SystemLog   /var/log/proftpd/proftpd.log

<IfModule mod_quotatab.c>
QuotaEngine off
</IfModule>

<IfModule mod_ratio.c>
Ratios off
</IfModule>

# Delay engine reduces impact of the so-called Timing Attack described in
# http://security.lss.hr/index.php?page=details&ID=LSS-2004-10-02
# It is on by default. 
<IfModule mod_delay.c>
DelayEngine on
</IfModule>

<IfModule mod_ctrls.c>
ControlsEngine        off
ControlsMaxClients    2
ControlsLog           /var/log/proftpd/controls.log
ControlsInterval      5
ControlsSocket        /var/run/proftpd/proftpd.sock
</IfModule>

<IfModule mod_ctrls_admin.c>
AdminControlsEngine off
</IfModule>

# This is used for FTPS connections
#Include /etc/proftpd/tls.conf              # wenn aktiviert ist eine verschlüsselte Verbindung möglich (# entfernen und /etc/proftpd/tls.conf konfigurieren)


# Diese Konfiguration ermöglicht einen anonymen Zugang in das Verzeichnis /home/ftp ohne Schreibrechte
# (dieser Code steht bereits in deiner Konfigurationsdatei)
# Du musst, falls du einen anonymen Zugang willst einfach die Rauten (#) entfernen

####### Anfang anonymer Zugang #######
 <Anonymous ~ftp>
   User				ftp
   Group			nogroup
   # We want clients to be able to login with "anonymous" as well as "ftp"
   UserAlias			anonymous ftp
   # Cosmetic changes, all files belongs to ftp user
   DirFakeUser	on ftp
   DirFakeGroup on ftp
 
   RequireValidShell		off
 
   # Limit the maximum number of anonymous logins
   MaxClients			10
 
   # We want 'welcome.msg' displayed at login, and '.message' displayed
   # in each newly chdired directory.
   DisplayLogin			welcome.msg
   DisplayChdir		        .message
 
   # Limit WRITE everywhere in the anonymous chroot
   <Directory *>
     <Limit WRITE>
       DenyAll
     </Limit>
   </Directory>
 
   ## Uncomment this if you're brave.
   # <Directory incoming>
   #   # Umask 022 is a good standard umask to prevent new files and dirs
   #   # (second parm) from being group and world writable.
   #   Umask				022  022
   #            <Limit READ WRITE>
   #            DenyAll
   #            </Limit>
   #            <Limit STOR>
   #            AllowAll
   #            </Limit>
    </Directory>
 
 </Anonymous>
###### Ende anonymer Zugang ########

# Zusätzliche Parameter
<Global>
DefaultTransferMode binary            # binärer Transfermode
RootLogin off                         # root darf sich nicht einloggen (Sicherheitsaspekt) -> Dockstar-User sollten diesen Parameter deaktivieren (# davor), ansonsten können sie sich nicht mit root einloggen
</Global>

# limit Direktive ist optional
<limit LOGIN>
AllowUser anonymous,ftp,user1,user2 ^ftp     # nur User, die hier stehen dürfen sich einloggen (anonymous, ftp werden für anonymen Zugang gebraucht)
#AllowGroup group1                                      # alternativ auch mit Gruppen möglich (# entfernen)
DenyALL                                                 # der Rest wird verweigert
</limit>

Zusätzlich Schritte

Rechte anpassen

Der anonyme Zugang wird jetzt nach /home/ftp oder /srv/ftp/ (einfach schauen, welcher der beiden Ordner existiert) geleitet (falls in der Konfigurationsdatei so festgelegt), dieses Verzeichnis kann man nun mit Dateien füllen, die jede herunterladen darf, allerdings müssen danach noch die Rechte angepasst werden:

user@server:~$ sudo chmod 755 -R /home/ftp/         # so oder
user@server:~$ sudo chmod 755 -R /srv/ftp/          # so

proFTPD neustarten

um den Dienst neustarten zu können muss folgender Befehl ausgeführt werden: und anschließend proFTPD selbst:

user@server:~$ sudo /etc/init.d/proftpd restart 

Dabei erscheint folgende (Fehler-)Meldung, die getrost ignoriert werden kann:

ProFTPd is started from inetd/xinetd.

Nach jeder Änderung der Konfigurationsdatei muss der Befehl sudo /etc/init.d/proftpd restart ausgeführt werden.

Virtuelle User anlegen

Falls in der Konfigurationsdatei richtig konfiguriert, können virtuelle User (müssen angelegt werden) sich in ein beliebiges, festgelegtes Verzeichnis auf den FTP-Server verbinden .

Beispiel mit /var/www (Webserververzeichnis)

Da der Benutzer www-data der einzige Benutzer (außer root) ist, der dort vollen Schreibschutz hat, brauchen wir dessen Benutzerid (uid) und Gruppenid (gid), diese finden wir so heraus:

user@server:~$ id www-data

auf diesem System ist diese in beiden Fällen 33. Nun wechselt man in das Verzeichnis /etc/proftpd/:

user@server:~$ cd /etc/proftpd/

und führen folgenden Befehl aus

user@server:/etc/proftpd/$ sudo ftpasswd --passwd --name VIRTUELLERBENUTZER --uid 33 --gid 33 --home /var/www/ --shell /bin/false 

anschließend müssen wir zwei mal ein Passwort eingeben (mit Eingabetaste bestätigen).
Nach dem Neustart des FTP-Servers:

user@server:~$ sudo /etc/init.d/proftpd restart

kann sich nun ein virtueller Benutzer mit dem Benutzernamen VIRTUELLERBENUTZER in /var/www/ mit dem festgelegtem Passwort einloggen und kann dort mit den Rechten von www-data schreiben.

Grober Ablauf

user@server:~$ id <benutzer>
user@server:~$ cd /etc/proftpd/
user@server:/etc/proftpd/$ sudo ftpasswd --passwd --name VIRTUELLERBENUTZER --uid <Benutzerid> --gid <Gruppenid> --home /Verzeichnis --shell /bin/false
user@server:~$ sudo /etc/init.d/proftpd restart

Mögliche Fehlermeldunge

ftpasswd: /bin/false is not among the valid system shells.  Use of
ftpasswd: "RequireValidShell off" may be required, and the PAM
ftpasswd: module configuration may need to be adjusted.

Diese Fehlermeldung kann eigentlich ignoriert werden, so lange der angelegte Benutzer nach einem Neustart von proFTPD funktioniert (siehe hier).

Empfehlenswerte Links

Diskussion

Geben Sie Ihren Kommentar ein. Wiki-Syntax ist zugelassen:
IUUXN
 
  • Teilen
  • Bookmark "proFTPD" auf del.icio.us
  • Bookmark "proFTPD" auf Digg
  • Bookmark "proFTPD" auf Reddit
  • Bookmark "proFTPD" auf StumbleUpon
  • Bookmark "proFTPD" auf Facebook
  • Bookmark "proFTPD" auf Twitter
  • Bookmark "proFTPD" auf Slashdot
Sonstiges
Drucken/exportieren
Archiv

Archivierter Inhalt der alten Seite