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.
- 1. Czym jest FTP i kiedy ma sens w 2026 roku?
- 2. Wymagania wstępne
- 3. Instalacja serwera FTP vsftpd
- 4. Podstawowa konfiguracja vsftpd
- 5. Tworzenie kont użytkowników FTP
- 6. Katalogi i prawa dostępu dla FTP
- 7. Anonimowy serwer FTP (tylko jeśli naprawdę potrzebujesz)
- 8. Konfiguracja zapory (UFW) dla FTP
- 9. Restart i zarządzanie usługą vsftpd
- 10. Testowanie serwera FTP
- 11. Dodatkowe wskazówki bezpieczeństwa
- 12. Podsumowanie praktyczne – typowy scenariusz produkcyjny
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:
- Dodaj
/usr/sbin/nologindo listy dozwolonych powłok:
echo "/usr/sbin/nologin" | sudo tee -a /etc/shells
- Utwórz użytkownika z powłoką nologin:
sudo adduser --shell /usr/sbin/nologin webftp
- 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.
- Utwórz katalogi:
sudo mkdir -p /home/mainftp/men
sudo mkdir -p /home/mainftp/women
sudo mkdir -p /home/mainftp/people
- Utwórz grupy:
sudo groupadd aktorzy
sudo groupadd aktorki
sudo groupadd artysci
- 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).
- Przydziel dodatkową wspólną grupę, np.
artyscidla 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
- 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
- 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
aktorzymają dostęp domen, - użytkownicy z grupy
aktorki– dowomen, - grupa
artysci– dopeople(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
- W pliku
/etc/vsftpd.confdodaj:
anonymous_enable=YES
anon_root=/home/ftp
- 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)
- Zainstaluj FileZilla (klient FTP).
- W polu Host wpisz adres IP serwera lub nazwę domeny.
- Podaj Nazwa użytkownika i Hasło (np.
ftpuser). - Pozostaw port 21 (domyślny).
- 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=NOwvsftpd.conf; - używaj silnych haseł lub integracji z innym mechanizmem uwierzytelniania (np. PAM, LDAP);
- ogranicz liczbę użytkowników w
/etc/vsftpd.user_listdo 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
- Aktualizujesz system.
- Instalujesz vsftpd.
- W
/etc/vsftpd.confustawiasz:
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.
- Tworzysz użytkowników (np. z powłoką
nologin) i wspólnym katalogiem FTP. - Dodajesz użytkowników do
/etc/vsftpd.user_list. - Ustawiasz prawa (
chown,chmod) na katalogach FTP. - Konfigurujesz UFW: porty 20, 21 i zakres pasywny.
- Restartujesz vsftpd i testujesz klientem (FileZilla,
ftp).








