Innledning
FTP-forkortelse for File Transfer Protocol) er en nettverksprotokoll som en gang var mye brukt for å flytte filer mellom en klient og en server. Det har siden blitt erstattet av raskere, sikrere og mer praktiske måter å levere filer. Mange uformelle Internett-brukere forventer å laste ned direkte fra deres nettleser med https
, og kommando-linjen-brukere er mer tilbøyelige til å bruke sikre protokoller, for eksempel scp
eller sFTP.,
FTP er fortsatt brukes til å støtte eldre programmer og arbeidsflyter med helt spesielle behov. Hvis du har et valg av hvilken protokoll som brukes, bør du vurdere å utforske den mer moderne alternativer. Når du trenger FTP, men vsftpd er et utmerket valg. Optimalisert for sikkerhet, ytelse og stabilitet, vsftpd har et sterkt vern mot mange sikkerhetsproblemer som er funnet i andre FTP-servere og er standard for mange Linux-distribusjoner.,
I denne opplæringen vil vi vise deg hvordan du konfigurerer vsftpd å tillate en bruker å laste opp filer til hans eller hennes hjem directory ved hjelp av FTP med påloggingsinformasjon som er sikret med SSL/TLS.
Forutsetninger
for Å følge sammen med denne opplæringen vil du trenger:
- Ubuntu 16.04 serveren med en ikke-root-bruker med
sudo
rettigheter: Du kan lære mer om hvordan å sette opp en bruker med disse privilegier i vårt Første Server Oppsett med Ubuntu 16.04 guide.
Når du har en Ubuntu server på plass, er du klar til å begynne.,
Trinn 1 — Installere vsftpd
Vi vil starte med å oppdatere pakkelisten og installere vsftpd daemon:
- sudo apt-get update
- sudo apt-get install vsftpd
Når installasjonen er fullført, sender vi kopi konfigurasjonsfilen så vi kan starte med et tomt konfigurasjon, lagre den originale som en backup.
- sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.orig
Med en sikkerhetskopi av konfigurasjonen på plass, vi er klare for å konfigurere brannmuren.
Trinn 2 — Åpne Brannmuren
Vi vil sjekke firewall status for å se om det er aktivert., Hvis så, vil vi sørge for at FTP-trafikk er tillatt så du vil ikke kjøre inn brannmurregler blokkere deg når det gjelder tid til å teste.
- sudo ufw status
I dette tilfellet, bare SSH er tillatt gjennom:
OutputStatus: activeTo Action From-- ------ ----OpenSSH ALLOW AnywhereOpenSSH (v6) ALLOW Anywhere (v6)
Du kan ha andre regler på plass, eller ikke-brannmur regler i det hele tatt. Siden bare ssh
trafikk er tillatt i dette tilfellet, trenger vi å legge til regler for FTP-trafikk.,
Vi trenger å åpne porter, 20 og 21 for FTP-port 990 for senere når vi aktiver TLS, og havner 40000-50000 for omfanget av passiv-porter som vi har tenkt å sette i konfigurasjonsfilen:
- sudo ufw allow 20/tcp
- sudo ufw allow 21/tcp
- sudo ufw allow 990/tcp
- sudo ufw allow 40000:50000/tcp
- sudo ufw status
Nå våre brannmurregler ser ut som:
Med vsftpd
installert, og at de nødvendige porter som er åpne, vi er klar for å gå videre til neste trinn.
Trinn 3 — Klargjøre Bruker Directory
For denne opplæringen, vi kommer til å opprette en bruker, men det kan hende du allerede har en bruker som har behov for FTP-tilgang., Vi vil ta vare å bevare en eksisterende bruker for å få tilgang til sine data i instruksjonene som følger. Selv så, vi anbefaler at du starter med en ny bruker, før du har konfigurert og testet oppsettet.
Først, vil vi legge til en test-bruker:
- sudo adduser sammy
Tildel et passord når du blir bedt om det, og føl deg fri til å trykke «ENTER» gjennom andre ber.
FTP er generelt mer sikker når brukerne er begrenset til en bestemt katalog.vsftpd
oppnår dette med chroot
arresten., Når chroot
er aktivert for lokale brukere, de er begrenset til deres hjem-mappe som standard. Imidlertid, på grunn av måten vsftpd
fester katalogen, det må ikke være skrivbar av brukeren. Dette er fint for en ny bruker som bør bare koble til via FTP, men en eksisterende bruker kan ha behov for å skrive til sine hjem-mappe hvis de også shell-tilgang.,
I dette eksempelet, snarere enn å fjerne skrive privilegier fra hjemmekatalogen, vi vil lage en ftp
– katalog for å tjene som chroot
og en skrivbar files
– katalog for å holde den faktiske filene.,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 ..
Neste, vi vil opprette katalogen der filene kan lastes opp og gi eierskap til bruker:
- sudo mkdir /home/sammy/ftp/files
- sudo chown sammy:sammy /home/sammy/ftp/files
En tillatelser kontroller på files
katalogen skal returnere følgende:
- sudo ls -la /home/sammy/ftp
til Slutt, vil vi legge til en test.txt
– filen som skal brukes når vi tester senere:
- echo "vsftpd test file" | sudo tee /home/sammy/ftp/files/test.txt
Nå som vi har sikret ftp
directory og får brukeren tilgang til den files
directory, vil vi vender vår oppmerksomhet til konfigurasjon.,
Trinn 4 — Konfigurere FTP-Tilgang
planlegger Vi å la en enkelt bruker med lokale shell-konto for å koble til FTP. De to viktigste innstillingene for dette er allerede satt i vsftpd.conf
. Start med å åpne alternativer på config-filen for å kontrollere at innstillingene i din konfigurasjon, samsvarer med de nedenfor:
- sudo nano /etc/vsftpd.conf
Neste vi får behov for å endre noen verdier i filen. For å tillate brukeren å laste opp filer, vil vi uncomment write_enable
innstilling slik at vi har:
. . .write_enable=YES. . .
Vi vil også uncomment chroot for å hindre FTP-koblet bruker fra å få tilgang til alle filer eller kommandoer utenfor katalogen treet.
. . .chroot_local_user=YES. . .
vil Vi legge til en user_sub_token
for å sette inn ditt brukernavn i vår local_root directory
banen slik at våre konfigurasjon vil fungere for denne brukeren og eventuelle fremtidige brukere som kan bli lagt til.
user_sub_token=$USERlocal_root=/home/$USER/ftp
Vi vil begrense omfanget av porter som kan brukes til passiv FTP til å sørge for at nok tilkoblinger er tilgjengelige:
pasv_min_port=40000pasv_max_port=50000
Merk: Vi pre-åpnet portene som vi satt her for passiv portområde. Hvis du endrer verdier, sørg for å oppdatere din brannmur.
Siden vi er bare planlegger å tillate FTP-tilgang, på et sak-til-sak grunnlag, vil vi sette opp konfigurasjonen slik at tilgangen er gitt til en bruker bare når de er eksplisitt lagt til en liste snarere enn standard:
userlist_enable=YESuserlist_file=/etc/vsftpd.userlistuserlist_deny=NO
userlist_deny
veksler logikk. Når det er satt til «JA», brukerne på listen har nektet FTP-tilgang. Når det er satt til «NEI», bare brukerne på listen har lov tilgang. Når du er ferdig med å endre, lagre og lukk filen.
til Slutt, vi vil opprette og legge til våre bruker-til-fil., Vi vil bruke -a
flagg for å legge til filen:
- echo "sammy" | sudo tee -a /etc/vsftpd.userlist
kontroller at det ble lagt til som forventet:
cat /etc/vsftpd.userlist
Outputsammy
Starte daemonen å laste konfigurasjon endringer:
- sudo systemctl restart vsftpd
Nå er vi klar for testing.
Trinn 5 — Testing FTP-Tilgang
Vi har konfigurert server, slik at bare brukeren sammy
koble til via FTP. La oss sørge for at det er tilfelle.
Anonyme brukere bør ikke klarer å koble seg til på: Vi er deaktivert anonym tilgang., Her vil vi teste ved å prøve å koble til anonymt. Hvis vi har gjort det riktig, anonyme brukere bør nektes tillatelse:
- ftp -p 203.0.113.0
Lukke tilkoblingen:
- bye
andre Brukere enn sammy
burde ikke klarer å koble seg til på: Neste, vil vi prøve å koble deg som vår sudo
bruker. De også bør bli nektet adgang, og det bør skje før de har lov til å oppgi passord.,og skrive filer: Her skal vi sørge for at vår angitte brukeren canconnect:
- ftp -p 203.0.113.0
Vi vil endre til files
katalog, bruk så get
kommando for å overføre test-filen vi har opprettet tidligere, til våre lokale maskin:
- cd files
- get test.txt
Vi vil slå tilbake rundt og prøver å laste opp filen med et nytt navn for å teste skrive tillatelser:
- put test.txt upload.txt
Lukke tilkoblingen:
- bye
Nå som vi har testet våre konfigurasjon, vil vi iverksette tiltak for å ytterligere sikre vår server.,
Trinn 6 — Sikre Transaksjoner
Siden FTP-ikke kryptere alle data i transitt, inkludert brukerlegitimasjon, vil vi aktivere TTL/SSL å sørge for at kryptering. Første trinn er å opprette SSL-sertifikater for bruk med vsftpd.
Vi vil bruke openssl
for å opprette et nytt sertifikat og bruk -days
flagg for å gjøre det gyldig for ett år. I den samme kommandoen, vil vi legge til en privat 2048-bit RSA-nøkkel., Så ved å sette både -keyout
og -out
flagg til samme verdi, den private nøkkelen og sertifikatet vil bli plassert i samme fil.
Vi vil gjøre dette med følgende kommando:
- sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem
vil Du bli bedt om å oppgi adressen informasjon for sertifikatet., Erstatte din egen informasjon for spørsmålene nedenfor:
For mer detaljert informasjon om sertifikatet flagg, se OpenSSL Essentials: å Arbeide med SSL-Sertifikater, Private Nøkler og Kundeservicerepresentanter
Når du har opprettet den sertifikater, åpne vsftpd
konfigurering-filen igjen:
- sudo nano /etc/vsftpd.conf
Mot bunnen av filen, du bør to linjer som begynner med rsa_
. Kommentar dem ut slik at de ser ut som:
# rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem# rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
Nedenfor dem, legge til følgende linjer som peker til et sertifikat og privat nøkkel vi nettopp opprettet:
rsa_cert_file=/etc/ssl/private/vsftpd.pemrsa_private_key_file=/etc/ssl/private/vsftpd.pem
Etter at vi vil styrke bruken av SSL, som vil hindre at kunder som ikke har avtale med TLS-tilkobling. Dette er nødvendig for å sikre at all trafikk er kryptert, men kan tvinge din FTP-bruker til å endre kunder. Endre ssl_enable
til YES
:
ssl_enable=YES
Etter det, legge til følgende linjer eksplisitt å forby anonyme tilkoblinger over SSL, og til å kreve SSL for både dataoverføring og innlogginger:
allow_anon_ssl=NOforce_local_data_ssl=YESforce_local_logins_ssl=YES
Etter dette vil vi konfigurere serveren til å bruke TLS, den foretrukne etterfølger til SSL-ved å legge til følgende linjer:
ssl_tlsv1=YESssl_sslv2=NOssl_sslv3=NO
til Slutt, vil vi legge til flere alternativer. For det første, vi vil ikke kreve SSL gjenbruk fordi det kan bryte mange FTP-klienter., Vi krever «høy» kryptering sifreringsrekker, som i dag betyr nøkkellengder som er lik eller større enn 128 bits:
require_ssl_reuse=NOssl_ciphers=HIGH
Når du er ferdig, kan du lagre og lukk filen.
Nå, vi trenger å starte serveren på nytt for at endringene skal tre i kraft:
- sudo systemctl restart vsftpd
På dette punktet, vil vi ikke lenger være i stand til å koble med en usikker kommando-linje-klienten. Hvis vi prøvde, vi vil se noe slikt som dette:
Neste, vil vi bekrefte at vi kan koble til ved hjelp av en klient som støtter TLS.,
Trinn 7 — Testing TLS med FileZilla
de Fleste moderne FTP-klienter kan være konfigurert til å bruke TLS-kryptering. Vi vil vise hvordan å koble til ved hjelp av FileZilla på grunn av sin støtte på tvers av plattformer. Se i dokumentasjonen for andre kunder.
Når du først åpne FileZilla, finne Nettstedet Manager-ikonet like nedenfor word-Fil, venstre-ikonet på den øverste raden. Klikk på det:
Et nytt vindu vil åpne seg., Klikk på «New Site» – knappen nederst i høyre hjørne:
Under «Mine Sider» en ny ikonet med ordene «New site» vil vises. Kan du nevne det nå eller komme tilbake senere og bruke Endre knappen.
Du må fylle ut «Host» feltet med navn eller IP-adresse. Under «Kryptering» drop down menyen, velg «Krever eksplisitt FTP over TLS».
For «Logg-Type», velg «Be om passord». Fyll inn FTP-brukeren du opprettet i «User» – feltet:
Klikk på «Koble til» på bunnen av grensesnittet., Du vil bli bedt om å angi brukerens passord:
Klikk på «OK» for å koble til. Du skal nå være tilkoblet server med TLS/SSL-kryptering.
Når du har godtatt sertifikatet, dobbeltklikk på files
mappe, og dra opp.txt-til venstre for å bekrefte at du er i stand til å laste ned filer.
Når du har gjort det, høyre-klikk på den lokale kopiere, endre navn på det å laste opp-tls.txt » og dra den tilbake til tjeneren til å bekrefte at du kan laste opp filer.,
Du har nå bekreftet at du har en trygg måte og lykkes i å overføre filer med SSL/TLS-aktivert.
Trinn 8 — Deaktivering av Shell-Tilgang (Valgfritt)
Hvis du er i stand til å bruke TLS-på grunn av kundenes krav, kan du få noen sikkerhet ved å deaktivere FTP brukeren mulighet til å logge seg på noen annen måte. En relativt enkel måte å unngå det på er ved å opprette en egendefinert shell. Dette vil ikke gi noen kryptering, men det vil begrense tilgangen til en kompromittert konto til filer som er tilgjengelige via FTP.,
Første, åpne en fil som heter ftponly
i bin-katalog:
- sudo nano /bin/ftponly
vil Vi legge til en melding som forteller brukeren hvorfor de ikke klarer å logge deg på.,/p>
#!/bin/shecho "This account is limited to FTP access only."
Endre tillatelsene til å lage kjørbare filen:
- sudo chmod a+x /bin/ftponly
du vil Åpne listen over gyldige skjell:
- sudo nano /etc/shells
På bunnen, legg til:
. . ./bin/ftponly
Oppdatere brukerens shell med følgende kommando:
- sudo usermod sammy -s /bin/ftponly
Nå kan du prøve å logge inn som sammy:
Du bør se omtrent slik ut:
OutputThis account is limited to FTP access only.Connection to 203.0.113.0 closed.
Dette bekrefter at brukeren kan ikke lenger ssh
til serveren og er begrenset til FTP-tilgang.,
Konklusjon
I denne opplæringen vi dekket sette opp FTP-for brukere med en lokal konto. Hvis du trenger å bruke en ekstern godkjenning kilde, kan du vurdere å se inn vsftpd støtte av virtuelle brukere. Dette gir et rikt sett av alternativer gjennom bruk av PAM, den Pluggbare Godkjenning Moduler, og er et godt valg hvis du administrere brukere i et annet system, for eksempel LDAP eller Kerberos.