linux server ftp - ghdrako/doc_snipets GitHub Wiki
Popularne:
- vsftpd
- Pure-FTPd
- ProFTPD
- 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
- 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
- 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
- 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
- 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
- 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
- Firewall i otwarcie portów
sudo ufw allow 21/tcp
sudo ufw allow 30000:31000/tcp
- Restart usługi
sudo systemctl restart vsftpd
sudo systemctl enable vsftpd
- 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