Jak skonfigurować serwer SFTP (SSH File Transfer Protocol) w Linux
Serwer SFTP to bezpieczny sposób przesyłania plików między komputerami. W przeciwieństwie do klasycznego FTP, który przesyła dane w formie otwartego tekstu, SFTP korzysta z szyfrowanego połączenia SSH, zapewniając poufność i integralność danych. Co więcej, SFTP nie wymaga instalacji oddzielnego serwera FTP – działa natywnie w oparciu o SSH.
W tym artykule omówimy:
✔ Czym jest SFTP i dlaczego warto go używać?
✔ Instalację i konfigurację serwera SFTP na Ubuntu/Debian
✔ Autentykację za pomocą kluczy SSH
✔ Konfigurację użytkowników z ograniczonym dostępem
✔ Bezpieczeństwo i najlepsze praktyki
1. Co to jest SFTP i dlaczego warto go używać?
SFTP (SSH File Transfer Protocol) to rozszerzenie protokołu SSH, które umożliwia bezpieczny transfer plików. W przeciwieństwie do tradycyjnego FTP, który wymaga dodatkowych zabezpieczeń (np. FTPS), SFTP domyślnie szyfruje całą komunikację.
🔹 Główne zalety SFTP:
✅ Bezpieczeństwo – wszystkie dane, w tym hasła i pliki, są szyfrowane.
✅ Łatwa konfiguracja – działa natywnie z SSH, bez potrzeby instalacji dodatkowego oprogramowania.
✅ Obsługa kluczy SSH – umożliwia logowanie bez hasła, zwiększając bezpieczeństwo.
✅ Dostępność – działa na wszystkich systemach Linux i Unix, a także na Windows (przez OpenSSH).

2. Instalacja i konfiguracja serwera SFTP na Ubuntu/Debian
Krok 1: Sprawdzenie, czy SSH jest zainstalowane
Większość systemów Linux domyślnie zawiera serwer SSH. Możesz to sprawdzić poleceniem:
sudo systemctl status ssh
Jeśli usługa nie jest zainstalowana, zainstaluj OpenSSH:
sudo apt update
sudo apt install openssh-server -y
Uruchom i włącz serwer SSH:
sudo systemctl enable ssh
sudo systemctl start ssh
Krok 2: Tworzenie użytkownika do obsługi SFTP
Aby zapewnić bezpieczeństwo, najlepiej utworzyć specjalnego użytkownika przeznaczonego do transferu plików:
sudo adduser sftpuser
Podaj hasło i potwierdź dane użytkownika.
Krok 3: Ograniczenie użytkownika SFTP do określonego katalogu
Aby użytkownik sftpuser
miał dostęp wyłącznie do katalogu /home/sftpuser
, edytuj plik konfiguracyjny SSH:
sudo nano /etc/ssh/sshd_config
Dodaj poniższą sekcję na końcu pliku:
Match User sftpuser
ForceCommand internal-sftp
ChrootDirectory /home/sftpuser
X11Forwarding no
AllowTcpForwarding no
PermitTunnel no
Zapisz plik (Ctrl + X
, Y
, Enter
) i uruchom ponownie usługę SSH:
sudo systemctl restart ssh
Teraz użytkownik sftpuser
nie może korzystać z normalnego dostępu SSH – może jedynie przesyłać pliki przez SFTP.
3. Logowanie i autentykacja za pomocą kluczy SSH
Dla większego bezpieczeństwa zaleca się używanie kluczy SSH zamiast haseł.
Krok 1: Generowanie klucza SSH
Na komputerze klienta wykonaj:
ssh-keygen -t rsa -b 4096
Wprowadź ścieżkę zapisu klucza (lub naciśnij Enter
, aby użyć domyślnej lokalizacji ~/.ssh/id_rsa
).
Krok 2: Przesłanie klucza na serwer
Jeśli masz dostęp SSH do serwera, użyj:
ssh-copy-id sftpuser@adres_IP
Jeśli nie masz ssh-copy-id
, ręcznie skopiuj zawartość pliku id_rsa.pub
do:
/home/sftpuser/.ssh/authorized_keys
Następnie ustaw odpowiednie uprawnienia:
sudo chown -R sftpuser:sftpuser /home/sftpuser/.ssh
sudo chmod 700 /home/sftpuser/.ssh
sudo chmod 600 /home/sftpuser/.ssh/authorized_keys
Teraz użytkownik może logować się bez użycia hasła:
sftp sftpuser@adres_IP
4. Konfiguracja użytkowników z ograniczonym dostępem
Jeśli chcesz dodać więcej użytkowników z ograniczeniami, utwórz nową grupę:
sudo groupadd sftpgroup
Dodaj użytkownika do grupy:
sudo usermod -aG sftpgroup sftpuser
Zmień konfigurację SSH (/etc/ssh/sshd_config
):
Match Group sftpgroup
ForceCommand internal-sftp
ChrootDirectory /home/%u
X11Forwarding no
AllowTcpForwarding no
Zapisz i restartuj SSH:
sudo systemctl restart ssh
Teraz każdy użytkownik w grupie sftpgroup
może korzystać z SFTP, ale nie ma dostępu do innych części systemu.
5. Najlepsze praktyki bezpieczeństwa
🔹 Wyłącz logowanie hasłem i używaj tylko kluczy SSH
Edytuj /etc/ssh/sshd_config
i zmień:
PasswordAuthentication no
🔹 Zmień domyślny port SSH (opcjonalnie)
Port 2222
🔹 Ustawienie limitów transferu
Możesz ograniczyć prędkość transferu dla użytkowników SFTP w /etc/ssh/sshd_config
:
Match User sftpuser
ForceCommand internal-sftp
ChrootDirectory /home/sftpuser
AllowTcpForwarding no
PermitTunnel no
X11Forwarding no
AllowTcpForwarding no
RateLimit 100K
🔹 Monitorowanie logów
Sprawdzaj logi SFTP:
sudo journalctl -u ssh
sudo tail -f /var/log/auth.log
6. Podsumowanie
✅ SFTP to bezpieczna alternatywa dla klasycznego FTP – wszystkie dane są szyfrowane.
✅ Nie wymaga instalacji dodatkowego serwera FTP – działa natywnie z SSH.
✅ Obsługuje autentykację kluczami SSH – zwiększa bezpieczeństwo i eliminuje potrzebę używania haseł.
✅ Można ograniczyć dostęp użytkowników – za pomocą ChrootDirectory
.
SFTP to idealne rozwiązanie dla administratorów i firm, które chcą zapewnić bezpieczny i wygodny transfer plików w swoich systemach.