introduktion

FTP, kort för filöverföringsprotokoll, är ett nätverksprotokoll som en gång användes allmänt för att flytta filer mellan en klient och server. Det har sedan dess ersatts av snabbare, säkrare och bekvämare sätt att leverera filer. Många tillfälliga Internetanvändare förväntar sig att ladda ner direkt från sin webbläsare med https, och kommandoradsanvändare är mer benägna att använda säkra protokoll som scp eller SFTP.,

FTP används fortfarande för att stödja äldre applikationer och arbetsflöden med mycket specifika behov. Om du har ett val av vilket protokoll som ska användas, överväga att utforska de modernare alternativen. När du behöver FTP, dock, vsftpd är ett utmärkt val. Optimerad för säkerhet, prestanda och stabilitet, vsftpd erbjuder starkt skydd mot många säkerhetsproblem som finns i andra FTP-servrar och är standard för många Linux-distributioner.,

i den här handledningen visar vi dig hur du konfigurerar vsftpd så att en användare kan ladda upp filer till sin hemkatalog med FTP med inloggningsuppgifter säkrade av SSL / TLS.

förutsättningar

för att följa med den här handledningen behöver du:

  • en Ubuntu 16.04-server med en icke-root-användare medsudo privilegier: du kan lära dig mer om hur du ställer in en användare med dessa privilegier i vår ursprungliga serverinställning med Ubuntu 16.04 guide.

När du har en Ubuntu-server på plats är du redo att börja.,Steg 1-Installera vsftpd

vi börjar med att uppdatera vår paketlista och installera vsftpd-demonen:

  • sudo apt-get update
  • sudo apt-get install vsftpd

När installationen är klar kopierar vi konfigurationsfilen så att vi kan börja med en tom konfiguration, vilket sparar originalet som en säkerhetskopia.

  • sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.orig

med en säkerhetskopia av konfigurationen på plats är vi redo att konfigurera brandväggen.

steg 2 — öppna brandväggen

Vi kontrollerar brandväggsstatus för att se om den är aktiverad., Om så är fallet ser vi till att FTP-trafik är tillåten så att du inte kommer att stöta på brandväggsregler som blockerar dig när det är dags att testa.

  • sudo ufw status

i detta fall är endast SSH tillåtet genom:

Output
Status: activeTo Action From-- ------ ----OpenSSH ALLOW AnywhereOpenSSH (v6) ALLOW Anywhere (v6)

Du kan ha andra regler på plats eller inga brandväggsregler alls. Eftersom endastssh trafik är tillåten i detta fall måste vi lägga till regler för FTP-trafik.,

Vi måste öppna portar 20 och 21 för FTP, port 990 för senare när vi aktiverar TLS och portar 40000-50000 för intervallet passiva portar som vi planerar att ställa in i konfigurationsfilen:

  • 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 ser våra brandväggsregler ut:

medvsftpd installerade och nödvändiga portar öppna, Vi är redo att gå vidare till nästa steg. – herr talman!

steg 3-förbereda användarkatalogen

för den här handledningen kommer vi att skapa en användare, men du kanske redan har en användare som behöver FTP-åtkomst., Vi ser till att bevara en befintlig användares tillgång till deras data i instruktionerna som följer. Ändå rekommenderar vi att du börjar med en ny användare tills du har konfigurerat och testat din inställning.

först lägger vi till en Testanvändare:

  • sudo adduser sammy

tilldela ett lösenord när du uppmanas och tryck gärna på ”ENTER” genom de andra anvisningarna.

FTP är i allmänhet säkrare när användarna är begränsade till en viss katalog.vsftpd åstadkommer detta medchroot fängelser., Närchroot är aktiverat för lokala användare är de som standard begränsade till sin hemkatalog. På grund av hurvsftpd säkrar katalogen får den dock inte vara skrivbar av användaren. Det här är bra för en ny användare som bara ska ansluta via FTP, men en befintlig användare kan behöva skriva till sin hemmapp om de också skalåtkomst.,

i det här exemplet, i stället för att ta bort skrivbehörigheter från hemkatalogen, skapar vi en ftp katalog för att fungera som chroot och en skrivbar files katalog för att hålla de faktiska filerna.,33″>

Output
total 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 ..

därefter skapar vi katalogen där filer kan laddas upp och tilldela äganderätten till användaren:

  • sudo mkdir /home/sammy/ftp/files
  • sudo chown sammy:sammy /home/sammy/ftp/files

en behörighetskontroll på katalogen files ska returnera följande:

  • sudo ls -la /home/sammy/ftp

slutligen ska vi lägg till en test.txt fil som ska användas när vi testar senare:

  • echo "vsftpd test file" | sudo tee /home/sammy/ftp/files/test.txt

nu när vi har säkrat katalogen ftp och tillåtit användaren tillgång till katalogen files vänder vi vår uppmärksamhet till konfigurationen.,

steg 4 — konfigurera FTP-åtkomst

