Serwer FTP w systemie Debian
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
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:
- usługa ProFTPD funkcjonuje:
$ sudo service proftpd status
- ProFTPD nasłuchuje na porcie 21:
$ sudo netstat -tlp|grep proftp
- powiadomienia o błędzie w logu ProFTPD:
$ sudo tail -20 /var/log/proftpd/proftpd.log
- powiadomienia o błędzie w logu ProFTPD TLS:
$ sudo tail -20 /var/log/proftpd/tls.log
- test połączenia na porcie 21 przez telnet:
$ telnet 192.0.2.10 21
- 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
- The ProFTPD Project (www.proftpd.org)
Odnośniki
- ↑ ProFTPD 1.3.5 Release Notes (www.proftpd.org)
- ↑ #707680 proftpd-basic: mod_tls_memcache/0.1 unable to register 'memcache' SSL session cache (Debian Bug Report)
Autor: Georg Schönberger
Autor: Thomas Niedermeier