User:Wacek/brudnopis Very
vsftpd (Very Secure FTP Daemon) to lekki, stabilny i bezpieczny serwer FTP dla systemów typu UNIX.
Instalacja
Install vsftpd and start/enable the vsftpd.service
daemon.
To use xinetd for monitoring and controlling vsftpd connections, see #Using xinetd.
Configuration
Większość ustawień w vsftpd jest wykonywana poprzez edycję pliku /etc/vsftpd.conf
. Sam plik jest dobrze udokumentowany, więc w tej sekcji wymieniono tylko niektóre ważne zmiany, które możesz chcieć zmodyfikować. Wszystkie dostępne opcje i dokumentację znajdziesz na stronie podręcznika vsftpd.conf(5). Pliki są domyślnie udostępniane z /srv/ftp
.
Włącz połączenia /etc/hosts.allow
:
# Allow all connections vsftpd: ALL # IP address range vsftpd: 10.0.0.0/255.255.255.0
Włączanie przesyłania
Flaga WRITE_ENABLE
musi być ustawiona na TAK w /etc/vsftpd.conf
, aby umożliwić zmiany w systemie plików, takie jak przesyłanie:
write_enable=YES
Logowanie użytkownika lokalnego
Należy ustawić linię local_enable
w /etc/vsftpd.conf
na YES
, aby umożliwić użytkownikom w /etc/passwd
Zaloguj sie:
local_enable=YES
Logowanie anonimowe
Te wiersze kontrolują, czy anonimowi użytkownicy mogą się logować. Domyślnie anonimowe logowania są włączone do pobierania tylko z /srv/ftp
:
/etc/vsftpd.conf
... # Allow anonymous FTP? (Beware - allowed by default if you comment this out). anonymous_enable=YES ... # Uncomment this to allow the anonymous FTP user to upload files. This only # has an effect if the above global write enable is activated. Also, you will # obviously need to create a directory writable by the FTP user. #anon_upload_enable=YES # # Uncomment this if you want the anonymous FTP user to be able to create # new directories. #anon_mkdir_write_enable=YES ...
Możesz także dodać np. następujące opcje (zobacz vsftpd.conf(5), aby uzyskać więcej informacji):
/etc/vsftpd.conf
# No password is required for an anonymous login no_anon_password=YES # Maximum transfer rate for an anonymous client in Bytes/second anon_max_rate=30000 # Directory to be used for an anonymous login anon_root=/example/directory/
Chroot jail
Można skonfigurować środowisko chroot, które uniemożliwia użytkownikowi opuszczenie jego katalogu domowego. Aby to włączyć, dodaj następujące linie do /etc/vsftpd.conf
:
chroot_list_enable=YES chroot_list_file=/etc/vsftpd.chroot_list
Zmienna chroot_list_file
określa plik, który zawiera uwięzionych użytkowników.
W przypadku bardziej ograniczonego środowiska określ wiersz:
chroot_local_user=YES
Spowoduje to domyślnie uwięzienie lokalnych użytkowników. W tym przypadku plik określony przez chroot_list_file
zawiera listę użytkowników, którzy „nie” są w więzieniu chroot.
Ograniczenie logowania użytkownika
Możliwe jest uniemożliwienie użytkownikom logowania się do serwera FTP poprzez dodanie dwóch linii do /etc/vsftpd.conf
:
userlist_enable=YES userlist_file=/etc/vsftpd.user_list
userlist_file
określa teraz plik zawierający listę użytkowników, którzy nie mogą się zalogować.
Jeśli chcesz zezwolić tylko niektórym użytkownikom na logowanie, dodaj wiersz:
userlist_deny=NO
Plik określony przez userlist_file
będzie teraz zawierał użytkowników, którzy mogą się zalogować.
Ograniczenie połączenia
Szybkość transmisji danych, czyli liczbę klientów i połączeń przypadających na IP dla użytkowników lokalnych można ograniczyć poprzez dodanie informacji w /etc/vsftpd.conf
:
local_max_rate=1000000 # Maximum data transfer rate in bytes per second max_clients=50 # Maximum number of clients that may be connected max_per_ip=2 # Maximum connections per IP
Używając xinetd
Xinetd zapewnia rozszerzone możliwości monitorowania i kontrolowania połączeń. Nie jest to jednak konieczne dla podstawowego, dobrze działającego serwera vsftpd.
Instalacja vsftpd doda niezbędny plik usługi, /etc/xinetd.d/vsftpd
. Domyślnie usługi są wyłączone. Włącz usługę ftp:
service ftp { socket_type = stream wait = no user = root server = /usr/bin/vsftpd log_on_success += HOST DURATION log_on_failure += HOST disable = no }
Jeśli ustawiłeś demona vsftpd, aby działał w trybie autonomicznym, wprowadź następującą zmianę w /etc/vsftpd.conf
:
listen=NO
W przeciwnym razie połączenie nie powiedzie się:
500 OOPS: could not bind listening IPv4 socket
Zamiast uruchamiać demona vsftpd uruchom i enable xinetd.service
.
Używanie SSL/TLS do zabezpieczania FTP
First, you need a X.509 SSL/TLS certificate to use TLS. If you do not have one, you can easily generate a self-signed certificate as follows:
# cd /etc/ssl/certs # openssl req -x509 -nodes -days 7300 -newkey rsa:2048 -keyout vsftpd.pem -out vsftpd.pem # chmod 600 vsftpd.pem
You will be asked questions about your company, etc. As your certificate is not a trusted one, it does not really matter what is filled in, it will just be used for encryption. To use a trusted certificate, you can get one from a certificate authority like Let's Encrypt.
Następnie edytuj plik konfiguracyjny:.
/etc/vsftpd.conf
ssl_enable=YES # if you accept anonymous connections, you may want to enable this setting #allow_anon_ssl=NO # by default all non anonymous logins and forced to use SSL to send and receive password and data, set to NO to allow non secure connections force_local_logins_ssl=NO force_local_data_ssl=NO # TLS v1 protocol connections are preferred and this mode is enabled by default while SSL v2 and v3 are disabled # the settings below are the default ones and do not need to be changed unless you specifically need SSL #ssl_tlsv1=YES #ssl_sslv2=NO #ssl_sslv3=NO # provide the path of your certificate and of your private key # note that both can be contained in the same file or in different files rsa_cert_file=/etc/ssl/certs/vsftpd.pem rsa_private_key_file=/etc/ssl/certs/vsftpd.pem # this setting is set to YES by default and requires all data connections exhibit session reuse which proves they know the secret of the control channel. # this is more secure but is not supported by many FTP clients, set to NO for better compatibility require_ssl_reuse=NO
Rozwiąż nazwę hosta w trybie pasywnym
Aby zastąpić adres IP, który vsftpd anonsuje w trybie pasywnym, przez nazwę hosta twojego serwera i aby DNS rozpoznał go podczas uruchamiania, dodaj następujące dwie linie w /etc/vsftpd.conf
:
pasv_addr_resolve=YES pasv_address=yourdomain.org
- For dynamic DNS, it is not necessary to periodically update pasv_address and restart the server as it can sometimes be read.
- You may not be able to connect in passive mode via LAN anymore, in this case try the active mode instead from the LAN clients.
Konfiguracje portów
Może być konieczne dostosowanie domyślnego portu nasłuchiwania FTP i portów danych w trybie pasywnym. Jest to sposób rozwiązywania ruchu, gdy serwer znajduje się za NAT:
- W przypadku serwerów FTP wystawionych na działanie sieci, aby zmniejszyć prawdopodobieństwo ataku na serwer, port nasłuchiwania można zmienić na inny niż standardowy port 21.
- Aby ograniczyć porty trybu pasywnego do portów otwartych, można podać zakres.
Porty można zdefiniować w pliku konfiguracyjnym, jak pokazano poniżej:
/etc/vsftpd.conf
listen_port=2211 pasv_min_port=5000 pasv_max_port=5003
Konfigurowanie iptables
Często serwer, na którym działa demon FTP, jest chroniony zaporą sieciową iptables. Aby umożliwić dostęp do serwera FTP, należy otworzyć odpowiedni port za pomocą czegoś takiego
# iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT
Ten artykuł nie zawiera żadnych instrukcji dotyczących konfigurowania iptables, ale oto przykład: Simple stateful firewall.
There are some kernel modules needed for proper FTP connection handling by iptables that should be referenced here. Among those especially nf_conntrack_ftp. It is needed as FTP uses the given listen_port (21 by default) for commands only; all the data transfer is done over different ports. These ports are chosen by the FTP daemon at random and for each session (also depending on whether active or passive mode is used). To tell iptables that packets on ports should be accepted, nf_conntrack_ftp is required. You can explicitly load the module at boot.
If the kernel >= 4.7 you either need to set net.netfilter.nf_conntrack_helper=1 via sysctl e.g.
# echo net.netfilter.nf_conntrack_helper=1 > /etc/sysctl.d/70-conntrack.conf
or use
# iptables -A PREROUTING -t raw -p tcp --dport 21 -j CT --helper ftp
Porady i wskazówki
PAM z wirtualnymi użytkownikami
Ponieważ PAM nie zapewnia już pam_userdb.so
, inną łatwą metodą jest użycie libpam_pwdfileAUR. Ta sekcja jest jednak ograniczona do wyjaśnienia, jak skonfigurować środowisko chroot i uwierzytelnianie przez pam_pwdfile.so
.
W tym przykładzie tworzymy katalog vsftpd
:
# mkdir /etc/vsftpd
Jedną z opcji tworzenia i przechowywania nazw użytkowników i haseł jest użycie generatora Apache htpasswd:
# htpasswd -c /etc/vsftpd/.passwd
Problem z powyższym poleceniem polega na tym, że vsftpd może nie być w stanie odczytać wygenerowanego zaszyfrowanego hasła MD5. Jeśli uruchomisz to samo polecenie z przełącznikiem -d, szyfrowanie crypt(), hasło stanie się czytelne dla vsftpd, ale wadą tego jest mniejsze bezpieczeństwo i hasło ograniczone do 8 znaków. Openssl może zostać użyty do stworzenia hasła BSD opartego na MD5 z algorytmem 1:
# openssl passwd -1
Jakiekolwiek rozwiązanie, wygenerowane /etc/vsftpd/.passwd
powinno wyglądać tak:
username1:hashed_password1 username2:hashed_password2 ...
Następnie musisz stworzyć usługę PAM używając pam_pwdfile.so
i wygenerowanego pliku /etc/vsftpd/.passwd
. W tym przykładzie tworzymy politykę PAM dla „vsftpd” o następującej treści:
/etc/pam.d/vsftpd
auth required pam_pwdfile.so pwdfile /etc/vsftpd/.passwd account required pam_permit.so
Teraz czas na stworzenie domu dla wirtualnych użytkowników. W przykładzie /srv/ftp
zdecydowano się hostować dane dla użytkowników wirtualnych, co również odzwierciedla domyślną strukturę katalogów Arch. Najpierw utwórz wirtualnego użytkownika ogólnego i ustaw /srv/ftp
jako dom:
# useradd -d /srv/ftp virtual
Ustaw wirtualnego właściciela:
# chown virtual:virtual /srv/ftp
Podstawowy /etc/vsftpd.conf
bez skonfigurowanych folderów prywatnych, domyślnie folder domowy użytkownika wirtualnego:
# pointing to the correct PAM service file pam_service_name=vsftpd write_enable=YES hide_ids=YES listen=YES connect_from_port_20=YES anonymous_enable=NO local_enable=YES dirmessage_enable=YES xferlog_enable=YES chroot_local_user=YES guest_enable=YES guest_username=virtual virtual_use_local_privs=YES
Niektóre parametry mogą nie być konieczne dla Twojej własnej konfiguracji. Jeśli chcesz, aby środowisko chroot było zapisywalne, musisz dodać następujące elementy do pliku konfiguracyjnego:
allow_writeable_chroot=YES
W przeciwnym razie vsftpd z powodu domyślnych ustawień bezpieczeństwa będzie narzekać, jeśli wykryje, że chroot jest zapisywalny.
Start vsftpd.service
.
Powinieneś być teraz w stanie zalogować się z klienta ftp przy użyciu dowolnego użytkownika i hasła przechowywanych w /etc/vsftpd/.passwd
.
Dodanie prywatnych folderów dla użytkowników wirtualnych
Najpierw utwórz katalogi dla użytkowników:
# mkdir /srv/ftp/user1 # mkdir /srv/ftp/user2 # chown virtual:virtual /srv/ftp/user?/
Następnie dodaj następujące linie do /etc/vsftpd.conf
:
local_root=/srv/ftp/$USER user_sub_token=$USER
Rozwiązywanie problemów
vsftpd: refusing to run with writable root inside chroot()
Począwszy od vsftpd 2.3.5, katalog chroot, do którego użytkownicy są zablokowani, nie może być zapisywalny. Ma to na celu uniknięcie luki w zabezpieczeniach.
Bezpiecznym sposobem na przesyłanie jest włączenie chroot i skonfigurowanie katalogów FTP.
local_root=/srv/ftp/user
# mkdir -p /srv/ftp/user/upload # chmod 550 /srv/ftp/user # chmod 750 /srv/ftp/user/upload
Jeśli musisz:
You can put this into your /etc/vsftpd.conf
to workaround this security enhancement (since vsftpd 3.0.0; from Fixing 500 OOPS: vsftpd: refusing to run with writable root inside chroot ()):
allow_writeable_chroot=YES
FileZilla Client: GnuTLS error -8 -15 -110 when connecting via SSL
vsftpd tries to display plain-text error messages in the SSL session. In order to debug this, temporarily disable encryption and you will see the correct error message.[1] [2]
Often these errors can be solved by adding[3]:
seccomp_sandbox=NO
vsftpd.service fails to run on boot
If you have enabled vsftpd.service
and it fails to run on boot, edit it and make sure it is set to load after network.target
in the service file:
vsftpd.service
[Unit] Description=vsftpd daemon After=network.target
Tryb pasywny odpowiada lokalnym adresem IP na połączenie zdalne
Jeśli vsftpd zwraca adres lokalny do połączenia zdalnego, na przykład:
227 Entering Passive Mode (192,168,0,19,192,27).
Może się zdarzyć, że serwer FTP znajduje się za routerem NAT i chociaż niektóre urządzenia monitorują połączenia FTP i dynamicznie zastępują lokalną specyfikację adresu IP zewnętrznym adresem IP dla pakietów zawierających odpowiedź PASV, inne tego nie robią.
Wskaż zewnętrzny adres IP w konfiguracji vsftpd, używając:
pasv_address=externalIPaddress
lub alternatywnie:
pasv_addr_resolve=YES pasv_address=my.domain.name
W przypadku, gdy połączenie wewnętrzne nie jest możliwe po tej zmianie, może być konieczne uruchomienie 2 vsftpd, jednego dla połączeń wewnętrznych i jednego dla połączeń zewnętrznych.
ipv6 only fails with: 500 OOPS: run two copies of vsftpd for IPv4 and IPv6
najprawdopodobniej skomentowałeś linię
# When "listen" directive is enabled, vsftpd runs in standalone mode and # listens on IPv4 sockets. This directive cannot be used in conjunction # with the listen_ipv6 directive. #listen=YES # # This directive enables listening on IPv6 sockets. To listen on IPv4 and IPv6 # sockets, you must run two copies of vsftpd with two configuration files. # Make sure, that one of the listen options is commented !! listen_ipv6=YES
zamiast ustawiać
# When "listen" directive is enabled, vsftpd runs in standalone mode and # listens on IPv4 sockets. This directive cannot be used in conjunction # with the listen_ipv6 directive. listen=NO
vsftpd connections fail on a machine using nis with: yp_bind_client_create_v2: RPC: Unable to send
jak wspomniano na stronie z często zadawanymi pytaniami vsftpd, „...wbudowana piaskownica wykorzystuje izolację sieci w systemie Linux. To
może zakłócać działanie dowolnego modułu, który musi korzystać z sieci do wykonywania operacji lub wyszukiwania”
d
odaj tę nieudokumentowaną linię do swojego /etc/vsftpd.conf
isolate_network=NO
VSFTPD reset connect via LIST command
seccomp_sandbox=NO
do pliku vsftpd.conf rozwiązuje ten problem