SSP1XNE
Laboratorium/Serwer FTP z vsftpd

LAB 05 · UBUNTU / USŁUGI SIECIOWE

Serwer FTP z vsftpd.
Anonymous i konta lokalne

Zainstaluj usługę, wyjaśnij ustawienia dostępu i sprawdź transfer plików z drugiego komputera przez switch.

Ubuntu Server 24.04 LTS2 komputery + switch60–90 minut
Zacznij zadanie ↓
Cel zadania

Anonymous pobiera pliki publiczne bez prawa zapisu. Konto lokalne przesyła i pobiera pliki w swoim katalogu upload.

01 / LABORATORIUM VSFTPD

Dwa sposoby dostępu do plików.

vsftpd jest serwerem FTP. Klient łączy się z usługą, przegląda katalogi i przesyła pliki. Anonymous oznacza dostęp bez własnego konta i osobistego hasła. Użytkownik lokalny loguje się nazwą i hasłem konta Ubuntu.

W tym zadaniu anonymous może czytać pliki publiczne, lecz nie może nic zapisywać. Konto ftpuczen może czytać i zapisywać w swoim katalogu upload. Dostęp do innych katalogów ogranicza chroot.

FTP w zamkniętej pracowni

Zwykły FTP przesyła hasło i dane bez szyfrowania. Wykonuj ten wariant w zaufanej, wydzielonej sieci laboratoryjnej z hasłem używanym wyłącznie do ćwiczenia. Do przesyłania prywatnych danych przez Internet użyj FTPS z TLS albo SFTP, opisanym w lekcji SSH. SFTP i FTP to różne protokoły.

02 / LABORATORIUM VSFTPD

Połącz dwa komputery przez switch.

SERWERUbuntu Server 24.04 LTS10.0.0.10/24vsftpd · FTP
↔
SIEĆ LANSwitchDwa przewody Ethernet
↔
KLIENTDrugi komputer10.0.0.20/24Ubuntu Desktop / Windows 11

Podłącz oba komputery kablami do tego samego switcha i tej samej sieci VLAN. Adresy są przykładowe: serwer 10.0.0.10/24, klient 10.0.0.20/24, maska 255.255.255.0. Każdy adres musi być unikalny. Do komunikacji w tej podsieci nie potrzeba bramy ani DNS. Internet jest potrzebny do instalacji pakietów; sam switch go nie zapewnia. Nie wpisuj przypadkowej bramy.

Adresację ustaw według lekcji Netplan. Na Windows adres ustaw we właściwościach IPv4 karty Ethernet. Jeśli korzystasz z VM, wybierz kartę mostkowaną do przewodowego interfejsu i sprawdź, czy serwer jest osiągalny z drugiego fizycznego komputera.

SERWER · sprawdzenie adresacji
ip -br address
ip route
KLIENT UBUNTU · sprawdzenie połączenia
ip -br address
ping -c 4 10.0.0.10
KLIENT WINDOWS · PowerShell
ipconfig
ping 10.0.0.10

Ping potwierdza odpowiedź ICMP; jego brak może wynikać z zapory. Test portu i właściwej usługi wykonasz w dalszej części. Nie używaj adresu localhost do testu z drugiego komputera.

03 / LABORATORIUM VSFTPD

Zainstaluj usługę i narzędzia.

SERWER · instalacja i kopia konfiguracji
sudo apt update
sudo apt install vsftpd
sudo cp -a /etc/vsftpd.conf /etc/vsftpd.conf.przed-lab
sudo systemctl enable --now vsftpd
systemctl status vsftpd --no-pager

Kopię wykonaj raz przed zmianami; jeżeli już istnieje, wybierz inną nazwę. Oczekiwany stan usługi to active (running).

KLIENT UBUNTU · narzędzia do testowania
sudo apt update
sudo apt install curl

Na Windows możesz użyć klienta FileZilla i protokołu FTP w trybie pasywnym. W dalszej części są również przykłady z curl.exe, dostępnego w Windows 11. Przeglądarki internetowe nie są klientami FTP.

04 / LABORATORIUM VSFTPD

Przygotuj anonymous i konto lokalne.

SERWER · pliki publiczne tylko do odczytu
getent passwd ftp
sudo install -d -o root -g root -m 755 /srv/ftp/public
printf 'Plik publiczny z serwera FTP\n' | sudo tee /srv/ftp/public/czytaj.txt
sudo chmod 644 /srv/ftp/public/czytaj.txt

