Zoeken op website

Hoe u een FTP-server installeert, configureert en beveiligt in CentOS 7 - [Uitgebreide handleiding]


FTP (File Transfer Protocol) is een traditionele en veelgebruikte standaardtool voor het overbrengen van bestanden tussen een server en clients via een netwerk, vooral als er geen authenticatie nodig is (staat anonieme gebruikers toe om verbinding te maken met een server). We moeten begrijpen dat FTP standaard onveilig is, omdat het gebruikersgegevens en gegevens zonder encryptie verzendt.

In deze handleiding beschrijven we de stappen voor het installeren, configureren en beveiligen van een FTP-server (VSFTPD staat voor “Very Secure FTP Daemon“) in CentOS/RHEL 7 en Fedora distributies.

Houd er rekening mee dat alle opdrachten in deze handleiding als root worden uitgevoerd. Als u de server niet met het root-account bedient, gebruikt u de opdracht sudo om root-rechten te verkrijgen.

Stap 1: FTP-server installeren

1. Het installeren van de vsftpd-server is eenvoudig. Voer gewoon de volgende opdracht uit in de terminal.

yum install vsftpd

2. Nadat de installatie is voltooid, wordt de service in eerste instantie uitgeschakeld, dus we moeten deze voorlopig handmatig starten en inschakelen dat deze ook automatisch start vanaf de volgende systeemstart:

systemctl start vsftpd
systemctl enable vsftpd

3. Vervolgens moeten we, om toegang tot FTP-services vanaf externe systemen mogelijk te maken, poort 21 openen, waar de FTP-daemons als volgt luisteren:

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

Stap 2: FTP-server configureren

4. Nu gaan we een paar configuraties uitvoeren om onze FTP-server in te stellen en te beveiligen. Laten we beginnen met het maken van een back-up van het originele configuratiebestand /etc/vsftpd/vsftpd.conf :

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

Open vervolgens het bovenstaande configuratiebestand en stel de volgende opties in met deze overeenkomstige waarden:

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. Configureer nu FTP om FTP-toegang toe te staan/te weigeren aan gebruikers op basis van het gebruikerslijstbestand /etc/vsftpd.userlist.

Standaard wordt aan gebruikers vermeld in userlist_file=/etc/vsftpd.userlist inlogtoegang geweigerd met de optie userlist_deny ingesteld op JA, als userlist_enable=JA.

userlist_deny=NO wijzigt echter de instelling, wat betekent dat alleen gebruikers die expliciet vermeld staan in userlist_file=/etc/vsftpd.userlist mogen inloggen.

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   

Dat is nog niet alles: wanneer gebruikers inloggen op de FTP-server, worden ze in een chroot-gevangenis geplaatst, dit is de lokale hoofdmap die alleen voor de FTP-sessie als hun thuismap zal fungeren.

Vervolgens bekijken we twee mogelijke scenario's voor het chrooten van FTP-gebruikers naar de thuismappen (lokale hoofdmap) voor FTP-gebruikers, zoals hieronder wordt uitgelegd.

6. Voeg nu deze twee volgende opties toe om FTP-gebruikers te beperken tot hun thuismappen.

chroot_local_user=YES
allow_writeable_chroot=YES

chroot_local_user=YES betekent dat lokale gebruikers in een chroot jail worden geplaatst, hun thuismap na het inloggen volgens de standaardinstellingen.

En standaard staat vsftpd om veiligheidsredenen niet toe dat de chroot jail directory beschrijfbaar is. We kunnen echter de optie allow_writeable_chroot=YES gebruiken om deze instelling te overschrijven.

Sla het bestand op en sluit het.

FTP-server beveiligen met SELinux

7. Laten we nu de SELinux boolean hieronder zo instellen dat FTP bestanden in de thuismap van een gebruiker kan lezen. Merk op dat dit aanvankelijk werd gedaan met behulp van de opdracht:

setsebool -P ftp_home_dir on

De ftp_home_dir richtlijn is echter standaard uitgeschakeld, zoals uitgelegd in dit bugrapport: https://bugzilla.redhat.com/show_bug.cgi?id=1097775.

Nu zullen we het semanage commando gebruiken om de SELinux-regel zo in te stellen dat FTP de thuismap van de gebruiker kan lezen/schrijven.

semanage boolean -m ftpd_full_access --on

Op dit punt moeten we vsftpd opnieuw opstarten om alle wijzigingen door te voeren die we tot nu toe hierboven hebben aangebracht:

systemctl restart vsftpd

Stap 4: FTP-server testen

8. Nu gaan we de FTP-server testen door een FTP-gebruiker aan te maken met de opdracht useradd.

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

Daarna moeten we de gebruiker ravi als volgt toevoegen aan het bestand /etc/vsftpd.userlist met behulp van het echo-commando:

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

9. Nu is het tijd om te testen of onze bovenstaande instellingen correct werken. Laten we beginnen met het testen van anonieme logins. We kunnen aan de onderstaande schermafbeelding zien dat anonieme logins niet zijn toegestaan:

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. Laten we ook testen of een gebruiker die niet in het bestand /etc/vsftpd.userlist staat, toestemming krijgt om in te loggen, wat niet het geval is zoals in de schermafdruk onderstaand:

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. Voer nu een laatste controle uit of een gebruiker die in het bestand /etc/vsftpd.userlist staat, na het inloggen daadwerkelijk in zijn/haar homedirectory wordt geplaatst:

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

Activeer deze optie alleen als u precies weet wat u doet. Het is belangrijk op te merken dat deze veiligheidsimplicaties niet specifiek zijn voor vsftpd, ze zijn van toepassing op alle FTP-daemons die aanbieden om lokale gebruikers ook in chroot-jails te plaatsen.

Daarom zullen we in de volgende sectie kijken naar een veiligere manier om een andere niet-schrijfbare lokale hoofdmap in te stellen.

Stap 5: Configureer verschillende thuismappen voor FTP-gebruikers

12. Open het vsftpd-configuratiebestand opnieuw en begin met het plaatsen van commentaar op de onveilige optie hieronder:

#allow_writeable_chroot=YES

Maak vervolgens de alternatieve lokale hoofdmap voor de gebruiker (ravi, die van jou is waarschijnlijk anders) en verwijder de schrijfrechten voor alle gebruikers naar deze map:

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

13. Maak vervolgens een map aan onder de lokale root waar de gebruiker zijn/haar bestanden opslaat:

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

Voeg vervolgens de volgende opties toe/wijzig ze in het vsftpd-configuratiebestand met deze waarden:

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

Sla het bestand op en sluit het. Laten we de service nogmaals opnieuw starten met de nieuwe instellingen:

systemctl restart vsftpd

14. Voer nu opnieuw een laatste test uit en kijk of de lokale hoofdmap van de gebruiker de FTP-map is die we in zijn thuismap hebben gemaakt.

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

Dat is het! In dit artikel hebben we beschreven hoe u een FTP-server in CentOS 7 installeert, configureert en beveiligt. Gebruik het commentaargedeelte hieronder om ons terug te schrijven over deze handleiding of om nuttige informatie over dit onderwerp te delen.

Voorgesteld lezen: Installeer ProFTPD Server op RHEL/CentOS 7

In het volgende artikel laten we u ook zien hoe u een FTP-server kunt beveiligen met SSL/TLS-verbindingen in CentOS 7 en tot die tijd verbonden kunt blijven met TecMint.