Hur man ställer in vsftpd för en användare's katalog på Ubuntu 18.04

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 konfigurerar du 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 18.04-server och en icke-root-användare med sudo-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 18.04 guide.,

Steg 1 — Installera vsftpd

låt oss börja med att uppdatera vår paketlista och installera vsftpd daemon:

  • sudo apt update
  • sudo apt install vsftpd

När installationen är klar, låt oss kopiera konfigurationsfilen så att vi kan börja med en tom konfiguration, spara 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

låt oss kontrollera brandväggsstatus för att se om den är aktiverad., Om det är, ser vi till att FTP-trafik är tillåten så brandväggsregler inte blockerar våra tester.

kontrollera brandväggsstatus:

  • 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 endast SSH-trafik är tillåten i det här fallet måste vi lägga till regler för FTP-trafik.,

låt oss öppna portar 20 och 21 för FTP, port 990 för när vi aktiverar TLS och portar 40000-50000 för intervallet av passiva portar planerar vi 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

våra brandväggsregler ska nu se ut så här:

medvsftpd installerat och de nödvändiga portarna öppna, låt oss gå vidare till att skapa en dedikerad FTP-användare.,

steg 3 — förbereda användarkatalogen

Vi kommer att skapa en dedikerad FTP-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.

lägg först till en Testanvändare:

  • sudo adduser sammy

tilldela ett lösenord när du uppmanas. Känn dig fri att trycka 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är chroot är aktiverat för lokala användare är de som standard begränsade till sin hemkatalog. På grund av hur vsftpd 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å har skalåtkomst.,

i det här exemplet, i stället för att ta bort skrivbehörigheter från hemkatalogen, låt oss skapa enftp katalog för att fungera som chroot och en skrivbar files katalog för att hålla de faktiska filerna.,uppdrag:

  • sudo ls -la /home/sammy/ftp
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 ..

låt oss sedan skapa katalogen för filuppladdningar och tilldela ägande till användaren:

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

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

  • sudo ls -la /home/sammy/ftp

slutligen, låt oss lägga till en test.txt fil att använda när vi testar:

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

nu när vi har säkrat katalogen ftp och tillät användaren tillgång till katalogen files, låt oss ändra vår konfiguration.,

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

låt oss sedan aktivera användaren att ladda upp filer genom att inte ansluta inställningenwrite_enable:

/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. . .

låt oss också lägga till en user_sub_token för att infoga användarnamnet i vår local_root directory sökväg så vår konfiguration kommer att fungera för den här användaren och eventuella ytterligare framtida användare. Lägg till dessa inställningar någonstans i filen:

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

låt oss också begränsa 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! i steg 2 öppnade vi portarna som vi ställer in här för det passiva portområdet. Om du ändrar värdena ska du uppdatera brandväggsinställningarna.

för att tillåta FTP-åtkomst från fall till fall, låt oss ställa in konfigurationen så att användarna har åtkomst 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å YES nekas användare på listan FTP-åtkomst. När den är inställd på NO är endast användare i listan Tillåtna åtkomst.

När du är klar med ändringarna, spara filen och avsluta redigeraren.

slutligen, låt oss lägga till vår användare till/etc/vsftpd.userlist., Använd flaggan -a för att lägga till filen:

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

kontrollera att den har lagts 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

med konfigurationen på plats, låt oss gå vidare till att testa FTP-åtkomst.

Steg 5-Testa FTP-åtkomst

Vi har konfigurerat servern så att endast användarensammy kan ansluta via FTP. Låt oss se till att detta fungerar som förväntat.,

anonyma användare bör inte ansluta: vi har inaktiverat anonym åtkomst. Låt oss testa det genom att försöka ansluta anonymt. Om vår konfiguration är korrekt inställd bör anonyma användare nekas tillstånd. Öppna ett annat terminalfönster och kör följande kommando. Var noga med att ersätta 203.0.113.0 med serverns offentliga IP-adress:

  • ftp -p 203.0.113.0

Stäng anslutningen:

  • bye

andra användare än sammy bör misslyckas med att ansluta: låt oss försöka ansluta som vår sudo-användare.,> ska kunna ansluta, läsa och skriva filer: Låt oss se till att vår utsedda användare kan ansluta:

  • ftp -p 203.0.113.0

låt oss byta till katalogen files och använda kommandot get för att överföra testfilen vi skapade tidigare till vår lokala maskin:

  • cd files
  • get test.txt

låt oss sedan 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, låt oss vidta åtgärder 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 TLS / SSL för att tillhandahålla den krypteringen. Det första steget är att skapa SSL-certifikat för användning med vsftpd.

låt oss användaopenssl för att skapa ett nytt certifikat och använda flaggan-days för att göra den giltig i ett år. I samma kommando lägger vi till en privat 2048-bitars RSA-nyckel., Genom att ange flaggorna-keyout och-out till samma värde kommer den privata nyckeln och certifikatet att finnas i samma fil:

  • 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 ange adressinformation för certifikatet., Ersätt din egen information för de markerade värdena 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 kommer du att se två rader som börjar med rsa_. Kommentera dem så att de ser ut så här:

/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 det 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. . .

konfigurera sedan 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. . .

den färdiga filsektionen ska se ut så här:

/etc/vsftpd.conf

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

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:

nästa, låt oss verifiera 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 man 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 ovanför word Host, den vänstra ikonen på den övre 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.

fyll i Värdfältet 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 din FTP-användare i användarfältet:

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.,ficate som ser ut så här:

När du har godkänt certifikatet dubbelklickar du på mappen files och drar upload.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 till upload-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 heterftponly i katalogenbin:

  • sudo nano /bin/ftponly

Lägg till ett meddelande som berättar för användaren varför de inte kan logga in:

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

spara filen och avsluta din redaktör.,Ä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 att logga in på din server som sammy:

Du bör se något som:

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 ä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ökavsftpds 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.

Lämna ett svar

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