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 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 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:
OutputStatus: 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″>
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 ..
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
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:
. . .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.
. . .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.
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:
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:
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
Outputsammy
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:
# 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:
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
:
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:
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:
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:
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:
. . ./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:
OutputThis 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.