Introduction
FTP, kort voor File Transfer Protocol, is een netwerkprotocol dat ooit veel werd gebruikt voor het verplaatsen van bestanden tussen een client en server. Het is sindsdien vervangen door snellere, veiligere en handigere manieren om bestanden te leveren. Veel casual internetgebruikers verwachten direct vanuit hun webbrowser te downloaden met https
, en opdrachtregelgebruikers gebruiken eerder veilige protocollen zoals de scp
of sFTP.,
FTP wordt nog steeds gebruikt om oudere toepassingen en workflows met zeer specifieke behoeften te ondersteunen. Als u een keuze hebt uit welk protocol u wilt gebruiken, overweeg dan om de modernere opties te verkennen. Als je FTP nodig hebt, is vsftpd echter een uitstekende keuze. Geoptimaliseerd voor beveiliging, prestaties en stabiliteit, biedt vsftpd sterke bescherming tegen veel beveiligingsproblemen die in andere FTP-servers worden aangetroffen en is de standaard voor veel Linux-distributies.,
in deze tutorial laten we u zien hoe u vsftpd kunt configureren om een gebruiker toe te staan bestanden te uploaden naar zijn of haar thuismap met behulp van FTP met inloggegevens beveiligd door SSL/TLS.
Prerequisites
om deze tutorial te volgen hebt u het volgende nodig:
- een Ubuntu 16.04-server met een niet-root-gebruiker met
sudo
privileges: u kunt meer informatie vinden over het instellen van een gebruiker met deze privileges in onze handleiding voor het instellen van de server met Ubuntu 16.04.
zodra u een Ubuntu-server hebt geïnstalleerd, bent u klaar om te beginnen.,
Stap 1-vsftpd installeren
we beginnen met het bijwerken van onze pakketlijst en het installeren van de vsftpd-daemon:
- sudo apt-get update
- sudo apt-get install vsftpd
als de installatie voltooid is, kopiëren we het configuratiebestand zodat we met een lege configuratie kunnen beginnen en het origineel opslaan als een back-up.
- sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.orig
met een back-up van de configuratie op zijn plaats, zijn we klaar om de firewall te configureren.
Stap 2-Firewall openen
We zullen de firewall status controleren om te zien of deze is ingeschakeld., Als dat zo is, zorgen we ervoor dat FTP-verkeer is toegestaan, zodat u niet tegen firewallregels komt die u blokkeren wanneer het tijd is om te testen.
- sudo ufw status
In dit geval is alleen SSH toegestaan via:
OutputStatus: activeTo Action From-- ------ ----OpenSSH ALLOW AnywhereOpenSSH (v6) ALLOW Anywhere (v6)
u kunt andere regels hebben of helemaal geen firewall regels. Omdat alleen ssh
verkeer is toegestaan in dit geval, moeten we regels toevoegen voor FTP-verkeer.,
We moeten poorten 20 en 21 openen voor FTP, poort 990 voor later als we TLS inschakelen, en poorten 40000-50000 voor het bereik van passieve poorten die we van plan zijn in te stellen in het configuratiebestand:
- sudo ufw allow 20/tcp
- sudo ufw allow 21/tcp
- sudo ufw allow 990/tcp
- sudo ufw allow 40000:50000/tcp
- sudo ufw status
nu zien onze firewallregels eruit als:
met vsftpd
geïnstalleerd en de benodigde poorten geopend, zijn we klaar om door te gaan naar de volgende stap.
Stap 3-de gebruikersmap
voorbereiden voor deze tutorial gaan we een gebruiker aanmaken, maar u hebt mogelijk al een gebruiker die FTP-toegang nodig heeft., We zorgen ervoor dat de toegang van een bestaande gebruiker tot zijn gegevens behouden blijft in de instructies die volgen. Toch raden we je aan om met een nieuwe gebruiker te beginnen totdat je je setup hebt geconfigureerd en getest.
eerst zullen we een test gebruiker toevoegen:
- sudo adduser sammy
Wijs een wachtwoord toe wanneer daarom wordt gevraagd en voel je vrij om op “ENTER” te drukken via de andere prompts.
FTP is over het algemeen veiliger wanneer gebruikers beperkt zijn tot een specifieke map.vsftpd
bereikt dit met chroot
jails., Als chroot
is ingeschakeld voor lokale gebruikers, worden ze standaard beperkt tot hun persoonlijke map. Vanwege de manier waarop vsftpd
de map beveiligt, mag deze niet beschrijfbaar zijn voor de gebruiker. Dit is prima voor een nieuwe gebruiker die alleen verbinding moet maken via FTP, maar een bestaande gebruiker kan nodig zijn om te schrijven naar hun home map als ze ook shell toegang.,
in dit voorbeeld, in plaats van het verwijderen van schrijfrechten uit de home directory, zullen we een ftp
map maken om te dienen als de chroot
en een beschrijfbare files
map om de werkelijke bestanden te bevatten.,33″>
Outputtotal 84 dr-xr-xr-x 2 nobody nogroup 4096 Aug 24 21:29 .4 drwxr-xr-x 3 sammy sammy 4096 Aug 24 21:29 ..
Vervolgens maken we de directory waar de bestanden kunnen worden geüpload en eigendom toewijzen aan de gebruiker:
- sudo mkdir /home/sammy/ftp/files
- sudo chown sammy:sammy /home/sammy/ftp/files
Een van machtigingen controleren op de files
directory moeten terug het volgende:
- sudo ls -la /home/sammy/ftp
tot slot, voegen we een test.txt
bestand om te gebruiken bij het testen we later op:
- echo "vsftpd test file" | sudo tee /home/sammy/ftp/files/test.txt
Nu hebben we verzekerd van de ftp
directory en mag de gebruiker de toegang tot de files
directory, zullen we onze aandacht richten op configuratie.,
Stap 4-FTP-toegang configureren
We zijn van plan om een enkele gebruiker met een lokaal shell-account toe te staan verbinding te maken met FTP. De twee sleutelinstellingen hiervoor zijn al ingesteld in vsftpd.conf
. Begin met het openen van het configuratiebestand om te controleren of de instellingen in uw configuratie overeenkomen met die hieronder:
- sudo nano /etc/vsftpd.conf
vervolgens moeten we een aantal waarden in het bestand wijzigen. Om de gebruiker toe te staan bestanden te uploaden, zullen we de write_enable
instelling verwijderen zodat we:
. . .write_enable=YES. . .
We zullen ook het commentaar van de chroot verwijderen om te voorkomen dat de FTP-verbonden gebruiker toegang krijgt tot bestanden of commando ‘ s buiten de mappenboom.
. . .chroot_local_user=YES. . .
We zullen een user_sub_token
toevoegen om de gebruikersnaam in ons local_root directory
pad in te voegen, zodat onze configuratie zal werken voor deze gebruiker en eventuele toekomstige gebruikers die kunnen worden toegevoegd.
user_sub_token=$USERlocal_root=/home/$USER/ftp
we beperken het bereik van poorten die gebruikt kunnen worden voor passieve FTP om er zeker van te zijn dat er voldoende verbindingen beschikbaar zijn:
pasv_min_port=40000pasv_max_port=50000
opmerking: We hebben de poorten die we hier instellen voor het passieve poortbereik vooraf geopend. Als u de waarden wijzigt, moet u uw firewall-instellingen bijwerken.
omdat we alleen van plan zijn om FTP-toegang toe te staan op een case-by-case basis, zullen we de configuratie zo instellen dat toegang alleen aan een gebruiker wordt gegeven wanneer deze expliciet aan een lijst worden toegevoegd in plaats van standaard:
userlist_enable=YESuserlist_file=/etc/vsftpd.userlistuserlist_deny=NO
userlist_deny
schakelt de logica om. Wanneer het is ingesteld op “Ja”, gebruikers in de lijst worden geweigerd FTP-toegang. Wanneer het is ingesteld op “Nee”, hebben alleen gebruikers in de lijst toegang. Als je klaar bent met het maken van de wijziging, sla het bestand op en sluit het af.
ten slotte zullen we onze Gebruiker aanmaken en toevoegen aan het bestand., We zullen de -a
vlag gebruiken om aan bestand toe te voegen:
- echo "sammy" | sudo tee -a /etc/vsftpd.userlist
controleer of het is toegevoegd zoals u had verwacht:
cat /etc/vsftpd.userlist
Outputsammy
Herstart de daemon om de configuratiewijzigingen te laden:
- sudo systemctl restart vsftpd
nu zijn we klaar om te testen.
Stap 5-FTP-toegang testen
we hebben de server zo geconfigureerd dat alleen de gebruiker sammy
verbinding kan maken via FTP. Laten we ervoor zorgen dat dat het geval is.
anonieme gebruikers zouden geen verbinding kunnen maken: we hebben anonieme toegang uitgeschakeld., Hier testen we dat door anoniem te proberen verbinding te maken. Als het goed is, is anonieme gebruikers moeten toestemming geweigerd:
- ftp -p 203.0.113.0
de verbinding:
- bye
andere Gebruikers dan sammy
moet niet te verbinden: we gaan proberen het aansluiten van onze sudo
gebruiker. Ook zij zouden de toegang moeten worden ontzegd, en het zou moeten gebeuren voordat ze hun wachtwoord mogen invoeren.,en schrijven van bestanden: Hier, wij zorgen ervoor dat onze aangewezen gebruiker canconnect:
- ftp -p 203.0.113.0
We zullen wijzigen in de files
directory, gebruik dan de get
commando om de test-bestand dat u eerder hebt gemaakt naar onze lokale machine:
- cd files
- get test.txt
We rechtsaf weer rond en probeer om het bestand te uploaden met een nieuwe naam te testen schrijf rechten:
- put test.txt upload.txt
de verbinding:
- bye
Nu we hebben getest onze configuratie, nemen we stappen om onze server.,
Stap 6-transacties beveiligen
aangezien FTP geen gegevens versleutelt tijdens het transport, inclusief gebruikersreferenties, zullen we TTL / SSL inschakelen om die versleuteling te leveren. De eerste stap is het maken van de SSL certificaten voor gebruik met vsftpd.
we gebruiken openssl
om een nieuw certificaat aan te maken en gebruiken de -days
vlag om het een jaar geldig te maken. In hetzelfde commando voegen we een private 2048-bit RSA sleutel toe., Door vervolgens de vlaggen -keyout
en -out
op dezelfde waarde in te stellen, zullen de private sleutel en het certificaat zich in hetzelfde bestand bevinden.
We doen dit met het volgende commando:
- sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem
u wordt gevraagd om adresgegevens voor uw certificaat op te geven., Vervang uw eigen informatie voor de onderstaande vragen:
voor meer gedetailleerde informatie over de certificaatvlaggen, zie OpenSSL Essentials: werken met SSL-certificaten, privésleutels en CSR ‘ s
zodra u de certificaten hebt aangemaakt, opent u het vsftpd
configuratiebestand opnieuw:
- sudo nano /etc/vsftpd.conf
naar de onderkant van het bestand, moet u twee regels openen die beginnen met rsa_
. Commentaar ze zodat ze eruit zien als:
# rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem# rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
voeg hieronder de volgende regels toe die verwijzen naar het certificaat en de private sleutel die we zojuist hebben gemaakt:
rsa_cert_file=/etc/ssl/private/vsftpd.pemrsa_private_key_file=/etc/ssl/private/vsftpd.pem
daarna zullen we het gebruik van SSL forceren, wat zal voorkomen dat clients die niet met TLS kunnen omgaan verbinding maken. Dit is noodzakelijk om ervoor te zorgen dat al het verkeer is versleuteld, maar kan uw FTP-gebruiker dwingen om clients te veranderen. Verander ssl_enable
naar YES
:
ssl_enable=YES
voeg daarna de volgende regels toe om anonieme verbindingen via SSL expliciet te weigeren en om SSL te vereisen voor zowel gegevensoverdracht als logins:
allow_anon_ssl=NOforce_local_data_ssl=YESforce_local_logins_ssl=YES
hierna zullen we de server configureren om TLS te gebruiken, de favoriete opvolger van SSL door de volgende regels toe te voegen:
ssl_tlsv1=YESssl_sslv2=NOssl_sslv3=NO
tenslotte zullen we nog twee opties toevoegen. Ten eerste zullen we SSL-hergebruik niet nodig hebben omdat het veel FTP-clients kan breken., We hebben “high” Encryption cipher suites nodig, wat op dit moment sleutellengtes betekent gelijk aan of groter dan 128 bits:
require_ssl_reuse=NOssl_ciphers=HIGH
sla het bestand op en sluit het.
nu moeten we de server herstarten om de wijzigingen door te voeren:
- sudo systemctl restart vsftpd
Op dit moment kunnen we geen verbinding meer maken met een onveilige opdrachtregelclient. Als we het zouden proberen, zouden we iets zien als:
vervolgens zullen we controleren of we verbinding kunnen maken met een client die TLS ondersteunt.,
Stap 7-TLS testen met FileZilla
De meeste moderne FTP-clients kunnen worden geconfigureerd om TLS-versleuteling te gebruiken. We zullen laten zien hoe u verbinding kunt maken met behulp van FileZilla vanwege de cross-platform ondersteuning. Raadpleeg de documentatie voor andere klanten.
wanneer u FileZilla voor het eerst opent, vindt u het pictogram Sitebeheer net onder het word-bestand, het meest linkse pictogram op de bovenste rij. Klik erop:
Er wordt een nieuw venster geopend., Klik op de knop” nieuwe Site”in de rechterbenedenhoek:
onder” Mijn Sites “verschijnt een nieuw pictogram met de woorden” nieuwe site”. U kunt het nu een naam geven of later terugkeren en de knop hernoemen gebruiken.
u moet het veld “Host” invullen met de naam of het IP-adres. Onder de” encryptie “drop down menu, selecteer ” vereisen expliciete FTP over TLS”.
voor” Logon Type”, selecteer”Ask for password”. Vul de FTP-gebruiker in die u hebt aangemaakt in het veld” User”:
Klik op” Connect ” onderaan de interface., U wordt gevraagd om het wachtwoord van de gebruiker:
Klik op “OK” om verbinding te maken. U moet nu verbonden zijn met uw server met TLS/SSL encryptie.
Als u het certificaat hebt geaccepteerd, dubbelklikt u op de files
map en sleep Upload.txt naar links om te bevestigen dat u bestanden kunt downloaden.
Als u dat gedaan hebt, klik dan met de rechtermuisknop op de lokale kopie, hernoem deze naar upload-tls.TXT ‘ en sleep het terug naar de server om te bevestigen dat u bestanden kunt uploaden.,
u hebt nu bevestigd dat u veilig en succesvol bestanden kunt overbrengen met SSL / TLS ingeschakeld.
Stap 8-Shelltoegang uitschakelen (optioneel)
Als u TLS niet kunt gebruiken vanwege clientvereisten, kunt u enige beveiliging verkrijgen door de mogelijkheid van de FTP-gebruiker om op een andere manier in te loggen uit te schakelen. Een relatief eenvoudige manier om dit te voorkomen is door een aangepaste shell te maken. Dit zal geen encryptie bieden, maar het zal de toegang van een gecompromitteerde account beperken tot bestanden die toegankelijk zijn via FTP.,
open eerst een bestand genaamd ftponly
in de bin directory:
- sudo nano /bin/ftponly
we voegen een bericht toe waarin de gebruiker wordt verteld waarom ze niet kunnen inloggen.,/p>
#!/bin/shecho "This account is limited to FTP access only."
het Wijzigen van de machtigingen voor het bestand uitvoerbaar bestand:
- sudo chmod a+x /bin/ftponly
Open de lijst met geldige schelpen:
- sudo nano /etc/shells
Op de bodem, voeg je toe:
. . ./bin/ftponly
Update de shell van de gebruiker met het volgende commando:
- sudo usermod sammy -s /bin/ftponly
Nu probeer in te loggen als sammy:
Je moet iets als dit zien:
OutputThis account is limited to FTP access only.Connection to 203.0.113.0 closed.
Dit bevestigt dat de gebruiker niet langer ssh
met de server en is beperkt tot de FTP-toegang alleen.,
conclusie
In deze tutorial hebben we het opzetten van FTP behandeld voor gebruikers met een lokaal account. Als je een externe authenticatiebron moet gebruiken, wil je misschien kijken naar de ondersteuning van vsftpd voor virtuele gebruikers. Dit biedt een rijke set van opties door het gebruik van PAM, de Pluggable Authenticatiemodules, en is een goede keuze als je gebruikers beheert in een ander systeem zoals LDAP of Kerberos.