Kako instalirati i konfigurirati FTP poslužitelj u Ubuntuu


FTP (File Transfer Protocol) je relativno star i najčešće korišten standardni mrežni protokol koji se koristi za učitavanje/preuzimanje datoteka između dva računala putem mreže. Međutim, FTP po svom originalu nije siguran, jer prenosi podatke zajedno s korisničkim vjerodajnicama (korisničko ime i lozinka) bez enkripcije.

Upozorenje: Ako planirate koristiti FTP, razmislite o konfiguriranju FTP veze sa SSL/TLS (pokrit će u sljedeći članak). U suprotnom, uvijek je bolje koristiti sigurni FTP kao što je SFTP.

Predloženo za čitanje: Kako instalirati i osigurati FTP poslužitelj u CentOS 7

U ovom vodiču pokazat ćemo kako instalirati, konfigurirati i osigurati FTP poslužitelj (VSFTPD u cijelosti “Vrlo siguran FTP Daemon“) u Ubuntu da ima snažnu sigurnost protiv FTP ranjivosti.

Korak 1: Instaliranje VsFTP poslužitelja u Ubuntu

1. Prvo moramo ažurirati popis izvora paketa sustava, a zatim instalirati VSFTPD binarni paket na sljedeći način:

sudo apt-get update
sudo apt-get install vsftpd

2. Nakon što instalacija završi, usluga će biti inicijalno onemogućena, stoga je moramo pokrenuti ručno na srednje vrijeme i također omogućiti da se automatski pokrene od sljedećeg pokretanja sustava:

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

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

3. Zatim, ako imate omogućen UFW vatrozid (nije omogućen prema zadanim postavkama) na poslužitelju, morate otvoriti portove 21 i 20 gdje FTP demoni slušaju, kako bi omogućili pristup FTP uslugama s udaljenih strojeva, zatim dodajte nova pravila vatrozida kako slijedi:

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

Korak 2: Konfiguriranje i osiguranje VsFTP poslužitelja u Ubuntuu

4. Izvršimo sada nekoliko konfiguracija za postavljanje i osiguranje našeg FTP poslužitelja, prvo ćemo napraviti sigurnosnu kopiju originalne konfiguracijske datoteke /etc/vsftpd/vsftpd.conf kao tako:

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

Zatim otvorimo konfiguracijsku datoteku vsftpd.

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

Dodajte/izmijenite sljedeće opcije s ovim vrijednostima:

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. Sada konfigurirajte VSFTPD za dopuštanje/odbijanje FTP pristupa korisnicima na temelju datoteke popisa korisnika /etc/vsftpd.userlist.

Imajte na umu da je prema zadanim postavkama korisnicima navedenima u userlist_file=/etc/vsftpd.userlist odbijen pristup za prijavu s opcijom userlist_deny=YES ako je userlist_enable=YES .

No, opcija userlist_deny=NO izokreće značenje zadane postavke, tako da će samo korisnici čije je korisničko ime izričito navedeno u userlist_file=/etc/vsftpd.userlist moći prijavite se na FTP poslužitelj.

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   

Važno: Kada se korisnici prijave na FTP poslužitelj, oni se smještaju u chrooted zatvor, ovo je lokalni korijenski direktorij koji će djelovati kao njihov početni direktorij za FTP sesiju samo.

Zatim ćemo pogledati dva moguća scenarija kako postaviti chrooted jail (lokalni root) direktorij, kao što je objašnjeno u nastavku.

6. U ovom trenutku, dodajmo/modificirajmo/odkomentiraj ove dvije sljedeće opcije kako bismo ograničili FTP korisnike na njihove početne direktorije.

chroot_local_user=YES
allow_writeable_chroot=YES

Opcija chroot_local_user=YES važno znači da će lokalni korisnici biti smješteni u chroot zatvor, njihov matični direktorij prema zadanim postavkama nakon prijave.

