Serwer FTP Linux – jak skonfigurować go w Ubuntu

Oskar Gajzler
Przez
Oskar Gajzler
Redaktor IINTE.edu.pl, na co dzień zajmuje się technologiami internetowymi i tłumaczeniem skomplikowanych tematów na prosty język. Pisze poradniki o tym, jak załatwiać sprawy przez internet, jak...
11 min czytania

1. Czym jest FTP i kiedy ma sens w 2026 roku?

FTP (File Transfer Protocol) to klasyczny protokół do wymiany plików między klientem a serwerem.

Do dziś wykorzystywany jest m.in. do:

  • zarządzania plikami na serwerach WWW,
  • udostępniania repozytoriów plików w firmach i szkołach,
  • prostych archiwów (np. publiczne biblioteki plików).

W nowoczesnych wdrożeniach rozważ FTPS (FTP przez TLS) lub alternatywnie SFTP (w ramach SSH), ponieważ „czysty” FTP przesyła hasła i dane w postaci niezaszyfrowanej. W tym poradniku pokazuję klasyczny FTP z naciskiem na bezpieczniejsze ustawienia oraz przygotowanie do FTPS.

2. Wymagania wstępne

Do uruchomienia serwera FTP na Ubuntu potrzebujesz:

  • serwera lub maszyny wirtualnej z Ubuntu Server 20.04 / 22.04 / nowszym,
  • dostępu root lub konta z uprawnieniami sudo,
  • podstawowej znajomości terminala,
  • (opcjonalnie) publicznego adresu IP, jeśli serwer ma być dostępny z internetu.

Wszystkie polecenia poniżej wykonujemy w terminalu jako użytkownik z sudo.

3. Instalacja serwera FTP vsftpd

3.1. Aktualizacja systemu

Najpierw zaktualizuj pakiety:

sudo apt update && sudo apt upgrade -y

3.2. Instalacja vsftpd

Zainstaluj serwer FTP:

sudo apt install vsftpd -y

Po instalacji sprawdź, czy usługa działa:

sudo systemctl status vsftpd

Jeśli status to active (running), serwer jest już uruchomiony.

4. Podstawowa konfiguracja vsftpd

Główny plik konfiguracyjny vsftpd to:

/etc/vsftpd.conf

4.1. Utworzenie kopii zapasowej konfiguracji

Przed pierwszymi zmianami zrób kopię:

sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.bak

4.2. Edycja pliku vsftpd.conf

Otwórz plik w edytorze nano:

sudo nano /etc/vsftpd.conf

W pliku ustaw lub zmień poniższe parametry (dopisz je na końcu lub zmodyfikuj istniejące):

# Zezwól na logowanie lokalnym użytkownikom systemu
local_enable=YES

# Zezwól na upload (komendy zapisu)
write_enable=YES

# Chroot – zamknięcie użytkownika w jego katalogu domowym
chroot_local_user=YES

# (Opcjonalnie) zezwól na zapis w katalogu domowym w chroot
allow_writeable_chroot=YES

# Wyłączenie anonimowego dostępu (bez loginu i hasła)
anonymous_enable=NO

# Obsługa pasywnego trybu FTP – ważne za NAT-em i firewallami
pasv_enable=YES
pasv_min_port=40000
pasv_max_port=50000

# Ograniczenie listy użytkowników, którzy mogą korzystać z FTP (biała lista)
userlist_enable=YES
userlist_file=/etc/vsftpd.user_list
userlist_deny=NO

# Dodatkowe ustawienia
use_localtime=YES
xferlog_enable=YES

Wyjaśnienie kluczowych opcji:

  • local_enable=YES – pozwala logować się użytkownikom systemu (utworzonym w adduser);
  • write_enable=YES – włącza możliwość zapisu (upload, usuwanie, zmiany nazw plików);
  • chroot_local_user=YES – użytkownik „nie widzi” całego systemu, tylko swój katalog domowy;
  • allow_writeable_chroot=YES – rozwiązuje błąd zapisu w chroot, gdy katalog domowy jest zapisywalny dla użytkownika (wygodne, ale z kompromisem bezpieczeństwa);
  • anonymous_enable=NO – blokuje logowanie anonymous (rekomendowane dla bezpieczeństwa);
  • pasv_enable, pasv_min_port, pasv_max_port – konfigurują tryb pasywny, wymagany przez większość klientów za NAT-em i firewallami;
  • userlist_enable, userlist_file, userlist_deny=NO – włącza „białą listę” użytkowników dopuszczonych do logowania.

Zapisz zmiany (Ctrl+O), a następnie wyjdź (Ctrl+X).

4.3. Plik białej listy użytkowników

Jeśli używasz userlist_enable=YES i userlist_deny=NO, utwórz plik:

sudo nano /etc/vsftpd.user_list

Wpisz w każdej linii nazwy użytkowników, którzy mają mieć dostęp do FTP, np.:

ftpuser
webftp

Zapisz plik.

5. Tworzenie kont użytkowników FTP

5.1. Użytkownik standardowy z kontem systemowym

