Kako namestiti, konfigurirati in zaščititi strežnik FTP v CentOS 7 - [Izčrpen vodnik]


FTP (File Transfer Protocol) je tradicionalno in pogosto uporabljano standardno orodje za prenos datotek med strežnikom in odjemalci prek omrežja, zlasti kadar avtentifikacija ni potrebna (anonimnim uporabnikom omogoča povezavo s strežnikom). Moramo razumeti, da FTP privzeto ni varen, ker posreduje uporabniške poverilnice in podatke brez šifriranja.

V tem priročniku bomo opisali korake za namestitev, konfiguracijo in zaščito strežnika FTP (VSFTPD pomeni „Zelo varen FTP Daemon“) v distribucijah CentOS/RHEL 7 in Fedora.

Upoštevajte, da se bodo vsi ukazi v tem priročniku izvajali kot root, če strežnika ne upravljate s korenskim računom, uporabite ukaz sudo za pridobitev korenskih pravic.

1. korak: Namestitev strežnika FTP

1. Namestitev strežnika vsftpd je naravnost naprej, v terminalu zaženite naslednji ukaz.

# yum install vsftpd

2. Po končani namestitvi bo storitev sprva onemogočena, zato jo moramo zaenkrat zagnati ročno in omogočiti, da se samodejno zažene tudi ob naslednjem zagonu sistema:

# systemctl start vsftpd
# systemctl enable vsftpd

3. Nato moramo, da omogočimo dostop do storitev FTP iz zunanjih sistemov, odpreti vrata 21, kjer demoni FTP poslušajo na naslednji način:

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

2. korak: Konfiguriranje strežnika FTP

4. Zdaj bomo izvedli nekaj konfiguracij za nastavitev in zaščito našega FTP strežnika, začnimo z izdelavo varnostne kopije izvirne konfiguracijske datoteke /etc/vsftpd/vsftpd.conf:

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

Nato odprite konfiguracijsko datoteko zgoraj in nastavite naslednje možnosti s temi ustreznimi vrednostmi:

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 FTP, da uporabnikom dovoli/zavrne dostop do FTP na podlagi datoteke s seznamom uporabnikov /etc/vsftpd.userlist .

Uporabnikom, navedenim v userlist_file =/etc/vsftpd.userlist , je privzeto zavrnjen dostop z možnostjo userlist_deny nastavljeno na YES, če userlist_enable = YES.

Vendar userlist_deny = NO spremeni nastavitev, kar pomeni, da se bodo lahko prijavili samo uporabniki, ki so izrecno navedeni 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   

To še ni vse, 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 uporabnike FTP razvrstiti v imenik Domači imeniki (lokalni korenski) za uporabnike FTP, kot je razloženo spodaj.

6. Zdaj dodajte ti dve možnosti, da uporabnike FTP omejite na njihove domače imenike.

chroot_local_user=YES
allow_writeable_chroot=YES

chroot_local_user = DA pomeni, da bodo lokalni uporabniki po privzetih nastavitvah postavljeni v zapor chroot, njihov domači imenik po prijavi.

In tudi privzeto vsftpd iz varnostnih razlogov ne dovoli, da je v imenik chroot jail mogoče zapisovati, vendar lahko uporabimo možnost allow_writeable_chroot = DA, da preglasimo to nastavitev.

Datoteko shranite in zaprite.

Zaščita strežnika FTP s SELinuxom

7. Zdaj nastavimo spodnjo logično vrednost SELinux, da FTP omogoča branje datotek v uporabnikovem domačem imeniku. Upoštevajte, da je bilo to sprva narejeno z ukazom:

# setsebool -P ftp_home_dir on

Vendar je bila direktiva ftp_home_dir privzeto onemogočena, kot je razloženo v tem poročilu o napakah: https://bugzilla.redhat.com/show_bug.cgi?id=1097775.

Zdaj bomo z ukazom semanage nastavili pravilo SELinux, da bo FTP omogočil branje/pisanje uporabnikovega domačega imenika.

# semanage boolean -m ftpd_full_access --on

Na tej točki moramo znova zagnati vsftpd, da izvedemo vse spremembe, ki smo jih naredili do zdaj:

# systemctl restart vsftpd

4. korak: Testiranje strežnika FTP

8. Zdaj bomo strežnik FTP preizkusili z ustvarjanjem uporabnika FTP z ukazom useradd.

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

Nato moramo uporabniški ravi v datoteko /etc/vsftpd.userlist dodati z uporabo ukaza echo, kot sledi:

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

9. Zdaj je čas, da preizkusimo, ali zgornje nastavitve delujejo pravilno. Začnimo s testiranjem anonimnih prijav, na spodnjem posnetku zaslona vidimo, da anonimne prijave niso dovoljene:

# 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. Preizkusimo tudi, ali bo uporabnik, ki ni naveden v datoteki /etc/vsftpd.userlist, dobil dovoljenje za prijavo, kar pa ni tako kot na spodnjem posnetku 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. Zdaj dokončno preverite, ali je uporabnik, naveden v datoteki /etc/vsftpd.userlist, po prijavi dejansko postavljen v svoj domači imenik:

# 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 možnost aktivirajte samo, če natančno veste, kaj počnete. Pomembno je omeniti, da te varnostne posledice niso specifične za vsftpd, ampak veljajo za vse demone FTP, ki ponujajo tudi lokalno uporabo v chroot zaporih.

Zato bomo v naslednjem razdelku preučili varnejši način nastavitve drugačnega lokalnega korenskega imenika, ki ga ni mogoče zapisati.

5. korak: Konfigurirajte različne domače imenike uporabnikov FTP

12. Ponovno odprite konfiguracijsko datoteko vsftpd in začnite s komentarjem spodnje nezaščitene možnosti:

#allow_writeable_chroot=YES

Nato ustvarite nadomestni lokalni korenski imenik za uporabnika ( ravi , vaš je verjetno drugačen) in odstranite dovoljenja za pisanje vsem uporabnikom v ta imenik:

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

13. Nato v lokalnem korenu ustvarite imenik, kamor bo uporabnik shranil svoje datoteke:

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

Nato v konfiguracijski datoteki vsftpd dodajte/spremenite naslednje možnosti s temi 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. Ponovno zaženimo storitev z novimi nastavitvami:

# systemctl restart vsftpd

14. Zdaj znova naredite zadnji test in se prepričajte, da je lokalni korenski imenik uporabnikov imenik FTP, ki smo ga ustvarili v njegovem domačem imeniku.

# 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! V tem članku smo opisali, kako namestiti, konfigurirati in zaščititi strežnik FTP v CentOS 7, v spodnjem razdelku za komentar pa nam pišite v zvezi s tem vodnikom/delite koristne informacije o tej temi.

V naslednjem članku vam bomo tudi pokazali, kako zaščititi strežnik FTP s povezavami SSL/TLS v CentOS 7, do takrat pa ostanite povezani s TecMintom.