Pakiet powinien utworzyć systemowe konto ftp, wykorzystywane przez sesje anonymous. Nie ustawiaj mu hasła do logowania i nie twórz osobnego konta o nazwie anonymous. Katalog publiczny jest własnością roota; klienci mogą go czytać.

SERWER · nowe konto do ćwiczenia i jego katalogi
sudo adduser ftpuczen
sudo install -d -o root -g root -m 755 /srv/ftp/users
sudo install -d -o root -g root -m 755 /srv/ftp/users/ftpuczen
sudo install -d -o ftpuczen -g ftpuczen -m 750 /srv/ftp/users/ftpuczen/upload

Jeżeli konto już istnieje, nie twórz go ponownie. Ustaw własne hasło laboratoryjne podczas adduser. Katalog główny chroot należy do roota i nie daje użytkownikowi prawa zapisu. Zapisywać można w podkatalogu upload. Dzięki temu nie trzeba włączać allow_writeable_chroot.

05 / LABORATORIUM VSFTPD

Ustaw vsftpd i wyjaśnij opcje.

Na świeżym serwerze laboratoryjnym otwórz plik i zastąp jego zawartość poniższą konfiguracją. Nie doklejaj drugiego zestawu tych samych opcji. Wpisy mają format opcja=wartość, bez spacji przy znaku równości.

SERWER · edycja konfiguracji
sudo nano /etc/vsftpd.conf
/etc/vsftpd.conf · kompletny wariant laboratoryjny
listen=YES
listen_ipv6=NO
anonymous_enable=YES
anon_root=/srv/ftp/public
no_anon_password=YES
anon_world_readable_only=YES
anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO
local_enable=YES
write_enable=YES
local_umask=077
chroot_local_user=YES
user_sub_token=$USER
local_root=/srv/ftp/users/$USER
userlist_enable=YES
userlist_deny=NO
userlist_file=/etc/vsftpd.allowed_users
pam_service_name=vsftpd
pasv_enable=YES
pasv_min_port=40000
pasv_max_port=40100
port_enable=NO
xferlog_enable=YES
ssl_enable=NO
Jak czytać konfigurację vsftpd
Ustawienie / testZnaczenie / oczekiwany wynik
listen=YES, listen_ipv6=NOUsługa nasłuchuje przez IPv4. Nie włączamy jednocześnie obu trybów.
anonymous_enable, anon_rootWłącza logowanie anonymous i wskazuje katalog publiczny.
no_anon_password=YESSesja anonymous nie wymaga hasła; podane przez klienta hasło nie jest osobistym sekretem.
anon_*_enable=NOWyłącza przesyłanie, tworzenie katalogów oraz inne operacje zapisu anonymous.
local_enable=YESPozwala uwierzytelniać konta lokalne przez PAM.
write_enable=YESPozwala wykonywać operacje zapisu. Nadal obowiązują uprawnienia Linux i ograniczenia anonymous.
local_umask=077Nowe pliki lokalnego użytkownika mają zwykle tryb 600, katalogi 700; wynik zależy również od trybu bazowego.
chroot_local_user=YESOgranicza widok plików użytkownika do jego katalogu FTP.
user_sub_token=$USER, local_rootPodstawia nazwę zalogowanego użytkownika, np. /srv/ftp/users/ftpuczen. Zapis $USER pozostaje dosłowny w pliku.
userlist_deny=NOLista jest listą dozwolonych kont. Umieszczamy na niej ftpuczen oraz nazwy anonymous i ftp.
pasv_min_port, pasv_max_portZakres portów połączeń danych w trybie pasywnym.
port_enable=NOWyłącza aktywny tryb transferu. Klient musi użyć trybu pasywnego.
xferlog_enable=YESWłącza dziennik transferów.
ssl_enable=NOTen wariant to zwykły FTP bez TLS, wyłącznie do ćwiczenia w pracowni.
SERWER · lista dozwolonych nazw
printf 'anonymous\nftp\nftpuczen\n' | sudo tee /etc/vsftpd.allowed_users
sudo chown root:root /etc/vsftpd.allowed_users
sudo chmod 644 /etc/vsftpd.allowed_users
06 / LABORATORIUM VSFTPD

Otwórz porty i zastosuj konfigurację.

FTP ma oddzielne połączenie sterujące i połączenia danych. Port 21 odpowiada za logowanie i komendy, a porty 40000–40100 za listowanie katalogów i transfer w wybranym trybie pasywnym. Dopuszczenie samego portu 21 może pozwolić na logowanie, ale blokować przesyłanie plików.

