# » course » networking-professional » Linux.08

8. Serwer plików (FTP)

FTP, protokół transferu plików (ang. File Transfer Protocol) – protokół komunikacyjny typu klient-serwer wykorzystujący protokół TCP według modelu TCP/IP (krótko: połączenie TCP), umożliwiający dwukierunkowy transfer plików w układzie serwer-FTP <=> klient-FTP.

Porównanie wybranych serwerów FTP

ProgramOpisLink
vsFTPd
Very Secure Ftp Daemon
bardzo mały, napisany głównie z myślą o szybkości i bezpieczeństwie, doskonały do zastosowania w sieciach LAN i serwisach od dużej przepustowości, jest najlepszym rozwiązaniem jeżeli tylko oferowana funkcjonalność jest wystarczająca.http://vsftpd.beasts.org/
https://pl.wikipedia.org/wiki/Vsftpd
PureFTPdtrochę większy od vsftpd ale i oferuje więcej funkcjonalności, poza tym tak samo jak vsftp napisany z myślą o szybkości i nie posiada luk bezpieczeństwa, zaprojektowany specjalnie dla nowoczesnych jąder Linux i FreeBSDhttp://www.pureftpd.org/
https://pl.wikipedia.org/wiki/Pure-FTPd
ProFTPdto zupełnie inny gabaryt niż dwa poprzednie. Jednak jest on bardziej rozbudowany i konfigurowalny niż dwa poprzednie, niestety nie ma najlepszej opinii w kwestii bezpieczeństwa. Oferuje składnię plików konfiguracyjnych podobną do Apache i równie wysoką konfigurowalnośćhttp://www.proftpd.org/

UWAGA!!
Instrukcja zakłada korzystane z domeny nazwa.local, której konfigurację podano w rozdziale 06 DNS, serwer nazw domenowych.

8.1 Instalacja serwera vsFTPd

Dla systemu Linux istnieje wiele programów pełniących rolę serwera FTP. W tej instrukcji przedstawiony jest instalacja i konfiguracja serwera vsftpd.

  1. Aktualizacja repozytorium:
    # apt update
  2. Instalacja serwera vsftpd
    # apt install vsftpd
  3. Dane serwera (dla użytkowników anonimowych) przechowywane są w katalogu /srv/ftp/ w celu testów utworzymy tam plik.
    # echo "losowy tekst" > /srv/ftp/test.txt
  4. Zaraz po instalacji serwer ftp jest gotowy do połączenia – domyślnie nie jest dozwolony jest dostęp anonimowy (login: anonymous). Aby go włączyć należy zmienić w pliku /etc/vsftpd.conf zapis
    
    # Allow anonymous FTP? (Disabled by default).
    anonymous_enable=YES
    
    Możemy teraz przetestować serwer łącząc się do niego z klienta poleceniem ftp
    
    C:\Users\Administrator>ftp nazwa.local
    Połączony z nazwa.local.
    220 (vsFTPd 3.0.3)
    Użytkownik (nazwa.local:(none)): anonymous
    331 Please specify the password.
    Hasło: ENTER - nie ma hasła!
    230 Login successful.
    ftp>
    
  5. Gdy jesteśmy połączeni z serwerem możemy wyświetlić jego zawartość poleceniem dir lub ls
    
    ftp> dir
    200 PORT command successful. Consider using PASV.
    150 Here comes the directory listing.
    -rw-r--r-- 	1 0 	0 		13 Feb 29 16:45 test.txt
    226 Directory send OK.
    ftp: 64d bajtów odebranych w 0,00Sekund 66000,00Kbajtów/sek.
    ftp> ls
    
  6. To samo możemy zobaczyć używając przeglądarki www podając jako adres: ftp://nazwa.local
    Oczywiście użytkownik anonymous posiada jedynie prawo do odczytu na serwerze. W takiej konfiguracji serwer ftp może służyć jedynie do publikowania przez nas plików, które inni będą mogli tylko pobrać. Jeśli chcemy aby nasi użytkownicy mogli także zamieszczać pliki na serwerze (na przykład strony HTML), trzeba zmienić konfigurację serwera.

8.2 Włączenie dostępu dla użytkowników lokalnych

W celu umożliwienia dostępu (oraz zapisu) lokalnym użytkownikom do serwera FTP trzeba wprowadzić drobne zmiany w pliku konfiguracyjnym /etc/vsftpd.conf

  1. Włączamy dostęp dla użytkowników lokalnych w pliku /etc/vsftpd.conf
    
    # Uncomment this to allow local users to log in.
    local_enable=YES
    
  2. Restartujemy serwer vsftpd
    
    # service vsftpd restart
    
  3. Z poziomu wiersza poleceń (CMD) na kliencie polecaniem ftp sprawdzamy możliwość logowania się na konto student, a następnie wyświetlamy zawartość jego katalogu poleceniem dir
  4. Teraz każdy lokalny użytkownik ma dostęp do swojego katalogu domowego przez FTP jednak bez prawa zapisu, aby umożliwić zapis wprowadzamy następną zmianę w /etc/vsftpd.conf
    
    # Uncomment this to enable any form of FTP write command.
    write_enable=YES
    
  5. Restartujemy serwer
    
    # service vsftpd restart
    
  6. Na systemie klienckim uruchamiamy program graficzny do łączenia się z FTP (np. FileZilla, WinSCP, TotalCommander) i logujemy się na użytkownika student
  7. Po udanym logowaniu widzimy strukturę katalogów i zawartość katalogu /home/student
  8. Możemy wykonać próbę transferu pliku, aby efekt był widoczny także na serwerze HTTP możemy plik skopiować bezpośrednio do katalogu /home/student/public_html/
  9. Efekt możemy sprawdzić oczywiście także przy pomocy przeglądarki internetowej.

Od tej chwili wszyscy użytkownicy naszego serwera mogą na nim zapisywać pliki w swoich katalogach oraz z zapisane tam pliki pobierać na swoje lokalne komputery.

8.3 Pozwolenie na logowanie użytkownika root w vsftpd

Domyślnie root nie ma możliwości dostępu do ftp ponieważ jego login jest na liście znajdującej się /etc/ftpusers lub /etc/vsftpd/ftpusers

Usuń root'a z tej listy. Zapisz plik. Zrestartuj vsftpd. Od tego momentu root będzie mieć możliwość logowania do ftp.

Jeżeli to nie działa konieczne może być sprawdzenie i dodanie (odkomentowanie) wpisu w pliku vsftpd.conf


userlist_deny=YES