Serwer FTP w systemie Debian

Z Thomas-Krenn-Wiki
Przejdź do nawigacji Przejdź do wyszukiwania

ProFTPD jest szeroko rozpowszechnionym, dobrze konfigurowalnym serwerem FTP dla systemów bazujących na UNIX-ie. W tym artykule opisujemy instalację i konfigurację aplikacji ProFTPD w Debianie. W poniższym przykładzie konfigurowane jest szyfrowanie TLS na serwerze FTP, w celu zabezpieczenia komunikacji między klientem FTP (np. FileZilla) i serwerem FTP - ProFTPD. W systemie testowym wykorzystywany jest Debian Wheezy 7.7.

Instalacja

Konfiguracja ProFTPD: ProFTPD może zostać uruchomiony w trybie standalone lub jako usługę przez inetd.

Pakiet ProFTPD jest zawarty w domyślnym repozytorium systemu Debian Wheezy i może zostać łatwo zainstalowany następującą komendą:

sudo apt-get install proftpd-basic

W trakcie instalacji należy wybrać czy serwer FTP ma zostać uruchomiony jako usługa przez inetd lub jako samodzielny serwer w trybie standalone. W przykładzie wybrana została opcja standalone.

Konfiguracja

Poniżej opisana jest konfiguracja serwera ProFTPD. Pliki konfiguracyjne ProFTPD zawarte są głównie w katalogu /etc/proftpd/.

Jednak najlepiej, gdy niektóre pliki konfiguracyjne są zapisywane w katalogu conf.d. Podczas aktualizacji pakietów pozostają one niezmienione. Przez include direktive zostają wszystkie pliki z katalogu conf.d dodane do proftpd.conf.

W przykładzie plik custom.conf wykorzystywany jest do dostosowania serwera ProFTPD:

$ sudo vi /etc/proftpd/conf.d/custom.conf
# Ftp user doesn't need a valid shell
<Global>
    RequireValidShell off
</Global>
# If desired turn off IPv6
UseIPv6 off
# Default directory is ftpusers home
DefaultRoot ~ ftpuser
# Limit login to the ftpuser group
<Limit LOGIN>
    DenyGroup !ftpuser
</Limit>

Następnie plik jest zapisywany i serwer ProFTPD restartowany:

$ sudo service proftpd restart

Szyfrowane przez (SSL / TLS) połączenie FTP za pośrednictwem mod_tls

Moduł TLS umożliwia szyfrowane połączenie z serwerem ProFTPD przez SSL / TLS.

Uwaga: Podczas transferu przez protokół FTP bez szyfrowania zarówno login jak i normalne dane przekazywane są w postaci normalnego tekstu. Dlatego w środowiskach produkcyjnych zalecanym jest stosowanie SSL / TLS.

Domyślnie ProFTPD wspiera moduł TLS:

$ sudo proftpd -vv | grep tls
  mod_tls/2.4.3

Jest zawarty w /etc/proftpd/modules.conf i automatycznie aktywny.

Tworzenie certyfikatu

Niestepujący przykład wykorzystuje samopodpisany certyfikat Snakeoil pakietu ssl-cert (vide Odnowienie domyślnego certyfikatu SSL snakeoil w Ubuntu):

$ sudo apt-get install ssl-cert
$ sudo make-ssl-cert generate-default-snakeoil --force-overwrite
$ sudo ls -la /etc/ssl/certs/ssl-cert-snakeoil.pem
-rw-r--r-- 1 root root 997 Oct 30 08:25 /etc/ssl/certs/ssl-cert-snakeoil.pem
$ sudo ls -la /etc/ssl/private/ssl-cert-snakeoil.key
-rw-r----- 1 root ssl-cert 1704 Oct 30 08:25 /etc/ssl/private/ssl-cert-snakeoil.key

Konfiguracja TLS

Aktualny pakiet Debiana ProFTPD w wersji 1.3.4a-5+deb obsługuje jedynie TLSv1, jednakże nie v1.1 lub v1.2. Jest to możliwe dopiero od wersji 1.3.5.[1]