SERWER · reguły UFW dla drugiego komputera
sudo ufw status verbose
sudo ufw allow from 10.0.0.20 to any port 21 proto tcp
sudo ufw allow from 10.0.0.20 to any port 40000:40100 proto tcp

Jeżeli UFW jest nieaktywny, reguły nie włączają filtrowania. Włączaj go przy konsoli dopiero po dopuszczeniu innych potrzebnych usług, np. SSH. Nie zmieniaj zapory szkolnego routera. W tym układzie LAN nie potrzebujesz przekierowania NAT ani pasv_address.

SERWER · restart i nasłuch
sudo systemctl restart vsftpd
systemctl status vsftpd --no-pager
sudo ss -ltnp 'sport = :21'

vsftpd weryfikuje konfigurację podczas startu. Jeśli restart się nie powiedzie, przeczytaj sudo journalctl -u vsftpd -n 50 --no-pager. Nie ma tutaj odpowiednika testparm z Samby. Porty danych mogą pojawiać się tylko na czas transferu.

07 / LABORATORIUM VSFTPD

Testuj anonymous na drugim komputerze.

KLIENT UBUNTU · lista i pobranie
curl --user anonymous:lab --list-only ftp://10.0.0.10/
curl --user anonymous:lab ftp://10.0.0.10/czytaj.txt -o pobrany-publiczny.txt
cat pobrany-publiczny.txt

Lista powinna zawierać czytaj.txt, a pobrany plik tekst „Plik publiczny z serwera FTP”.

KLIENT UBUNTU · próba niedozwolonego zapisu
printf 'Test klienta\n' > test-ftp.txt
curl --user anonymous:lab -T test-ftp.txt ftp://10.0.0.10/test-ftp.txt

Oczekiwany wynik: odmowa zapisu, zwykle odpowiedź FTP 550 lub komunikat o odmowie STOR. Plik nie powinien pojawić się na serwerze. Nie zmieniaj uprawnień na 777, aby ten test przeszedł: odmowa jest poprawnym wynikiem.

Alternatywa: FileZilla na Windows.

Ustaw host 10.0.0.10, port 21, protokół FTP, szyfrowanie „tylko zwykły FTP”, typ logowania „anonimowy” i tryb pasywny. Pobierz czytaj.txt, następnie spróbuj przesłać plik — zapis ma zostać odrzucony.

KLIENT WINDOWS · PowerShell, alternatywa bez GUI
curl.exe --user anonymous:lab --list-only ftp://10.0.0.10/
curl.exe --user anonymous:lab ftp://10.0.0.10/czytaj.txt -o pobrany-publiczny.txt
Get-Content .\pobrany-publiczny.txt
08 / LABORATORIUM VSFTPD

Testuj konto lokalne i granice dostępu.

KLIENT UBUNTU · zalogowanie i przesłanie
curl --user ftpuczen --list-only ftp://10.0.0.10/
curl --user ftpuczen -T test-ftp.txt ftp://10.0.0.10/upload/test-ftp.txt
curl --user ftpuczen ftp://10.0.0.10/upload/test-ftp.txt -o pobrany-lokalny.txt
cmp test-ftp.txt pobrany-lokalny.txt

Curl zapyta o hasło konta — nie wpisujemy go w poleceniu. W katalogu głównym zobaczysz upload. Transfer do upload i pobranie mają się udać. cmp nie wypisuje komunikatu, gdy pliki są identyczne; echo $? powinno zwrócić 0.

KLIENT · próba zapisu poza upload
curl --user ftpuczen -T test-ftp.txt ftp://10.0.0.10/test-ftp.txt

Zapis w katalogu głównym powinien zostać odrzucony. Chroot pokazuje katalog użytkownika jako /; nie powinieneś widzieć systemowych katalogów /etc i /home. W FileZilli zaloguj się typem „normalny” jako ftpuczen i wykonaj te same operacje.

SERWER · sprawdzenie właściciela i pliku
sudo ls -l /srv/ftp/users/ftpuczen/upload
sudo cat /srv/ftp/users/ftpuczen/upload/test-ftp.txt

Właścicielem pliku ma być ftpuczen, a jego treść ma odpowiadać plikowi klienta. Na Windows zastąp curl przez curl.exe, utwórz plik przez Set-Content test-ftp.txt "Test klienta" i porównaj pliki poleceniem Get-FileHash.

