Kako instalirati, konfigurirati i osigurati FTP poslužitelj u CentOS 7 - [Sveobuhvatan vodič]


FTP (File Transfer Protocol) je tradicionalni i široko korišteni standardni alat za prijenos datoteka između poslužitelja i klijenata putem mreže, posebno tamo gdje nije potrebna autentifikacija (anonimnim korisnicima omogućuje povezivanje s poslužiteljem). Moramo shvatiti da FTP prema zadanim postavkama nije siguran jer prenosi vjerodajnice i podatke korisnika bez šifriranja.

U ovom ćemo vodiču opisati korake za instaliranje, konfiguriranje i zaštitu FTP poslužitelja (VSFTPD je kratica za izrazito siguran FTP demon) u distribucijama CentOS/RHEL 7 i Fedora.

Imajte na umu da će se sve naredbe u ovom vodiču izvoditi kao root, u slučaju da ne poslužite poslužitelj s root računom, upotrijebite naredbu sudo da biste stekli root privilegije.

Korak 1: Instalacija FTP poslužitelja

1. Instaliranje vsftpd poslužitelja je jednostavno, samo pokrenite sljedeću naredbu u terminalu.

# yum install vsftpd

2. Po završetku instalacije usluga će u početku biti onemogućena, pa je zasad moramo pokrenuti ručno i omogućiti automatsko pokretanje od sljedećeg pokretanja sustava:

# systemctl start vsftpd
# systemctl enable vsftpd

3. Dalje, da bismo omogućili pristup FTP uslugama iz vanjskih sustava, moramo otvoriti port 21, gdje FTP demoni slušaju kako slijedi:

# firewall-cmd --zone=public --permanent --add-port=21/tcp
# firewall-cmd --zone=public --permanent --add-service=ftp
# firewall-cmd --reload

Korak 2: Konfiguriranje FTP poslužitelja

4. Sada ćemo prijeći na nekoliko konfiguracija za postavljanje i zaštitu našeg FTP poslužitelja, krenimo s izradom sigurnosne kopije izvorne konfiguracijske datoteke /etc/vsftpd/vsftpd.conf:

# cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.orig

Dalje, otvorite gornju konfiguracijsku datoteku i postavite sljedeće opcije s tim odgovarajućim 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 FTP da dozvoli/odbije FTP pristup korisnicima na temelju datoteke popisa korisnika /etc/vsftpd.userlist .

Prema zadanim postavkama, korisnicima navedenim u userlist_file =/etc/vsftpd.userlist onemogućen je pristup prijavom s opcijom userlist_deny postavljenom na DA, ako je userlist_enable = DA.

Međutim, userlist_deny = NO mijenja postavku, što znači da će samo korisnici koji su izričito navedeni u userlist_file =/etc/vsftpd.userlist biti dopušteni za prijavu.

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   

To nije sve, kada se korisnici prijave na FTP poslužitelj, budu smješteni u chroot zatvor, ovo je lokalni korijenski direktorij koji će djelovati kao njihov početni direktorij samo za FTP sesiju.

Dalje, razmotrit ćemo dva moguća scenarija kako hrotirati FTP korisnike u direktorij Home direktoriji (lokalni korijenski) za FTP korisnike, kako je objašnjeno u nastavku.

6. Sada dodajte ove dvije sljedeće mogućnosti za ograničavanje FTP korisnika na njihove početne direktorije.

chroot_local_user=YES
allow_writeable_chroot=YES

chroot_local_user = DA znači da će lokalni korisnici biti smješteni u chroot zatvor, njihov početni direktorij nakon prijave po zadanim postavkama.

A također prema zadanim postavkama, vsftpd ne dopušta da se u imenik chroot zatvora može zapisati iz sigurnosnih razloga, međutim, možemo koristiti opciju allow_writeable_chroot = DA da poništimo ovu postavku.

Spremite datoteku i zatvorite je.

Osiguravanje FTP poslužitelja sa SELinuxom

7. Sada, postavimo donji logički izraz SELinux kako bi FTP omogućio čitanje datoteka u korisnikovom kućnom direktoriju. Imajte na umu da je to u početku učinjeno pomoću naredbe:

# setsebool -P ftp_home_dir on

Međutim, direktiva ftp_home_dir onemogućena je prema zadanim postavkama kako je objašnjeno u ovom izvješću o programskoj pogrešci: https://bugzilla.redhat.com/show_bug.cgi?id=1097775.

