User:Wacek/brudnopis Very

From ArchWiki

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.

This article or section is out of date.

Reason: I believe this information is deprecated. libwrap/tcp-wrappers is not dependency of vsftpd and not installed by default. Better to configure firewall rules to limit access. (Discuss in User talk:Wacek/brudnopis Very)

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

This article or section needs language, wiki syntax or style improvements. See Help:Style for reference.

Reason: Do not duplicate OpenSSL#Certificates. (Discuss in User talk:Wacek/brudnopis Very)

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
Note:
  • 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
Tip: Remember to modify your firewall to open these ports when behind a NAT.

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.

Tip: To find out whether the NAT router intercepts the PASV response and replaces the internal IP with an external IP, one can check the server response from the client side in TLS mode. The enciphered packets cannot be identified by the router and are not modified.

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

Zobacz też