Najprościej korzystać z normalnych użytkowników systemu, którym przydzielisz katalog domowy:

sudo adduser ftpuser

W trakcie tworzenia podaj hasło; pozostałe dane możesz pominąć, zatwierdzając Enter.

Po utworzeniu użytkownika upewnij się, że jego katalog domowy istnieje:

ls -ld /home/ftpuser

Dodaj go do białej listy (jeśli używasz /etc/vsftpd.user_list):

echo "ftpuser" | sudo tee -a /etc/vsftpd.user_list

5.2. Użytkownik tylko do FTP (bez logowania do systemu)

Aby użytkownik mógł korzystać z FTP, ale nie logował się do powłoki (SSH, konsola), użyj powłoki nologin:

  1. Dodaj /usr/sbin/nologin do listy dozwolonych powłok:

echo "/usr/sbin/nologin" | sudo tee -a /etc/shells

  1. Utwórz użytkownika z powłoką nologin:

sudo adduser --shell /usr/sbin/nologin webftp

  1. Dodaj go do białej listy, jeśli jest używana:

echo "webftp" | sudo tee -a /etc/vsftpd.user_list

Taki użytkownik nie zaloguje się do systemu przez SSH, ale będzie poprawnym użytkownikiem dla vsftpd.

6. Katalogi i prawa dostępu dla FTP

6.1. Prosty scenariusz – jeden użytkownik, własny katalog

Jeśli ftpuser ma mieć dostęp tylko do swojego katalogu /home/ftpuser, wykonaj:

sudo chown ftpuser:ftpuser /home/ftpuser
sudo chmod 750 /home/ftpuser

  • właściciel (ftpuser) ma pełne prawa,
  • grupa ma odczyt/wykonanie,
  • inni nie mają dostępu.

Dzięki chroot_local_user=YES użytkownik zostanie „zamknięty” w swoim katalogu domowym.

6.2. Wspólny katalog dla wielu użytkowników (z grupami)

Załóżmy, że chcesz mieć następującą strukturę i uprawnienia:

  • główny katalog FTP: /home/mainftp,
  • trzy podkatalogi: men, women, people,
  • trzy grupy: aktorzy, aktorki, artysci,
  • kilku użytkowników przypisanych do tych grup.
  1. Utwórz katalogi:

sudo mkdir -p /home/mainftp/men
sudo mkdir -p /home/mainftp/women
sudo mkdir -p /home/mainftp/people

  1. Utwórz grupy:

sudo groupadd aktorzy
sudo groupadd aktorki
sudo groupadd artysci

  1. Utwórz użytkowników z jednym wspólnym katalogiem domowym /home/mainftp:

sudo adduser --home /home/mainftp --ingroup aktorki aktorka1
sudo adduser --home /home/mainftp --ingroup aktorki aktorka2
sudo adduser --home /home/mainftp --ingroup aktorzy aktor1
sudo adduser --home /home/mainftp --ingroup aktorzy aktor2
sudo adduser --home /home/mainftp --ingroup aktorzy aktor3

(Hasła ustawisz w trakcie tworzenia lub później przez sudo passwd nazwa).

  1. Przydziel dodatkową wspólną grupę, np. artysci dla wszystkich:

sudo usermod -aG artysci aktorka1
sudo usermod -aG artysci aktorka2
sudo usermod -aG artysci aktor1
sudo usermod -aG artysci aktor2
sudo usermod -aG artysci aktor3

  1. Ustaw właściciela i grupę katalogów (np. root + odpowiednie grupy):

sudo chown root:aktorzy /home/mainftp/men
sudo chown root:aktorki /home/mainftp/women
sudo chown root:artysci /home/mainftp/people

  1. Ustaw prawa:

sudo chmod 770 /home/mainftp/men
sudo chmod 770 /home/mainftp/women
sudo chmod 770 /home/mainftp/people

Tylko właściciel i przypisana grupa mają pełne prawa; pozostali użytkownicy nie mają dostępu.

W ten sposób:

  • użytkownicy z grupy aktorzy mają dostęp do men,
  • użytkownicy z grupy aktorki – do women,
  • grupa artysci – do people (wspólny katalog).

7. Anonimowy serwer FTP (tylko jeśli naprawdę potrzebujesz)

Anonimowy dostęp oznacza logowanie np. loginem anonymous bez hasła lub z dowolnym adresem e-mail. To ryzykowne i zalecane wyłącznie w kontrolowanych środowiskach (np. pracownia szkolna, intranet).

7.1. Włączenie anonimowego FTP do odczytu

  1. W pliku /etc/vsftpd.conf dodaj:

anonymous_enable=YES
anon_root=/home/ftp

  1. Utwórz katalog dla anonimowego FTP:

sudo mkdir -p /home/ftp
sudo chown nobody:nogroup /home/ftp
sudo chmod 755 /home/ftp

(Często używa się użytkownika nobody i grupy nogroup jako technicznych kont dla usług). Teraz każdy może pobierać pliki z /home/ftp jako anonymous, ale nic nie może przesyłać na serwer.

7.2. Zezwolenie na upload dla anonymous (niezalecane)

