Sådan installeres, konfigureres og sikres FTP-server i CentOS 7 - [Omfattende vejledning]


FTP (File Transfer Protocol) er et traditionelt og udbredt standardværktøj til overførsel af filer mellem en server og klienter over et netværk, især hvor ingen godkendelse er nødvendig (tillader anonyme brugere at oprette forbindelse til en server). Vi skal forstå, at FTP er usikker som standard, fordi den transmitterer brugeroplysninger og data uden kryptering.

I denne vejledning beskriver vi trinene til installation, konfiguration og sikring af en FTP-server (VSFTPD står for "Very Secure FTP Daemon") i CentOS/RHEL 7- og Fedora-distributioner.

Bemærk, at alle kommandoerne i denne vejledning køres som root. Hvis du ikke betjener serveren med rodkontoen, skal du bruge sudo-kommandoen for at få root-rettigheder.

Trin 1: Installation af FTP-server

1. Installation af vsftpd-server er lige frem, kør bare følgende kommando i terminalen.

# yum install vsftpd

2. Når installationen er afsluttet, deaktiveres tjenesten først, så vi er nødt til at starte den manuelt indtil videre og aktivere den også automatisk fra næste systemstart:

# systemctl start vsftpd
# systemctl enable vsftpd

3. For at give adgang til FTP-tjenester fra eksterne systemer skal vi derefter åbne port 21, hvor FTP-dæmoner lytter som følger:

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

Trin 2: Konfiguration af FTP-server

4. Nu bevæger vi os for at udføre et par konfigurationer for at opsætte og sikre vores FTP-server. Lad os starte med at lave en sikkerhedskopi af den oprindelige konfigurationsfil /etc/vsftpd/vsftpd.conf:

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

Åbn derefter konfigurationsfilen ovenfor, og indstil følgende muligheder med disse tilsvarende værdier:

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 nu FTP til at tillade/nægte FTP-adgang til brugere baseret på brugerlistefilen /etc/vsftpd.userlist .

Som standard nægtes brugere, der er anført i userlist_file =/etc/vsftpd.userlist loginadgang med indstillingen userlist_deny indstillet til YES, hvis userlist_enable = YES.

Imidlertid ændrer userlist_deny = NO indstillingen, hvilket betyder, at kun brugere, der udtrykkeligt er angivet i userlist_file =/etc/vsftpd.userlist, har tilladelse til at logge ind.

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 brugere logger ind på FTP-serveren, placeres de i en chroot'ed-fængsel, dette er den lokale rodmappe, der kun fungerer som deres hjemmekatalog til FTP-sessionen.

Dernæst vil vi se på to mulige scenarier for, hvordan man rydder FTP-brugere til hjemmekataloger (lokal rod) -mappe til FTP-brugere, som forklaret nedenfor.

6. Tilføj nu disse to følgende muligheder for at begrænse FTP-brugere til deres hjemmekataloger.

chroot_local_user=YES
allow_writeable_chroot=YES

chroot_local_user = JA betyder, at lokale brugere placeres i en chroot-fængsel, deres hjemmekatalog efter login som standardindstillinger.

Og som standard tillader vsftpd ikke chroot-fængselsmappen at kunne skrives af sikkerhedsmæssige årsager, men vi kan dog bruge muligheden allow_writeable_chroot = YES til at tilsidesætte denne indstilling.

Gem filen, og luk den.

Sikring af FTP-server med SELinux

7. Lad os nu indstille SELinux boolean nedenfor for at tillade FTP at læse filer i en brugers hjemmekatalog. Bemærk, at dette oprindeligt blev gjort ved hjælp af kommandoen:

# setsebool -P ftp_home_dir on

Direktivet ftp_home_dir er dog som standard deaktiveret som forklaret i denne fejlrapport: https://bugzilla.redhat.com/show_bug.cgi?id=1097775.

Nu bruger vi semanage-kommando til at indstille SELinux-regel, så FTP kan læse/skrive brugerens hjemmekatalog.

# semanage boolean -m ftpd_full_access --on

På dette tidspunkt er vi nødt til at genstarte vsftpd for at gennemføre alle de ændringer, vi har foretaget indtil videre:

# systemctl restart vsftpd

Trin 4: Test af FTP-server

8. Nu vil vi teste FTP-serveren ved at oprette en FTP-bruger med kommandoen useradd.

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

Bagefter skal vi tilføje brugeren ravi til filen /etc/vsftpd.userlist ved hjælp af ekkokommandoen som følger:

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

9. Nu er det tid til at teste, om vores indstillinger ovenfor fungerer korrekt. Lad os starte med at teste anonyme login, vi kan se på skærmbilledet nedenfor, at anonyme login ikke er tilladt:

# 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. Lad os også teste, om en bruger, der ikke er anført i filen /etc/vsftpd.userlist, får tilladelse til login, hvilket ikke er tilfældet som i skærmbilledet 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. Kontroller nu, om en bruger, der er anført i filen /etc/vsftpd.userlist, faktisk er placeret i hans/hendes hjemmekatalog efter login:

# 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

Aktivér kun denne mulighed, hvis du nøjagtigt ved, hvad du laver. Det er vigtigt at bemærke, at disse sikkerhedsimplikationer ikke er vsftpd-specifikke, de gælder for alle FTP-dæmoner, der også tilbyder at placere lokale brugere i chroot-fængsler.

Derfor vil vi se på en mere sikker måde at indstille en anden ikke-skrivbar lokal rodmappe i det næste afsnit.

Trin 5: Konfigurer forskellige FTP-brugermapper til hjemmet

12. Åbn vsftpd-konfigurationsfilen igen, og start med at kommentere den usikre mulighed nedenfor:

#allow_writeable_chroot=YES

Opret derefter den alternative lokale rodmappe til brugeren ( ravi , din er sandsynligvis anderledes) og fjern skrivetilladelser til alle brugere til denne mappe:

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

13. Opret derefter et bibliotek under den lokale rod, hvor brugeren gemmer sine filer:

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

Tilføj/rediger derefter følgende muligheder i vsftpd-konfigurationsfilen med disse værdier:

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

Gem filen, og luk den. Lad os igen genstarte tjenesten med de nye indstillinger:

# systemctl restart vsftpd

14. Lav nu en sidste test igen, og se, at brugernes lokale rodmappe er den FTP-mappe, vi oprettede i hans hjemmekatalog.

# 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 artikel beskrev vi, hvordan du installerer, konfigurerer såvel som sikrer en FTP-server i CentOS 7, brug kommentarsektionen nedenfor til at skrive tilbage til os angående denne vejledning/del alle nyttige oplysninger om dette emne.

I den næste artikel vil vi også vise dig, hvordan du sikrer en FTP-server ved hjælp af SSL/TLS-forbindelser i CentOS 7, indtil da forbliver forbundet til TecMint.