09 / LABORATORIUM VSFTPD

Dodaj drugiego użytkownika lokalnego.

SERWER · osobne konto i katalog
sudo adduser ftpuczen2
sudo install -d -o root -g root -m 755 /srv/ftp/users/ftpuczen2
sudo install -d -o ftpuczen2 -g ftpuczen2 -m 750 /srv/ftp/users/ftpuczen2/upload
printf 'ftpuczen2\n' | sudo tee -a /etc/vsftpd.allowed_users
sudo systemctl restart vsftpd

Nie dodawaj konta ponownie, jeżeli już istnieje. Zaloguj się na kliencie jako ftpuczen2: curl --user ftpuczen2 --list-only ftp://10.0.0.10/. Zobaczysz jego własny upload. Prześlij plik test-ftp.txt do tego katalogu, a następnie zaloguj się jako ftpuczen i sprawdź, że lista w jego upload nie zawiera nowego pliku drugiego użytkownika. Każdy użytkownik ma osobny katalog główny, ustalony przez local_root i $USER. Zapisz w raporcie listy plików obu kont.

10 / LABORATORIUM VSFTPD

Rozwiąż typowe problemy.

Diagnostyka FTP
Ustawienie / testZnaczenie / oczekiwany wynik
Nie można się połączyćSprawdź IP, VLAN switcha, port 21, usługę i reguły zapory.
Logowanie działa, lista plików lub transfer nieSprawdź pasywny tryb klienta i dopuszczenie portów 40000–40100.
530 Login incorrectSprawdź hasło, konto, listę dozwolonych, /etc/ftpusers i /etc/pam.d/vsftpd. Konta z zablokowanym hasłem lub nieakceptowaną powłoką mogą zostać odrzucone.
500 OOPS: writable root inside chrootKatalog /srv/ftp/users/ftpuczen ma należeć do roota i mieć 755. Zapisywać wolno dopiero w upload.
550 Permission deniedDla anonymous odmowa zapisu jest oczekiwana. Dla konta lokalnego sprawdź własność upload i write_enable.
Usługa nie startujeSprawdź składnię YES/NO, spacje, powtórzenia opcji i konflikt listen/listen_ipv6.
SERWER · dzienniki i prawa
sudo journalctl -u vsftpd -n 50 --no-pager
sudo namei -l /srv/ftp/users/ftpuczen/upload
sudo tail -n 30 /var/log/vsftpd.log

Dziennik transferów zależy od ustawień logowania i pojawia się po transferach. Jeśli go brakuje, sprawdź dziennik systemd oraz ewentualny /var/log/xferlog. Nie dodawaj roota do listy kont FTP.

11 / LABORATORIUM VSFTPD

Zadanie samodzielne i kryteria zaliczenia.

ZADANIE · 60–90 MINUT

Na Ubuntu uruchom vsftpd. Anonymous ma pobrać publiczny plik i otrzymać odmowę zapisu. Konto lokalne ma przesłać oraz pobrać raport we własnym upload. Wszystkie testy klienta wykonaj z drugiego komputera przez switch.

Dowody do raportu
Ustawienie / testZnaczenie / oczekiwany wynik
Adresacja obu komputerówZapis adresów, maski i schemat serwer–switch–klient.
Instalacja i startStan active oraz nasłuch TCP 21.
AnonymousLista plików, pobrana treść i dowód odmowy uploadu.
Konto lokalneUdany upload/download, porównanie plików oraz właściciel na serwerze.
OgraniczeniaOdmowa zapisu w katalogu głównym użytkownika i brak dostępu poza chroot.
WyjaśnienieOpisz local_enable, write_enable, chroot_local_user i zakres pasywny.
Pytania kontrolne i podpowiedzi

Dlaczego FTP potrzebuje więcej niż jednego portu? Dlaczego write_enable nie oznacza, że anonymous może zapisywać? Dlaczego katalog główny chroot należy do roota? Połączenie sterujące i połączenie danych mają różne role. Zapis zależy od opcji dla danego rodzaju konta oraz praw Linux. Katalog główny bez prawa zapisu pozwala zachować ograniczenie chroot i kierować zapis do upload.

12 / LABORATORIUM VSFTPD

Dokumentacja vsftpd.

Scenariusz: Ubuntu Server 24.04 LTS i drugi komputer w tej samej sieci przez switch. Przygotowano 12.10.2026. Polecenia oznaczone SERWER wykonuj na serwerze, KLIENT na drugim komputerze.