Jeśli mimo wszystko chcesz zezwolić na anonimowy upload, w /etc/vsftpd.conf odkomentuj lub dopisz:

anon_upload_enable=YES
anon_mkdir_write_enable=YES
write_enable=YES

Następnie utwórz katalog do uploadu:

sudo mkdir -p /home/ftp/ftpzapis
sudo chmod 777 /home/ftp/ftpzapis

Pamiętaj: katalog z prawami 777 jest zapisywalny dla każdego, co stanowi duże ryzyko (złośliwe pliki, spam).

8. Konfiguracja zapory (UFW) dla FTP

Jeśli używasz zapory UFW (Uncomplicated Firewall), dopuść następujące porty:

  • port 21/tcp – sterowanie FTP,
  • port 20/tcp – dane w trybie aktywnym,
  • zakres portów pasywnych (np. 40000–50000).

Dodaj reguły:

sudo ufw allow 20/tcp
sudo ufw allow 21/tcp
sudo ufw allow 40000:50000/tcp
sudo ufw reload

Sprawdź status zapory:

sudo ufw status verbose

Jeśli na serwerze pracuje inny firewall (np. na routerze, w panelu dostawcy VPS), otwórz te same porty również tam.

9. Restart i zarządzanie usługą vsftpd

Po każdej zmianie konfiguracji vsftpd wykonaj restart:

sudo systemctl restart vsftpd

Przydatne komendy do zarządzania usługą:

sudo systemctl status vsftpd # sprawdzenie statusu
sudo systemctl stop vsftpd # zatrzymanie usługi
sudo systemctl start vsftpd # start usługi
sudo systemctl enable vsftpd # autostart przy starcie systemu

10. Testowanie serwera FTP

10.1. Test z innego Linuksa / macOS (konsola)

Możesz użyć klienta wiersza poleceń ftp:

ftp adres_IP_serwera

Następnie podaj login i hasło użytkownika, np. ftpuser.

Przykładowe komendy w sesji FTP:

  • ls – lista plików,
  • cd – zmiana katalogu,
  • get plik – pobranie pliku,
  • put plik – wysłanie pliku.

Wyjście z sesji:

bye

10.2. Test z FileZilla (Windows/Linux/macOS)

  1. Zainstaluj FileZilla (klient FTP).
  2. W polu Host wpisz adres IP serwera lub nazwę domeny.
  3. Podaj Nazwa użytkownika i Hasło (np. ftpuser).
  4. Pozostaw port 21 (domyślny).
  5. Kliknij „Szybkie łączenie”.

Po poprawnej konfiguracji w prawym panelu zobaczysz katalog domowy użytkownika na serwerze; możesz też testowo przesłać plik, przeciągając go z lewego (lokalnego) panelu.

11. Dodatkowe wskazówki bezpieczeństwa

Zastosuj poniższe praktyki, aby ograniczyć ryzyko i wzmocnić ochronę serwera:

  • wyłącz anonymous, jeśli nie jest potrzebny: anonymous_enable=NO w vsftpd.conf;
  • używaj silnych haseł lub integracji z innym mechanizmem uwierzytelniania (np. PAM, LDAP);
  • ogranicz liczbę użytkowników w /etc/vsftpd.user_list do niezbędnego minimum;
  • monitoruj logi vsftpd, aby szybko wykrywać incydenty;
  • rozważ FTPS (SSL/TLS) – vsftpd obsługuje szyfrowane połączenia (wymaga certyfikatu i ssl_enable=YES).

Podgląd logów w czasie rzeczywistym:

sudo tail -f /var/log/vsftpd.log

12. Podsumowanie praktyczne – typowy scenariusz produkcyjny

  1. Aktualizujesz system.
  2. Instalujesz vsftpd.
  3. W /etc/vsftpd.conf ustawiasz:
  • anonymous_enable=NO,
  • local_enable=YES,
  • write_enable=YES,
  • chroot_local_user=YES (ew. allow_writeable_chroot=YES),
  • pasv_enable=YES + zakres portów pasywnych,
  • userlist_enable=YES, userlist_file=/etc/vsftpd.user_list, userlist_deny=NO.
  1. Tworzysz użytkowników (np. z powłoką nologin) i wspólnym katalogiem FTP.
  2. Dodajesz użytkowników do /etc/vsftpd.user_list.
  3. Ustawiasz prawa (chown, chmod) na katalogach FTP.
  4. Konfigurujesz UFW: porty 20, 21 i zakres pasywny.
  5. Restartujesz vsftpd i testujesz klientem (FileZilla, ftp).
Udostępnij ten artykuł
Obserwuj
Redaktor IINTE.edu.pl, na co dzień zajmuje się technologiami internetowymi i tłumaczeniem skomplikowanych tematów na prosty język. Pisze poradniki o tym, jak załatwiać sprawy przez internet, jak bezpiecznie korzystać z sieci i jak dobierać sprzęt oraz oprogramowanie. Prywatnie tropi nowinki technologiczne i testuje je, zanim opisze.
Brak komentarzy

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Wymagane pola są oznaczone *