Vi planerar att tillåta en enda användare med ett lokalt skalkonto att ansluta till FTP. De två nyckelinställningarna för detta är redan inställda i vsftpd.conf. Börja med att öppna konfigurationsfilen för att verifiera att inställningarna i konfigurationen matchar dem nedan:

  • sudo nano /etc/vsftpd.conf
/etc / vsftpd.conf

nästa måste vi ändra några värden i filen. För att tillåta användaren att ladda upp filer kommer vi att Avkommentera inställningenwrite_enable så att vi har:

/etc/vsftpd.,conf
. . .write_enable=YES. . .

Vi kommer också att Avkommentera chroot för att förhindra att den FTP-anslutna användaren kommer åt filer eller kommandon utanför katalogträdet.

/etc/vsftpd.conf
. . .chroot_local_user=YES. . .

vi lägger till en user_sub_token för att infoga användarnamnet i vår local_root directory sökväg så att vår konfiguration kommer att fungera för den här användaren och eventuella framtida användare som kan läggas till.

/etc/vsftpd.,conf
user_sub_token=$USERlocal_root=/home/$USER/ftp

Vi begränsar utbudet av portar som kan användas för passiv FTP för att se till att tillräckligt många anslutningar är tillgängliga:

/etc/vsftpd.conf
pasv_min_port=40000pasv_max_port=50000

Obs! vi öppnade de portar som vi ställde in här för det passiva portområdet. Om du ändrar värdena ska du uppdatera brandväggsinställningarna.

eftersom vi bara planerar att tillåta FTP-åtkomst från fall till fall konfigurerar vi konfigurationen så att åtkomst ges till en användare endast när de uttryckligen läggs till i en lista snarare än som standard:

/etc/vsftpd.,conf
userlist_enable=YESuserlist_file=/etc/vsftpd.userlistuserlist_deny=NO

userlist_deny växlar logiken. När den är inställd på ”Ja” nekas användare på listan FTP-åtkomst. När den är inställd på ”Nej” får endast användare i listan åtkomst. När du är klar med ändringen, spara och avsluta filen.

slutligen skapar och lägger vi till vår användare i filen., Vi använder flaggan -a för att lägga till filen:

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

dubbelkolla att den lades till som du förväntade dig:

cat /etc/vsftpd.userlist
Output
sammy

Starta om demonen för att ladda konfigurationsändringarna:

  • sudo systemctl restart vsftpd

nu är vi redo för testning.

Steg 5 — Testa FTP-åtkomst

Vi har konfigurerat servern så att endast användarensammy kan ansluta via FTP. Låt oss se till att så är fallet.

anonyma användare bör inte ansluta: vi inaktiverade anonym åtkomst., Här ska vi testa det genom att försöka ansluta anonymt. Om vi har gjort det på rätt sätt, bör anonyma användare nekas tillstånd:

  • ftp -p 203.0.113.0

Stäng anslutningen:

  • bye

andra användare än sammy skulle misslyckas med att ansluta: därefter försöker vi ansluta som vår sudo användare. De bör också nekas åtkomst, och det bör hända innan de får ange sitt lösenord.,och skriva filer: Här ser vi till att vår utsedda användare kanansluta:

  • ftp -p 203.0.113.0

vi byter till katalogen files, använd sedan kommandot get för att överföra testfilen vi skapade tidigare till vår lokala maskin:

  • cd files
  • get test.txt

vi vänder tillbaka till höger och försöker ladda upp filen med ett nytt namn för att testa skrivbehörigheter:

  • put test.txt upload.txt

stäng anslutningen:

  • bye

nu när vi har testat vår konfiguration tar vi steg för att ytterligare säkra vår server.,

steg 6 — säkra transaktioner

eftersom FTP inte krypterar någon data i transit, inklusive användaruppgifter, aktiverar vi TTL / SSL för att tillhandahålla den krypteringen. Det första steget är att skapa SSL-certifikat för användning med vsftpd.

vi använderopenssl för att skapa ett nytt certifikat och använda flaggan-days för att göra det giltigt i ett år. I samma kommando lägger vi till en privat 2048-bitars RSA-nyckel., Sedan genom att ställa in både-keyout och-out flaggor till samma värde, kommer den privata nyckeln och certifikatet att placeras i samma fil.

vi gör detta med följande kommando:

  • sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem

du uppmanas att tillhandahålla adressinformation för certifikatet., Ersätt din egen information för frågorna nedan:

För mer detaljerad information om certifikatflaggorna, se OpenSSL Essentials: arbeta med SSL-certifikat, privata nycklar och CSR

När du har skapat certifikaten öppnar du konfigurationsfilen vsftpd igen:

  • sudo nano /etc/vsftpd.conf

mot botten av filen bör du två rader som börjar med rsa_. Kommentera dem så att de ser ut:

/etc/vsftpd.,conf
# rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem# rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key

under dem lägger du till följande rader som pekar på certifikatet och den privata nyckeln som vi just skapade:

/etc/vsftpd.conf
rsa_cert_file=/etc/ssl/private/vsftpd.pemrsa_private_key_file=/etc/ssl/private/vsftpd.pem

