linux server ftp - ghdrako/doc_snipets GitHub Wiki

Popularne:

  • vsftpd
  • Pure-FTPd
  • ProFTPD
  1. Instalacja
sudo apt update
sudo apt install vsftpd db-util openssl
  • vsftpd – lekki i bezpieczny daemon FTP
  • db-util – narzędzie db_load do stworzenia bazy haseł
  • openssl – do wygenerowania certyfikatu TLS
  1. Generowanie certyfikatu TLS
sudo mkdir -p /etc/ssl/private
cd /etc/ssl/private
sudo chmod 700 .
-- selfsign cert generate
sudo openssl req -x509 -nodes -days 3650 \
  -newkey rsa:2048 \
  -keyout vsftpd.pem \
  -out vsftpd.pem \
  -subj "/C=PL/ST=Mazowieckie/L=Warszawa/O=MojaFirma/CN=ftp.mojafirma.pl"
sudo chmod 600 vsftpd.pem
  • certyfikat i klucz są w jednym pliku /etc/ssl/private/vsftpd.pem
  1. Przygotowanie listy wirtualnych użytkowników Stwórz plik tekstowy z parami nazwa_użytkownika + hasło, np. /etc/vsftpd/virtusers.txt:
jan
hasloJan123
ala
SekretAla!

Przekonwertuj na bazę Berkeley DB:

sudo db_load -T -t hash -f /etc/vsftpd/virtusers.txt /etc/vsftpd/virtusers.db
sudo chmod 600 /etc/vsftpd/virtusers.db
  1. Konfiguracja PAM dla vsftpd

Stwórz plik /etc/pam.d/vsftpd.virtual:

# /etc/pam.d/vsftpd.virtual
auth    required  pam_userdb.so db=/etc/vsftpd/virtusers
account required  pam_userdb.so db=/etc/vsftpd/virtusers
  1. Główna konfiguracja vsftpd Otwórz /etc/vsftpd.conf i dopisz / odkomentuj (usuń #) lub zmodyfikuj tak:
# tryb demonowy (nie daemonless)
listen=YES

# tylko połączenia IPv4
listen_ipv6=NO

# wyłącz anonimowe logowanie
anonymous_enable=NO

# włącz logowanie lokalnych kont (ale ich nie tworzysz w systemie)
local_enable=YES

# włącz pisanie (upload)
write_enable=YES

# użyj PAM “vsftpd.virtual” dla uwierzytelniania
pam_service_name=vsftpd.virtual

# włącz FTPS (FTP over TLS)
ssl_enable=YES
allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES

# ścieżki do certyfikatu
rsa_cert_file=/etc/ssl/private/vsftpd.pem
rsa_private_key_file=/etc/ssl/private/vsftpd.pem

# chroot wszystkich lokalnych użytkowników
chroot_local_user=YES

# obsługa wirtualnych użytkowników
guest_enable=YES
guest_username=ftp             # wszystkie wirtualne konta będą miały /usr/sbin/nologin; uid/gid ftp
virtual_use_local_privs=YES    # uprawnienia jak lokalny użytkownik "ftp"

# katalogi per-użytkownik
user_sub_token=$USER
local_root=/home/ftp/$USER

# miejsce na per-user pliki konfiguracyjne
user_config_dir=/etc/vsftpd/vusers/

# pasywny tryb (dostosuj porty według potrzeb)
pasv_enable=YES
pasv_min_port=30000
pasv_max_port=31000

# inne zabezpieczenia
seccomp_sandbox=YES
  1. Przygotowanie katalogów domowych Dla każdego wirtualnego użytkownika:
# załóżmy użytkownika "jan"
sudo mkdir -p /home/ftp/jan
sudo chown ftp:ftp /home/ftp/jan
sudo chmod 755 /home/ftp/jan

Jeśli chcesz ograniczyć upload tylko do subkatalogów, użyj chmod odpowiednio lub stwórz dalej katalogi wewnątrz. 7. Konfiguracja per-user (opcjonalnie) Jeżeli chcesz indywidualnie dostosować uprawnienia, stwórz katalog i plik:

sudo mkdir -p /etc/vsftpd/vusers

Każdy plik nazywa się nazwą użytkownika, np. /etc/vsftpd/vusers/jan:

# przykładowe opcje tylko dla "jan"
write_enable=NO
download_enable=YES
  1. Firewall i otwarcie portów
sudo ufw allow 21/tcp
sudo ufw allow 30000:31000/tcp
  1. Restart usługi
sudo systemctl restart vsftpd
sudo systemctl enable vsftpd
  1. Test i łączenie
  • Klient FTP: w polu host wpisujesz ftps://ftp.twojadomena.pl, port 21, tryb Passive, szyfrowanie TLS.
  • Po połączeniu powinien się pojawić komunikat o certyfikacie – zaakceptuj.
  • Zaloguj się jako np. jan i sprawdź, że trafiasz do /home/ftp/jan.
sudo tail -f /var/log/vsftpd.log