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


FTP (File Transfer Protocol) je tradicionalni i široko korišten standardni alat za prijenos datoteka između servera i klijenata preko mreže, posebno tamo gdje nije potrebna autentifikacija (dopušta anonimnim korisnicima za povezivanje sa serverom). Moramo shvatiti da FTP nije siguran po defaultu, jer prenosi korisničke vjerodajnice i podatke bez enkripcije.

U ovom vodiču ćemo opisati korake za instaliranje, konfiguraciju i osiguranje FTP servera (VSFTPD je skraćenica od “Very Secure FTP Daemon“) u CentOSu/RHEL 7 i Fedora distribucije.

Imajte na umu da će sve komande u ovom vodiču biti pokrenute kao root, u slučaju da ne koristite server sa root nalogom, koristite naredbu sudo da dobijete root privilegije.

Korak 1: Instaliranje FTP servera

1. Instalacija vsftpd servera je jednostavna, samo pokrenite sljedeću naredbu u terminalu.

yum install vsftpd

2. Nakon što se instalacija završi, usluga će prvo biti onemogućena, tako da je za sada moramo ručno pokrenuti i omogućiti da se automatski pokreće i od sljedećeg pokretanja sistema:

systemctl start vsftpd
systemctl enable vsftpd

3. Dalje, da bismo dozvolili pristup FTP uslugama sa eksternih sistema, moramo otvoriti port 21, gdje FTP demoni slušaju na sljedeći način:

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

Korak 2: Konfigurisanje FTP servera

4. Sada ćemo preći na izvođenje nekoliko konfiguracija za postavljanje i osiguranje našeg FTP servera, počnimo tako što ćemo napraviti sigurnosnu kopiju originalne konfiguracijske datoteke /etc/vsftpd/vsftpd.conf :

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

Zatim otvorite konfiguracijsku datoteku iznad i postavite sljedeće opcije sa ovim 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 osnovu datoteke liste korisnika /etc/vsftpd.userlist.

Prema zadanim postavkama, korisnicima navedenim u userlist_file=/etc/vsftpd.userlist je zabranjen pristup za prijavu 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 korisnicima koji su eksplicitno navedeni u userlist_file=/etc/vsftpd.userlist biti dozvoljeno da se prijave.

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 server, oni su smješteni u chroot'ed zatvor, ovo je lokalni korijenski direktorij koji će služiti kao njihov kućni direktorij samo za FTP sesiju.

Zatim ćemo pogledati dva moguća scenarija kako chroot korisnika FTP-a u Home direktorije (lokalni korijenski) direktorij za FTP korisnike, kao što je objašnjeno u nastavku.

6. Sada dodajte ove dvije sljedeće opcije da ograničite FTP korisnike na njihove početne direktorije.

chroot_local_user=YES
allow_writeable_chroot=YES

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

Isto tako, prema zadanim postavkama, vsftpd ne dozvoljava upisivanje u chroot jail direktorij iz sigurnosnih razloga, međutim, možemo koristiti opciju allow_writeable_chroot=YES da poništimo ovu postavku.

Sačuvajte datoteku i zatvorite je.

Osiguravanje FTP servera sa SELinuxom

7. Sada, postavimo SELinux boolean ispod da omogućimo FTP-u da čita datoteke u korisničkom početnom direktoriju. Imajte na umu da je ovo u početku urađeno pomoću naredbe:

setsebool -P ftp_home_dir on

Međutim, ftp_home_dir direktiva je onemogućena po defaultu kao što je objašnjeno u ovom izvještaju o grešci: https://bugzilla.redhat.com/show_bug.cgi?id=1097775.

Sada ćemo koristiti naredbu semanage da postavimo SELinux pravilo da dozvoli FTP-u da čita/piše korisnički početni direktorij.

semanage boolean -m ftpd_full_access --on

U ovom trenutku moramo ponovo pokrenuti vsftpd da izvršimo sve promjene koje smo do sada napravili gore:

systemctl restart vsftpd

Korak 4: Testiranje FTP servera

8. Sada ćemo testirati FTP server kreiranjem FTP korisnika sa komandom useradd.

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

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

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

9. Sada je vrijeme da testiramo da li gore navedene postavke rade ispravno. Počnimo s testiranjem anonimnih prijava, možemo vidjeti na snimku ekrana ispod da anonimne prijave nisu dozvoljene:

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 da li će korisniku koji nije naveden u datoteci /etc/vsftpd.userlist biti dodijeljena dozvola za prijavu, što nije slučaj kao na snimku ekrana ispod:

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 uradite konačnu provjeru da li je korisnik naveden u datoteci /etc/vsftpd.userlist zaista smješten u njegov/njen početni 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

Aktivirajte ovu opciju samo ako tačno znate šta radite. Važno je napomenuti da ove sigurnosne implikacije nisu specifične za vsftpd, one se primjenjuju na sve FTP demone koji također nude stavljanje lokalnih korisnika u chroot zatvore.

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

Korak 5: Konfigurirajte različite kućne direktorije FTP korisnika

12. Ponovo otvorite konfiguracijsku datoteku vsftpd i počnite komentiranjem nesigurne opcije ispod:

#allow_writeable_chroot=YES

Zatim kreirajte alternativni lokalni korijenski direktorij za korisnika (ravi, vaš je vjerovatno 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 kreirajte direktorij ispod lokalnog korijena gdje će korisnik pohraniti svoje datoteke:

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

Zatim dodajte/izmijenite sljedeće opcije u vsftpd konfiguracijskoj datoteci sa 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

Sačuvajte datoteku i zatvorite je. Još jednom, hajde da ponovo pokrenemo uslugu sa novim postavkama:

systemctl restart vsftpd

14. Sada ponovite završni test i vidite da je lokalni korijenski direktorij korisnika FTP direktorij koji smo kreirali 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 članku smo opisali kako instalirati, konfigurirati i osigurati FTP server u CentOS-u 7, koristite odjeljak za komentare ispod da nam pišete u vezi sa ovim vodičem/podijelite bilo kakve korisne informacije o ovoj temi.

Preporučeno čitanje: Instalirajte ProFTPD server na RHEL/CentOS 7

U sljedećem članku ćemo vam također pokazati kako osigurati FTP server pomoću SSL/TLS konekcija u CentOS 7, a do tada ostanite povezani na TecMint.