efter det kommer vi att tvinga användningen av SSL, vilket kommer att hindra kunder som inte kan hantera TLS från att ansluta. Detta är nödvändigt för att säkerställa att all trafik är krypterad men kan tvinga din FTP-användare att ändra klienter. Ändra ssl_enable till YES:

/etc/vsftpd.,conf
ssl_enable=YES

därefter lägger du till följande rader för att uttryckligen neka anonyma anslutningar via SSL och kräva SSL för både dataöverföring och inloggningar:

/etc/vsftpd.conf
allow_anon_ssl=NOforce_local_data_ssl=YESforce_local_logins_ssl=YES

Efter detta konfigurerar vi servern för att använda TLS, den föredragna efterföljaren till SSL genom att lägga till följande rader:

/etc/vsftpd.conf
ssl_tlsv1=YESssl_sslv2=NOssl_sslv3=NO

slutligen lägger vi till ytterligare två alternativ. Först, vi kommer inte att kräva SSL återanvändning eftersom det kan bryta många FTP-klienter., Vi kommer att kräva ”hög” kryptering chiffer sviter, vilket för närvarande betyder nyckellängder lika med eller större än 128 bitar:

/etc / vsftpd.conf
require_ssl_reuse=NOssl_ciphers=HIGH

När du är klar, spara och stäng filen.

nu måste vi starta om servern för att ändringarna ska träda i kraft:

  • sudo systemctl restart vsftpd

vid denna tidpunkt kommer vi inte längre att kunna ansluta till en osäker kommandoradsklient. Om vi försökte skulle vi se något i stil med:

därefter verifierar vi att vi kan ansluta med en klient som stöder TLS.,

Steg 7 — Testa TLS med FileZilla

de flesta moderna FTP-klienter kan konfigureras för att använda TLS-kryptering. Vi kommer att visa hur du ansluter med FileZilla på grund av dess plattformsoberoende stöd. Konsultera dokumentationen för andra kunder.

När du först öppnar FileZilla, hitta ikonen Site Manager strax under word-filen, den vänstra ikonen på översta raden. Klicka på den:

ett nytt fönster öppnas., Klicka på knappen” Ny webbplats ” i det nedre högra hörnet:


Under ”mina webbplatser” visas en ny ikon med orden ”ny webbplats”. Du kan namnge det nu eller återvända senare och använda knappen Byt namn.

Du måste fylla i fältet ”värd” med namn eller IP-adress. Under rullgardinsmenyn ” kryptering ”väljer du”Kräv explicit FTP över TLS”.

för ”Inloggningstyp” väljer du ”fråga efter lösenord”. Fyll i FTP-användaren du skapade i fältet ”Användare”:


Klicka på” Anslut ” längst ner i gränssnittet., Du kommer att bli tillfrågad om användarens lösenord:


Klicka på ”OK” för att ansluta. Du bör nu vara ansluten till din server med TLS/SSL-kryptering.


När du har godkänt certifikatet dubbelklickar du på mappenfiles och drar uppladdning.txt till vänster för att bekräfta att du kan ladda ner filer.

När du har gjort det, högerklicka på den lokala kopian, Byt namn på den för att ladda upp-tls.txt ’ och dra den tillbaka till servern för att bekräfta att du kan ladda upp filer.,


Du har nu bekräftat att du säkert och framgångsrikt kan överföra filer med SSL / TLS aktiverat.

steg 8-Inaktivera Skalåtkomst (valfritt)

om du inte kan använda TLS på grund av klientkrav kan du få viss säkerhet genom att inaktivera FTP-användarens möjlighet att logga på något annat sätt. Ett relativt enkelt sätt att förhindra det är genom att skapa ett anpassat skal. Detta kommer inte att ge någon kryptering, men det kommer att begränsa åtkomsten av ett komprometterat konto till filer som är tillgängliga via FTP.,

Öppna först en fil som heter ftponly I bin-katalogen:

  • sudo nano /bin/ftponly

vi lägger till ett meddelande som berättar för användaren varför de inte kan logga in.,/p>

#!/bin/shecho "This account is limited to FTP access only."

ändra behörigheterna för att göra filen körbar:

  • sudo chmod a+x /bin/ftponly

Öppna listan över giltiga skal:

  • sudo nano /etc/shells

längst ner, lägg till:

/etc/shells
. . ./bin/ftponly

uppdatera användarens skal med följande kommando:

  • sudo usermod sammy -s /bin/ftponly

försök nu logga in som Sammy:

Du bör se något liknande:

Output
This account is limited to FTP access only.Connection to 203.0.113.0 closed.

detta bekräftar att användaren inte längre kan ssh till servern och att användaren inte längre kan är begränsad till endast FTP-åtkomst.,

slutsats

i den här handledningen omfattade vi att konfigurera FTP för användare med ett lokalt konto. Om du behöver använda en extern autentiseringskälla kanske du vill undersöka vsftpd: s stöd för virtuella användare. Detta erbjuder en rik uppsättning alternativ genom användning av PAM, Pluggable Autentiseringsmoduler, och är ett bra val om du hanterar användare i ett annat system som LDAP eller Kerberos.

Articles

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *