Winkelwagen

/ VPS-Infrastructuur

Alles over de zelfontwikkelde VPS-infrastructuur

Register now

/ Up to date

/ Nieuws

Lancering PerformanceVPS

Meer info
Hulp nodig?

    Sorry, we konden geen resultaten vinden voor jouw zoekopdracht.

    Een FTP server installeren en configureren in CentOS 7

    De meest gebruikte FTP-servers binnen Linux zijn PureFTPd, ProFTPD en vsftpd. Een overzicht van de verschillen vind je op deze website. Wij raden ProFTPD af omdat het minder goed onderhouden wordt dan PureFTPd en vsftpd.

    Let op: op 24 juli 2019 is een kwetsbaarheid gevonden in ProFTPD. Wij raden aan tot dit is opgelost om vsftpd (uit deze handleiding) of SFTP te gebruiken.

    In deze handleiding laten wij zien hoe je met VSFTPD (Very Secure FTP Daemon) een FTP-server in CentOS 7 installeert en configureert, en Let's Encrypt gebruikt om een veilige FTPS-verbinding op te zetten.

    Een FTP-server bied je een eenvoudige methode om bestanden naar je VPS te uploaden . Dit is bijvoorbeeld handig voor een webserver om updates van websites op je VPS te plaatsen, of bij een Plex-server om media te uploaden.

    Gebruik je liever SFTP? Raadpleeg dan deze handleiding.

    • Gebruik sudo of voer de stappen in dit artikel uit als root-user.
    • Het is het veiligst om je FTP-verbinding pas te testen na de configuratie van SSL (TLS).

    De FTP-server installeren en configureren

     

    Stap 1

    Verbind met je VPS via SSH of de VPS-console in je controlepaneel.


     

    Stap 2

    Installeer vsftpd met het commando:

    yum -y install vsftpd
    

     

    Stap 3

    Voor je je FTP-server start, maak je enkele aanpassingen in de configuratie van vsftpd, met als doel toegang tot je FTP-server specifieker af te stellen.

    Open het configuratiebestand met nano of vi:

    nano /etc/vsftpd/vsftpd.conf

     

    Stap 4

    Pas de volgende instellingen aan / voeg ze toe als ze nog niet bestaan. In de toelichting onder de opties wordt de werking van deze opties nader toegelicht.

    anonymous_enable=NO
    chroot_local_user=YES
    allow_writeable_chroot=YES
    userlist_enable=YES
    userlist_file=/etc/vsftpd.userlist
    userlist_deny=NO
    Toelichting code
    • anonymous_enable=NO : Voorkomt dat niet-geïdentificeerde gebruikers kunnen inloggen op je FTP server.
    • chroot_local_user=YES : Plaatst FTP-gebruikers in hun eigen home directory (i.e. een chroot jail) na het inloggen op je FTP server. 
    • allow_writeable_chroot=YES : Geeft FTP-gebruikers toestemming om wijzigingen te maken in de chroot directory (i.e. de eigen home directory).
    • userlist_enable=YES : Schakelt de vsftpd-userlist in, waarmee je gebruikers toestemming kunt geven, of toegang verbieden, tot je FTP-server.
    • userlist_file=/etc/vsftpd.userlist : De locatie van de hierboven beschreven userlist.
    • userlist_deny=NO : Enkel de user accounts in de userlist file mogen inloggen op je FTP-server. Zet je de optie op 'YES', dan geeft de userlist geen toestemming, maar verbiedt het toegang tot je FTP-server.

    Sla de wijzigingen op en sluit het bestand met de toetsencombinatie ctrl + > > enter.



    Stap 5

    CentOS 7 komt out-of-the-box met Firewalld, waarin alle poorten by default dicht staan. Open poort 21 met de commando's:

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

     

    Stap 6

    CentOS 7 komt naast Firewalld ook standaard met SELinux. In deze stap stel je SELinux in om vsftpd read/write toegang te geven tot een gebruiker zijn/haar home directory. Gebruik je geen SELinux, of staat SELinux op permissive? Ga dan verder met de volgende stap.

    semanage boolean -m ftpd_full_access --on

     

    Stap 7

    vsftpd start niet automatisch na de installatie en na een reboot. Je start vsftpd en schakelt het automatisch starten ervan in met:

    systemctl start vsftpd
    systemctl enable vsftpd

    Gebruikers aanmaken en toegang geven tot je FTP-server

     

    In de vorige stappen heb je de vsftpd-userlist optie ingeschakeld, samen met de aanvullende optie dat enkel gebruikersaccounts in de userlist-file toegang hebben tot je FTP-server. In dit onderdeel maak je (optioneel) een nieuwe gebruiker aan, en voeg je de gebruiker toe aan de userlist.

     

    Stap 1

    Je maakt FTP-gebruikers op dezelfde manier aan als normale gebruikers op je VPS. Wil je een bestaand gebruikersaccount gebruiken? Ga dan verder met stap 2.

    Gebruik je FTP om websites te uploaden? Dan raden wij aan om als gebruikersnaam de naam van je domein te gebruiken, bijvoorbeeld de gebruikersnaam voorbeeld.nl, voor het domein voorbeeld.nl.

    useradd -m -c "transip ftp demo" username
    passwd username
    Toelichting code
    • -m: maakt een home directory voor de gebruiker aan. Dit is optioneel en enkel nodig als je daadwerkelijk de user een home directory op je VPS wil geven in /home/username. Geef je de user in het deel 'Home directories van gebruikers aanpassen' een home directory die zich niet in /home bevindt? Dan kun je -m weglaten.
    • -c: is eveneens optioneel en voegt een comment toe aan de gebruiker. Dit is vooral handig om een notitie voor jezelf te maken waarvoor een account dient.
    • username: de daadwerkelijke gebruikersnaam
    • passwd username: geeft de gebruiker een wachtwoord

     

    Stap 2

    Open het userlist-bestand met:

    nano /etc/vsftpd.userlist
    

     

    Stap 3

    Voeg de naam van de gebruiker toe aan het bestand. Iedere gebruikersnaam wordt op een nieuwe regel toegevoegd, bijvoorbeeld:

    transip
    admin
    username

    Tip: alternatief kun je ook de gebruikersnaam in één keer met een commando aan het bestand toevoegen:

    echo "gebruikersnaam" | sudo tee -a /etc/vsftpd.userlist
    

    Sla de wijzigingen op en sluit nano met ctrl + c > y > enter.


    Home directories van gebruikers aanpassen

     

    Dankzij de eerdere configuratie komen FTP-gebruikers standaard in hun home directory terecht. In deze paragraaf laten wij zien hoe je specifieke directories instelt. Dit is bijvoorbeeld handig als je gebruikers naar een specifieke directory wil leiden waar hun website in staat (bij webservers), of bijvoorbeeld een specifieke map (e.g. Big Storage) op een Plex-server.

     

    Stap 1

    Wil je een bestaande map gebruiken? Ga dan verder met stap 3. Bestaat de map nog niet? Maak dan eerst hem aan en verwijder alle schrijfrechten voor alle gebruikers (vervang gebruikersnaam door de naam van de gebruiker).

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

     

    Stap 2

    Maak de directory aan waar de gebruiker bestanden in mag plaatsen en geef enkel die gebruiker volledige rechten tot de map (vervang gebruikersnaam door de naam van de gebruiker):

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

    De reden dat je bij de FTP folder toegang verwijdert en de files folder wel toegang geeft is vanuit veiligheidsoverwegingen: zo voorkom je dat er eventueel toegang verkregen kan worden tot de daar verder onderliggende mappen.


    Stap 3

    Je gaat nu de home directory van je gebruikers instellen. Open opnieuw het configuratiebestand van VSFTP:

    nano /etc/vsftpd/vsftpd.conf

     

    Stap 4

    Voeg de volgende twee regels toe onderaan in het bestand:

    user_sub_token=$USER
    local_root=/home/$USER/ftp/
    • user_sub_token=$USER: de naam van de gebruiker die met je FTP-server verbindt, wordt gebruikt voor de variabele $USER
    • local_root:de directory waar je FTP gebruikers terecht komen. In dit voorbeeld is het de map ftp in de eigen home directory.
      • Stel dat je bijvoorbeeld Big Storage aan je VPS gekoppelt hebt en die wil gebruiken (e.g. voor een Plex-server), dan  gebruik je local_root=/mnt/bigstorage/ (vervang /mnt/bigstorage/ door de daadwerkelijke map waar je Big Storage gemount is), waarbij je dan bijvoorbeeld van /bigstorage/ de rechten verwijderd en een map /mnt/bigstorage/plex aanmaakt waar je gebruikers wel rechten toe geeft.
      • Host je websites (in /var/www/html/) en heb je in de vorige paragraaf je domein als gebruikernsaam gebruikt? Dan zou je hier local_root=/var/www/html/$USER instellen, waarbij je in die map geen rechten geeft, maar bijvoorbeeld wel tot /var/www/html/$USER/public_html

    Sla de wijzigingen op en sluit het bestand met de toetsencombinatie ctrl + > > enter.


     

    Stap 5

    Herstart tot slot vsftpd om de nieuwe configuratie toe te passen. Het kan soms een paar minuten duren voor je een dergelijke configuratiewijziging terugziet wanneer je verbindt via je FTP-client.

    systemctl restart vsftpd

    Je FTP-server beveiligen

     

    Het FTP-protocol versleuteld geen gegevens en is dus onveilig. In de praktijk wordt daarom doorgaans altijd SFTP of FTPS gebruikt (zie dit artikel voor een toelichting op de verschillen). In dit deel van de handleiding beveilig je je FTP-server met FTPS.

     

    Stap 1

    Als SSL(TLS)-certificaat gebruiken we een Let's Encrypt-certificaat. Als je nog geen Let's Encrypt geïnstalleerd hebt, installeer je het eerst met het commando:

    yum -y install certbot

     

    Stap 2

    In deze stap genereer je een standalone certificaat. Het is voor de verificatie belangrijk dat poort 80 en 443 open staan in je firewall (in CentOS 7 is dit standaard Firewalld). Indien ze nog niet open staan gebruik je de commando's:

    firewall-cmd --zone=public --permanent --add-port=80/tcp
    firewall-cmd --zone=public --permanent --add-port=443/tcp
    firewall-cmd --reload

    Genereer een certificaat met het onderstaande commando. Vervang hier server.voorbeeld.nl door je hostname (te controleren met het commando hostnamectl).

    Er zal je om een e-mailadres en toestemming gevraagd worden voor de algemene voorwaarden, en voor het delen van je e-mailadres met de Electronic Frontier Foundation (optioneel).

    certbot certonly --standalone -d server.voorbeeld.nl

     

    Stap 3

    Je Let's Encrypt-certificaat en keyfile zijn opgeslagen in /etc/letsencrypt/live/<hostname>/ (de exacte locatie staat in de output van het commando in stap 2).

    Vervolgens pas je de vsftpd-configuratie aan om inderdaad de Let's Encrypt-certificaten te gebruiken en onveilige verbindingen te weigeren. Open opnieuw /etc/vsftpd/vsftpd.conf:

    nano /etc/vsftpd/vsftpd.conf

     

    Stap 4

    Voeg de volgende configuratie toe onderaan het bestand, waarbij je server.voorbeeld.nl vervangt door je hostname.

    ssl_enable=YES
    allow_anon_ssl=NO
    force_local_data_ssl=YES
    force_local_logins_ssl=YES
    ssl_tlsv1_1=YES
    ssl_tlsv1_2=YES
    ssl_tlsv1=NO
    ssl_sslv2=NO
    ssl_sslv3=NO
    require_ssl_reuse=NO
    ssl_ciphers=HIGH
    pasv_min_port=50100
    pasv_max_port=51100
    rsa_cert_file=/etc/letsencrypt/live/server.voorbeeld.nl/fullchain.pem
    rsa_private_key_file=/etc/letsencrypt/live/server.voorbeeld.nl/privkey.pem
    • Deze stappen zijn getest in FileZilla. Oudere FTP-clients kunnen de optie ssl_tlsv1=YES nodig hebben. Let wel dat het veiliger is om dan een nieuwere FTP client te gebruiken.
    • Word je verbinding vaak verbroken? Probeer dan require_ssl_reuse=NO
    • Pas op bij het overnemen dat je niet een spatie achter een van de regels plaatst. Een spatie te veel is voldoende om te voorkomen dat vsftpd kan starten.

     

    Stap 5

    Een goede reden om voor Let's Encrypt te kiezen in plaats van OpenSSL is de eenvoudige auto-renew mogelijkheid van Let's Encrypt, zodat je geen omkijken hebt naar het eventueel verlopen van je certificaat. Hiervoor maak je een cronjob aan met het commando:

    crontab -e

     

    Stap 6

    Crontab werkt praktisch hetzelfde als vi. Het opent in command mode en je schakelt over op insert mode met de toets 'i'. Voeg daarna de inhoud hieronder toe.

    SHELL=/bin/bash
    HOME=/
    @monthly certbot -q renew >> /var/log/le.log
    • De cronjob wordt iedere maand om 0:00 uitgevoerd.
    • -q zorgt ervoor dat er geen output wordt gegenereerd, behalve bij errors.
    • renew vernieuwt alle Let's Encrypt-certificaten die binnen 30 dagen verlopen. Let's Encrypt certificaten zijn 90 dagen geldig, dus hiermee wordt elke twee maanden een nieuw certificaat gegenereerd.
    • >> /var/log/le.log stuurt de output naar het bestand le.log

    Schakel na het toevoegen van de code terug naar command mode met 'Esc'. Sla daarna je wijzigingen op en sluit crontab met de toetsencombinatie :wq!


     

    Stap 7

    In stap 4 heb je o.a. een passive port range geconfigureerd. Deze staat niet automatisch open in je firewall en zet je handmatig open met:

    firewall-cmd --zone=public --permanent --add-port=50100-51100/tcp
    firewall-cmd --reload

     

    Stap 8

    Je hoeft nu enkel vsftpd te herstarten met het commando:

    systemctl restart vsftpd


    Daarmee zijn we aan het eind gekomen van deze vsftpd-handleiding en heb je een veilige FTP(S)-server opgezet! Je kunt nu je FTP-server gaan testen en bestanden naar je VPS uploaden.

    Mocht je aan de hand van dit artikel nog vragen hebben, aarzel dan niet om onze supportafdeling te benaderen. Je kunt hen bereiken via de knop 'Neem contact op' onderaan deze pagina.

    Kom je er niet uit?

    Ontvang persoonlijke hulp van onze supporters

    Neem contact op