Hvordan installere, konfigurere og sikre FTP-server i CentOS 7 - [Omfattende veiledning]


FTP (File Transfer Protocol) er et tradisjonelt og mye brukt standardverktøy for å overføre filer mellom en server og klienter over et nettverk, spesielt der ingen autentisering er nødvendig (tillater anonyme brukere å koble til en server). Vi må forstå at FTP er usikker som standard, fordi den overfører brukerlegitimasjon og data uten kryptering.

I denne guiden vil vi beskrive trinnene for å installere, konfigurere og sikre en FTP-server (VSFFTPD står for Very Secure FTP Daemon) i CentOS/RHEL 7 og Fedora-distribusjoner.

Merk at alle kommandoene i denne veiledningen vil bli kjørt som root, i tilfelle du ikke opererer serveren med root-kontoen, bruk sudo-kommandoen for å få root-privilegier.

Trinn 1: Installere FTP-server

1. Installering av vsftpd-server er rett frem, bare kjør følgende kommando i terminalen.

# yum install vsftpd

2. Etter at installasjonen er fullført, vil tjenesten først deaktiveres, så vi må starte den manuelt inntil videre og aktivere den til å starte automatisk fra neste systemoppstart også:

# systemctl start vsftpd
# systemctl enable vsftpd

3. Deretter, for å tillate tilgang til FTP-tjenester fra eksterne systemer, må vi åpne port 21, hvor FTP-demonene lytter som følger:

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

Trinn 2: Konfigurering av FTP-server

4. Nå vil vi gå over til å utføre noen få konfigurasjoner for å sette opp og sikre FTP-serveren vår, la oss starte med å ta en sikkerhetskopi av den originale konfigurasjonsfilen /etc/vsftpd/vsftpd.conf:

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

Deretter åpner du konfigurasjonsfilen ovenfor og setter følgende alternativer med disse tilsvarende verdiene:

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. Konfigurer nå FTP for å tillate/nekte FTP-tilgang til brukere basert på brukerlistefilen /etc/vsftpd.userlist.

Som standard nektes brukere oppført i userlist_file=/etc/vsftpd.userlist påloggingstilgang med alternativet userlist_deny satt til YES, hvis userlist_enable=YES.

Userlist_deny=NO endrer imidlertid innstillingen, noe som betyr at bare brukere som er eksplisitt oppført i userlist_file=/etc/vsftpd.userlist vil få lov til å logge på.

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   

Det er ikke alt, når brukere logger på FTP-serveren, blir de plassert i et chroot'ed-fengsel, dette er den lokale rotkatalogen som vil fungere som deres hjemmekatalog kun for FTP-økten.

Deretter vil vi se på to mulige scenarier for hvordan du chroot FTP-brukere til hjemmekataloger (lokal rot) for FTP-brukere, som forklart nedenfor.

6. Legg nå til disse to følgende alternativene for å begrense FTP-brukere til hjemmekatalogene deres.

chroot_local_user=YES
allow_writeable_chroot=YES

chroot_local_user=JA betyr at lokale brukere vil bli plassert i et chroot-fengsel, deres hjemmekatalog etter pålogging som standardinnstillinger.

Og som standard tillater ikke vsftpd at chroot jail-katalogen kan skrives av sikkerhetsgrunner, men vi kan bruke alternativet allow_writeable_chroot=YES for å overstyre denne innstillingen.

Lagre filen og lukk den.

Sikring av FTP-server med SELinux

7. La oss nå sette SELinux-boolen nedenfor for å tillate FTP å lese filer i en brukers hjemmekatalog. Merk at dette først ble gjort ved å bruke kommandoen:

# setsebool -P ftp_home_dir on

Imidlertid har ftp_home_dir-direktivet blitt deaktivert som standard som forklart i denne feilrapporten: https://bugzilla.redhat.com/show_bug.cgi?id=1097775.

Nå vil vi bruke semanage-kommando for å sette SELinux-regelen for å tillate FTP å lese/skrive brukerens hjemmekatalog.

# semanage boolean -m ftpd_full_access --on

På dette tidspunktet må vi starte vsftpd på nytt for å gjennomføre alle endringene vi har gjort så langt ovenfor:

# systemctl restart vsftpd

Trinn 4: Testing av FTP-server

8. Nå skal vi teste FTP-serveren ved å opprette en FTP-bruker med kommandoen useradd.

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

Etterpå må vi legge til brukeren ravi til filen /etc/vsftpd.userlist ved å bruke echo-kommandoen som følger:

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

9. Nå er det på tide å teste om innstillingene ovenfor fungerer som de skal. La oss starte med å teste anonyme pålogginger, vi kan se fra skjermbildet nedenfor at anonyme pålogginger ikke er tillatt:

# 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. La oss også teste om en bruker som ikke er oppført i filen /etc/vsftpd.userlist vil få tillatelse til å logge på, noe som ikke er tilfellet som i skjermbildet nedenfor:

# 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. Gjør nå en siste sjekk om en bruker som er oppført i filen /etc/vsftpd.userlist, faktisk er plassert i hjemmekatalogen hans/hennes etter pålogging:

# 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

Aktiver bare dette alternativet hvis du nøyaktig vet hva du gjør. Det er viktig å merke seg at disse sikkerhetsimplikasjonene ikke er vsftpd-spesifikke, de gjelder for alle FTP-demoner som tilbyr å sette lokale brukere i chroot-fengsler også.

Derfor vil vi se på en sikrere måte å sette en annen ikke-skrivbar lokal rotkatalog på i neste avsnitt.

Trinn 5: Konfigurer forskjellige FTP-brukerhjemmekataloger

12. Åpne vsftpd-konfigurasjonsfilen igjen og begynn med å kommentere det usikre alternativet nedenfor:

#allow_writeable_chroot=YES

Deretter oppretter du den alternative lokale rotkatalogen for brukeren (ravi, din er sannsynligvis annerledes) og fjerner skriverettigheter til alle brukere til denne katalogen:

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

13. Deretter oppretter du en katalog under den lokale roten der brukeren vil lagre filene sine:

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

Legg deretter til/endre følgende alternativer i vsftpd-konfigurasjonsfilen med disse verdiene:

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

Lagre filen og lukk den. Nok en gang, la oss starte tjenesten på nytt med de nye innstillingene:

# systemctl restart vsftpd

14. Gjør nå en siste test igjen og se at brukerens lokale rotkatalog er FTP-katalogen vi opprettet i hjemmekatalogen hans.

# 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

Det er det! I denne artikkelen beskrev vi hvordan du installerer, konfigurerer og sikrer en FTP-server i CentOS 7. Bruk kommentarfeltet nedenfor for å skrive tilbake til oss angående denne veiledningen/dele nyttig informasjon om dette emnet.

I den neste artikkelen vil vi også vise deg hvordan du sikrer en FTP-server ved å bruke SSL/TLS-tilkoblinger i CentOS 7, inntil da, hold deg tilkoblet TecMint.