Sada ćemo upotrijebiti naredbu semanage za postavljanje SELinux pravila kako bi FTP omogućio čitanje/pisanje korisničkog kućnog direktorija.

# semanage boolean -m ftpd_full_access --on

U ovom trenutku moramo ponovno pokrenuti vsftpd kako bismo izvršili sve promjene koje smo do sada napravili:

# systemctl restart vsftpd

Korak 4: Testiranje FTP poslužitelja

8. Sada ćemo testirati FTP poslužitelj stvaranjem FTP korisnika pomoću naredbe useradd.

# useradd -m -c “Ravi Saive, CEO” -s /bin/bash ravi
# passwd ravi

Nakon toga moramo dodati korisnika ravi u datoteku /etc/vsftpd.userlist pomoću naredbe echo na sljedeći način:

# echo "ravi" | tee -a /etc/vsftpd.userlist
# cat /etc/vsftpd.userlist

9. Sada je vrijeme da testiramo rade li gore navedene postavke ispravno. Počnimo s testiranjem anonimnih prijava, na donjem snimku zaslona vidimo da anonimne prijave nisu dopuštene:

# ftp 192.168.56.10
Connected to 192.168.56.10  (192.168.56.10).
220 Welcome to TecMint.com FTP service.
Name (192.168.56.10:root) : anonymous
530 Permission denied.
Login failed.
ftp>

10. Testirajmo i hoće li korisnik koji nije naveden u datoteci /etc/vsftpd.userlist dobiti odobrenje za prijavu, što nije slučaj kao na donjem snimku zaslona:

# ftp 192.168.56.10
Connected to 192.168.56.10  (192.168.56.10).
220 Welcome to TecMint.com FTP service.
Name (192.168.56.10:root) : aaronkilik
530 Permission denied.
Login failed.
ftp>

11. Sada izvršite posljednju provjeru je li korisnik naveden u datoteci /etc/vsftpd.userlist, zapravo prijavljen u svoj kućni direktorij nakon prijave:

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

Ovu opciju aktivirajte samo ako točno znate što radite. Važno je napomenuti da ove sigurnosne implikacije nisu specifične za vsftpd, primjenjuju se na sve FTP demone koji nude i stavljanje lokalnih korisnika u chroot zatvorenike.

Stoga ćemo u sljedećem odjeljku potražiti sigurniji način postavljanja drugačijeg lokalnog korijenskog direktorija koji se ne može pisati.

Korak 5: Konfiguriranje različitih direktorija FTP korisnika

12. Ponovno otvorite datoteku za konfiguraciju vsftpd i započnite komentiranjem dolje nesigurne opcije:

#allow_writeable_chroot=YES

Zatim stvorite alternativni lokalni korijenski direktorij za korisnika ( ravi , vaš je vjerojatno drugačiji) i uklonite dozvole za pisanje svim korisnicima u ovaj direktorij:

# mkdir /home/ravi/ftp
# chown nobody:nobody /home/ravi/ftp
# chmod a-w /home/ravi/ftp

13. Zatim stvorite direktorij pod lokalnim korijenom u koji će korisnik pohranjivati svoje datoteke:

# mkdir /home/ravi/ftp/files
# chown ravi:ravi  /home/ravi/ftp/files
# chmod 0700 /home/ravi/ftp/files/

Zatim u konfiguracijsku datoteku vsftpd dodajte/izmijenite sljedeće opcije s ovim 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. Ponovno pokrenimo uslugu s novim postavkama:

# systemctl restart vsftpd

14. Sada ponovno napravite posljednji test i vidite da je lokalni korijenski direktorij korisnika FTP direktorij koji smo stvorili u njegovom početnom direktoriju.

# ftp 192.168.56.10
Connected to 192.168.56.10  (192.168.56.10).
220 Welcome to TecMint.com FTP service.
Name (192.168.56.10:root) : ravi
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! U ovom smo članku opisali kako instalirati, konfigurirati, kao i osigurati FTP poslužitelj u CentOS 7, upotrijebite odjeljak za komentare u nastavku da biste nam odgovorili u vezi s ovim vodičem/podijelili korisne informacije o ovoj temi.

U sljedećem članku također ćemo vam pokazati kako osigurati FTP poslužitelj pomoću SSL/TLS veza u CentOS 7, a do tada ostanite povezani s TecMintom.