W katalogu conf.d jest z kolei tworzony osobny plik konfiguracyjny dla SSL / TLS:

$ sudo vi /etc/proftpd/conf.d/tls.conf
<IfModule mod_tls.c>
        TLSEngine on
        TLSLog /var/log/proftpd/tls.log
        TLSProtocol TLSv1
        TLSRSACertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem
        TLSRSACertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
        TLSVerifyClient off
        TLSRequired on
</IfModule>

Następnie ProFTPD jest restartowany.

Tworzenie użytkownika FTP

Dla dostępu FTP tworzony jest osobny użytkownik, bez ważnego loginu shella i z katalogiem home /var/www/upload:

$ sudo adduser ftpuser --shell /bin/false --home /var/www/upload
Adding user `ftpuser' ...
Adding new group `ftpuser' (1001) ...
Adding new user `ftpuser' (1001) with group `ftpuser' ...
Creating home directory `/var/www/upload' ...
Copying files from `/etc/skel' ...
Enter new UNIX password: 
Retype new UNIX password: 
passwd: password updated successfully
[...]

Anonimowy dostęp

Aby umożliwić anonimowy dostęp z uprawnieniami tylko do odczytu tworzony jest następujący plik:

$ sudo vi /etc/proftpd/conf.d/anon.conf
<Anonymous ~ftpuser>
        User    ftp
        Group   ftp
        # Users can also login with ftp
        UserAlias       anonymous       ftp
        # All files belong to ftp
        DirFakeUser on ftp
        DirFakeGroup on ftp
        RequireValidShell       off
        MaxClients      10
        <Directory *>
                <Limit WRITE>
                DenyAll
                </Limit>
        </Directory>
</Anonymous>

Aby użytkownik ftp mógł uzyskać dostęp do ananimowego obszaru FTP musi zostać on dodany do grupy ftpuser:

$ sudo adduser ftp ftpuser
Adding user `ftp' to group `ftpuser' ...
Adding user ftp to group ftpuser
Done.

Analiza w przypadku problemów z połączeniem

W przypadku wystąpienia problemów podczas tworzenia połączenia FTP może zostać skontrolowane czy:

  1. usługa ProFTPD funkcjonuje: $ sudo service proftpd status
  2. ProFTPD nasłuchuje na porcie 21: $ sudo netstat -tlp|grep proftp
  3. powiadomienia o błędzie w logu ProFTPD: $ sudo tail -20 /var/log/proftpd/proftpd.log
  4. powiadomienia o błędzie w logu ProFTPD TLS: $ sudo tail -20 /var/log/proftpd/tls.log
  5. test połączenia na porcie 21 przez telnet: $ telnet 192.0.2.10 21
  6. test połączenia na porcie 21 z TLS: $ openssl s_client -connect 192.0.2.10:21 -starttls ftp

Powiadomienie: memcache support not enabled

W niektórych przypadkach podczas ponownego uruchomienia serwera ProFTPD może wystąpić następujące powiadomienie:

$ sudo service proftpd restart
[ ok ] Stopping ftp server: proftpd.
[....] Starting ftp server: proftpddebian proftpd[4856]: mod_tls_memcache/0.1: notice: unable to register 'memcache' SSL
session cache: Memcache support not enabled
. ok

Problemem tutaj jest fakt, że pakiet Debiana nie jest skompilowany z --enable-memcache.[2]

Dlatego moduł może zostać wykomentowany - umieszczenie znaku hash na początku wiersza:

$ sudo vi /etc/proftpd/modules.conf
[...]
# LoadModule mod_tls_memcache.c
[...]

Następny restart przebiega bez powiadomienia memcache:

$ sudo service proftpd restart
[ ok ] Stopping ftp server: proftpd.
[ ok ] Starting ftp server: proftpd.

Dalsze informacje

Odnośniki


Autor: Georg Schönberger


Autor: Thomas Niedermeier

Powiązane artykuły

Mailman w Debianie
NIC Bonding w Debianie
Udostępnienie w Sambie z uwierzytelnieniem