Također moramo razumjeti da VSFTPD ne dopušta da se u direktorij chroot jail može pisati, prema zadanim postavkama iz sigurnosnih razloga, međutim, možemo koristiti opciju allow_writeable_chroot=YES da onemogućimo ovu postavku.

Spremite datoteku i zatvorite je. Zatim moramo ponovno pokrenuti VSFTPD usluge kako bi gore navedene promjene stupile na snagu:

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

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

Korak 3: Testiranje VsFTP poslužitelja u Ubuntuu

7. Sada ćemo testirati FTP poslužitelj kreiranjem FTP korisnika s useradd naredbom kako slijedi:

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

Zatim, moramo eksplicitno navesti korisnika aaronkilik u datoteci /etc/vsftpd.userlist s naredbom echo i naredbom tee kao što je prikazano u nastavku:

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

8. Sada je krajnje vrijeme da testiramo funkcioniraju li gore navedene konfiguracije kako je potrebno. Počet ćemo s testiranjem anonimnih prijava; možemo jasno vidjeti iz rezultata ispod da anonimne prijave nisu dopuštene na FTP poslužitelju:

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. Zatim, testirajmo hoće li korisnik koji nije naveden u datoteci /etc/vsftpd.userlist dobiti dopuštenje za prijavu, što nije točno prema rezultatu koji slijedi :

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. Sada ćemo izvršiti konačni test kako bismo utvrdili je li korisnik naveden u datoteci /etc/vsftpd.userlist stvarno smješten u njegov/njezin matični direktorij nakon prijaviti se. I to je istina iz rezultata ispod:

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

Upozorenje: Postavljanje opcije allow_writeable_chroot=YES može biti toliko opasno da ima moguće sigurnosne implikacije, posebno ako korisnici imaju dozvolu za prijenos ili štoviše, pristup ljusci. Koristite ga samo ako točno znate što radite.

Trebamo napomenuti da ove sigurnosne implikacije nisu specifične za VSFTPD, one također mogu utjecati na sve druge FTP demone koji nude stavljanje lokalnih korisnika u chroot zatvore.

Zbog toga ćemo u odjeljku u nastavku objasniti sigurniju metodu postavljanja drugog lokalnog korijenskog direktorija bez mogućnosti pisanja za korisnika.

Korak 4: Konfigurirajte FTP korisničke početne direktorije u Ubuntuu

11. Sada još jednom otvorite VSFTPD konfiguracijsku datoteku.

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

i komentirajte nesigurnu opciju pomoću znaka # kao što je prikazano u nastavku:

#allow_writeable_chroot=YES

Zatim stvorite alternativni lokalni korijenski direktorij za korisnika (aaronkilik, vaš možda nije isti) i postavite potrebna dopuštenja onemogućivanjem dopuštenja pisanja za sve ostale korisnike u ovaj direktorij:

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

12. Zatim stvorite direktorij pod lokalnim korijenom s odgovarajućim dozvolama gdje će korisnik pohranjivati 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/

Nakon toga dodajte/izmijenite opcije u nastavku u VSFTPD konfiguracijskoj datoteci s njihovim odgovarajućim vrijednostima:

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

Spremite datoteku i zatvorite je. I ponovno pokrenite VSFTPD usluge s nedavnim postavkama:

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

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

13. Sada izvršimo konačnu provjeru i provjerimo je li korisnikov lokalni korijenski direktorij FTP direktorij koji smo stvorili u njegovom početnom direktoriju.

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 zaboravite podijeliti svoje mišljenje o ovom vodiču putem obrasca za komentare u nastavku ili nam eventualno dati bilo kakve važne informacije u vezi s temom.

Na kraju, ali ne manje važno, ne propustite naš sljedeći članak, gdje ćemo opisati kako osigurati FTP poslužitelj pomoću SSL/TLS veza u Ubuntu 16.04/16.10, do tada, uvijek budite uključeni u TecMint.