Kako namestiti in konfigurirati strežnik FTP v Ubuntuju


FTP (File Transfer Protocol) je razmeroma star in najpogosteje uporabljen standardni omrežni protokol, ki se uporablja za nalaganje/nalaganje datotek med dvema računalnikoma prek omrežja. Vendar FTP s svojo prvotno negotovostjo prenaša podatke skupaj z uporabniškimi poverilnicami (uporabniško ime in geslo) brez šifriranja.

Opozorilo: Če nameravate uporabljati FTP, razmislite o konfiguraciji povezave FTP s SSL/TLS (to bo opisano v naslednjem članku). V nasprotnem primeru je vedno bolje uporabiti varen FTP, kot je SFTP.

V tej vadnici bomo prikazali, kako namestiti, konfigurirati in zaščititi strežnik FTP (VSFTPD v celoti\"Zelo varen FTP Daemon \") v Ubuntuju, da ima močno zaščito pred ranljivostmi FTP.

1. korak: Namestitev strežnika VsFTP v Ubuntu

1. Najprej moramo posodobiti seznam virov sistemskega paketa in nato namestiti binarni paket VSFTPD, kot sledi:

$ sudo apt-get update
$ sudo apt-get install vsftpd

2. Ko se namestitev konča, bo storitev sprva onemogočena, zato jo moramo vmesno zagnati ročno in ji omogočiti tudi samodejni zagon ob naslednjem zagonu sistema:

------------- On SystemD ------------- 
# systemctl start vsftpd
# systemctl enable vsftpd

------------- On SysVInit ------------- 
# service vsftpd start
# chkconfig --level 35 vsftpd on

3. Nato, če imate na strežniku omogočen požarni zid UFW (privzeto ni omogočen), morate odpreti vrata 21 in 20, kjer poslušajo demoni FTP, da omogočite dostop do storitev FTP z oddaljenih računalnikov, nato dodajte novi požarni zid določa na naslednji način:

$ sudo ufw allow 20/tcp
$ sudo ufw allow 21/tcp
$ sudo ufw status

2. korak: Konfiguriranje in zaščita strežnika VsFTP v Ubuntuju

4. Izvedimo nekaj konfiguracij za nastavitev in zaščito našega FTP strežnika, najprej bomo ustvarili varnostno kopijo izvirne konfiguracijske datoteke /etc/vsftpd/vsftpd.conf tako:

$ sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.orig

Nato odprimo konfiguracijsko datoteko vsftpd.

$ sudo vi /etc/vsftpd.conf
OR
$ sudo nano /etc/vsftpd.conf

S temi vrednostmi dodajte/spremenite naslednje možnosti:

anonymous_enable=NO             # disable  anonymous login
local_enable=YES		# permit local logins
write_enable=YES		# enable FTP commands which change the filesystem
local_umask=022		        # value of umask for file creation for local users
dirmessage_enable=YES	        # enable showing of messages when users first enter a new directory
xferlog_enable=YES		# a log file will be maintained detailing uploads and downloads
connect_from_port_20=YES        # use port 20 (ftp-data) on the server machine for PORT style connections
xferlog_std_format=YES          # keep standard log file format
listen=NO   			# prevent vsftpd from running in standalone mode
listen_ipv6=YES		        # vsftpd will listen on an IPv6 socket instead of an IPv4 one
pam_service_name=vsftpd         # name of the PAM service vsftpd will use
userlist_enable=YES  	        # enable vsftpd to load a list of usernames
tcp_wrappers=YES  		# turn on tcp wrappers

5. Zdaj konfigurirajte VSFTPD, da uporabnikom dovoli/zavrne dostop do FTP na podlagi datoteke s seznamom uporabnikov /etc/vsftpd.userlist.

Upoštevajte, da je privzeto uporabnikom, navedenim na userlist_file =/etc/vsftpd.userlist, onemogočen dostop do prijave z možnostjo userlist_deny = YES , če userlist_enable = YES .

Možnost userlist_deny = NO zaviha pomen privzete nastavitve, zato se bodo lahko na strežnik FTP prijavili samo uporabniki, katerih uporabniško ime je izrecno navedeno v userlist_file =/etc/vsftpd.userlist.

userlist_enable=YES                   # vsftpd will load a list of usernames, from the filename given by userlist_file
userlist_file=/etc/vsftpd.userlist    # stores usernames.
userlist_deny=NO   

Pomembno: Ko se uporabniki prijavijo v strežnik FTP, so postavljeni v chrooted zapor, to je lokalni korenski imenik, ki bo deloval kot njihov domači imenik samo za sejo FTP.

Nato bomo preučili dva možna scenarija, kako nastaviti chrooted zaporniški imenik (lokalni korenski imenik), kot je razloženo spodaj.

6. Na tej točki dodajte/spremenite/razkomentirajte ti dve možnosti, da uporabnike FTP omejimo na njihove domače imenike.

chroot_local_user=YES
allow_writeable_chroot=YES

Možnost chroot_local_user = YES pomembno pomeni, da bodo lokalni uporabniki po prijavi privzeto nameščeni v zapor chroot.

Moramo tudi razumeti, da VSFTPD privzeto iz varnostnih razlogov ne dovoljuje zapisovanja v zaporniški imenik chroot, vendar pa lahko to nastavitev onemogočimo z možnostjo allow_writeable_chroot = DA.

Datoteko shranite in zaprite. Nato moramo znova zagnati storitve VSFTPD, da začnejo veljati zgornje spremembe:

------------- On SystemD ------------- 
# systemctl restart vsftpd

------------- On SysVInit ------------- 
# service vsftpd restart

3. korak: Testiranje strežnika VsFTP v Ubuntuju

7. Zdaj bomo strežnik FTP preizkusili z ustvarjanjem uporabnika FTP z ukazom useradd, kot sledi:

$ sudo useradd -m -c "Aaron Kili, Contributor" -s /bin/bash aaronkilik
$ sudo passwd aaronkilik

Nato moramo uporabnika aaronkilik izrecno navesti v datoteki /etc/vsftpd.userlist z ukazom echo in tee kot spodaj:

$ echo "aaronkilik" | sudo tee -a /etc/vsftpd.userlist
$ cat /etc/vsftpd.userlist

8. Zdaj je čas, da preizkusimo, kako zgornje konfiguracije delujejo po potrebi. Začeli bomo s testiranjem anonimnih prijav; iz spodnjega izhoda jasno vidimo, da anonimne prijave na strežniku FTP niso dovoljene:

# ftp 192.168.56.102
Connected to 192.168.56.102  (192.168.56.102).
220 Welcome to TecMint.com FTP service.
Name (192.168.56.102:aaronkilik) : anonymous
530 Permission denied.
Login failed.
ftp> bye
221 Goodbye.

9. Nato preizkusimo, ali bo uporabnik, ki ni naveden v datoteki /etc/vsftpd.userlist, dobil dovoljenje za prijavo, kar ne drži iz izhoda, ki sledi:

# ftp 192.168.56.102
Connected to 192.168.56.102  (192.168.56.102).
220 Welcome to TecMint.com FTP service.
Name (192.168.56.10:root) : user1
530 Permission denied.
Login failed.
ftp> bye
221 Goodbye.

10. Zdaj bomo izvedli končni preizkus, da ugotovimo, ali je uporabnik, naveden v datoteki /etc/vsftpd.userlist, dejansko po prijavi v svoj domači imenik. In to velja iz spodnjega izhoda:

# ftp 192.168.56.102
Connected to 192.168.56.102  (192.168.56.102).
220 Welcome to TecMint.com FTP service.
Name (192.168.56.102:aaronkilik) : aaronkilik
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls

Opozorilo: Nastavitev možnosti allow_writeable_chroot = YES je lahko tako nevarna, da ima lahko varnostne posledice, še posebej, če imajo uporabniki dovoljenje za nalaganje ali več, dostop do lupine. Uporabite ga le, če natančno veste, kaj počnete.

Upoštevati moramo, da te varnostne posledice niso specifične za VSFTPD, lahko pa vplivajo tudi na vse druge demone FTP, ki ponujajo lokalne uporabnike v zaporih chroot.

Zaradi tega bomo v spodnjem razdelku razložili varnejši način nastavitve drugega nepisljivega lokalnega korenskega imenika za uporabnika.

Korak 4: Konfigurirajte imenike domačih uporabnikov FTP v Ubuntuju

11. Zdaj še enkrat odprite konfiguracijsko datoteko VSFTPD.

$ sudo vi /etc/vsftpd.conf
OR
$ sudo nano /etc/vsftpd.conf

in komentirajte nezaščiteno možnost z znakom # , kot je prikazano spodaj:

#allow_writeable_chroot=YES

Nato ustvarite nadomestni lokalni korenski imenik za uporabnika (aaronkilik, vaš verjetno ni isti) in nastavite zahtevana dovoljenja tako, da vsem drugim uporabnikom onemogočite dovoljenja za pisanje v tem imeniku:

$ sudo mkdir /home/aaronkilik/ftp
$ sudo chown nobody:nogroup /home/aaronkilik/ftp
$ sudo chmod a-w /home/aaronkilik/ftp

12. Nato v lokalnem korenu ustvarite imenik z ustreznimi dovoljenji, kamor bo uporabnik shranil svoje datoteke:

$ sudo mkdir /home/aaronkilik/ftp/files
$ sudo chown -R aaronkilk:aaronkilik /home/aaronkilik/ftp/files
$ sudo chmod -R 0770 /home/aaronkilik/ftp/files/

Nato dodajte/spremenite spodnje možnosti v konfiguracijski datoteki VSFTPD z njihovimi ustreznimi vrednostmi:

user_sub_token=$USER          # inserts the username in the local root directory 
local_root=/home/$USER/ftp    # defines any users local root directory

Datoteko shranite in zaprite. In znova zaženite storitve VSFTPD z nedavnimi nastavitvami:

------------- On SystemD ------------- 
# systemctl restart vsftpd

------------- On SysVInit ------------- 
# service vsftpd restart

13. Zdaj pa opravimo končno preverjanje in se prepričajmo, da je uporabnikov lokalni korenski imenik imenik FTP, ki smo ga ustvarili v njegovem domačem imeniku.

# ftp 192.168.56.102
Connected to 192.168.56.102  (192.168.56.102).
220 Welcome to TecMint.com FTP service.
Name (192.168.56.10:aaronkilik) : aaronkilik
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls

To je to! Ne pozabite deliti svojega mnenja o tem vodniku prek spodnjega obrazca za komentar ali nam morda posredovati pomembnih informacij v zvezi s temo.

Nenazadnje ne zamudite naslednjega članka, kjer bomo opisali, kako zaščititi strežnik FTP s povezavami SSL/TLS v Ubuntu 16.04/16.10, do takrat pa vedno bodite pozorni na TecMint.