Triviala överföringar med TFTP, del 3: Användning
I tidigare artiklar har vi introducerat TFTP och diskuterat varför du kanske vill använda det, och vi har tittat på olika konfigurationsalternativ. Nu ska vi försöka flytta runt några filer. Du kan göra detta med viss trygghet nu när du vet hur du säkrar din server lite bättre.
Test 1, 2, 3
För att testa din server behöver du naturligtvis en klient att ansluta med. Tack och lov kan vi installera en sådan väldigt enkelt:
# apt-get install tftp
Red Hat-derivat bör hantera en klientinstallation på följande sätt:
# yum install tftp
Om du letar upp serverns IP-adress med hjälp av ett kommando som det nedan är det möjligt att ansluta till din TFTP-server varifrån som helst (förutsatt att konfigurationen för TCP Wrappers eller IPtables-reglerna låter dig göra det, förstås).
# ip a
När du väl känner till IP-adressen är det mycket enkelt att komma igång. Du kan ansluta så här till servern från klienten:
# tftp 10.10.10.10
Nu bör du vara ansluten. (Om det inte fungerade, kontrollera din brandvägg eller så kan du ”telneta” till port 69 på din TFTP-servers IP-adress). Därefter kan du köra ett ”status”-kommando enligt följande:
tftp> statusConnected to 192.168.0.9.Mode: netascii Verbose: off Tracing: offRexmt-interval: 5 seconds, Max-timeout: 25 seconds
I det här läget föredrar jag att använda verbose output genom att helt enkelt skriva det här kommandot:
tftp> verbose
Du kan välja att ladda ner binärfiler eller vanliga textfiler genom att skriva det här för vanlig text:
tftp> ascii
Och du kan tvinga binärfiler att hämtas korrekt med:
tftp> binary
För att ge oss lite innehåll att hämta skapade jag en enkel textfil så här:
# echo hello > HERE_I_AM
Detta innebär att filen HERE_I_AM innehåller ordet ”hello”. Jag flyttade sedan filen till vår standard TFTP-katalog, som vi såg användas tidigare i huvudkonfigurationsfilen /etc/inetd.conf. Den katalogen – från vilken vår trogna daemon serverar – heter /srv/tftp, som vi kan se i Listing 3.
Då detta bara är en vanlig textfil finns det inget behov av att aktivera binärt läge, och vi har redan skrivit verbose, så nu handlar det bara om att överföra vår fil.
Om du överhuvudtaget är bekant med FTP på kommandoraden, så kommer du inte att ha några svårigheter med att ta till dig språkbruket. Det är helt enkelt ”get” för att ta emot och ”put” för att placera. Min exempelfil HERE_I_AM kan hämtas på följande sätt:
tftp> get HERE_I_AMgetting from 192.168.0.9:HERE_I_AM to HERE_I_AM Received 7 bytes in 0.1 seconds
Ovanstående exempel erbjuder verbose-utdata när det läget är aktiverat. Du kan få fram användbar information, till exempel att vi inte använder binärt läge utan bara ”netascii”-läge. Dessutom kan du se hur många bytes som överfördes och hur snabbt. I det här fallet var uppgifterna sju byte stora och tog en tiondels sekund, med en halv kilobyte (eller så) per sekund, att slutföra.
Genom att jämföra och kontrastera detta med utmatningen i icke-förtydligat läge håller du säkert med om att det är värt att använda:
tftp> get HERE_I_AMReceived 7 bytes in 0.0 seconds
Om du känner ett behov av att fördunkla portnumret för din TFTP-server måste du, efter att ha redigerat filen /etc/services, ansluta dig med din klientprogramvara, på följande sätt:
# tftp 10.10.10.10 11111
Också, var inte alltför rädd för att begära flera filer på en rad. Gör just det genom att använda den här syntaxen:
# get one.txt two.txt three.txt four.txt five.txt
Om du stöter på problem finns det ett par felsökningsalternativ att utforska. Du kan till exempel ha en mättad nätverkslänk på grund av en sändningsstorm eller en missanpassad enhet som orsakar konstiga nätverksdifferenser. Du kommer dock att bli glad när du får veta att du kan justera timeouts. För det första kan vi från TFTP-klientens prompt ställa in timeouts per paket på följande sätt:
tftp> rexmt 10
Detta visar att vi ställer in retransmissions timeouts per paket till 10 sekunder.
För att ställa in total transfer timeout, för hela transaktionen, justerar du följande inställning på följande sätt:
tftp> timeout 30
Ett annat användbart verktyg för felsökning är ”trace”-funktionen. Den kan aktiveras på följande sätt:
tftp> tracePacket tracing on.
Nu kommer varje överföring att se väldigt brusig ut, som nedan, vilket bör hjälpa dig med din felsökning:
tftp> get HERE_I_AMsent RRQ <file=HERE_I_AM, mode=netascii>received DATA <block=1, 512 bytes> sent ACK <block=1> received DATA <block=2, 512 bytes>sent ACK <block=2> received DATA <block=3, 512 bytes>
Utifrån ovanstående information bör du kunna avgöra vid vilken tidpunkt en överföring misslyckas och kanske urskilja ett beteendemönster.
Om du vill avsluta från TFTP-klientens prompt bör det räcka med att trycka på ”q”-tangenten.
I det här avsnittet har vi sett hur man konfigurerar och tar emot filer från en TFTP-server. Som nämnts är det en bra idé att brandväggar port 69 från omvärlden om du experimenterar med den här programvaran och särskilt om du distribuerar den i produktion.
Jag rekommenderar att du antingen låser din server så att den bara kan nås av ett fåtal maskiner genom att använda IPtables eller TCP Wrappers. Även om det är en äldre teknik är TFTP utan tvekan fortfarande ett användbart verktyg att ha i verktygslådan, och det bör inte avfärdas som att det bara är användbart för att överföra konfiguration till arbetsstationer eller servrar när de startar upp.
Systemd
För att starta och stoppa TFTP-servern (eller starta om den efter att ha gjort en konfigurationsändring) på moderna systemd-system kan du av en slump köra det här kommandot, och ersätta ”stop” med ”restart” eller ”start” där det behövs.
# systemctl stop openbsd-inetd
På äldre system finns det ingen anledning att påminna dig om att det i de flesta fall räcker med ett av dessa kommandon.
# /etc/init.d/openbsd-inetd start# service openbsd-inetd restart
Ändra helt enkelt openbsd-inetd till namnet på lämpliga inetd- eller xinetd-skript för din distribution. Kom ihåg att du kan ta reda på tjänsternas namn genom att köra ett kommando som detta:
# ls /etc/init.d
Detta fungerar till och med på moderna systemd-versioner, men du måste titta noga på den resulterande fillistan eftersom, låt oss vara ärliga, ledningar till ”inetd” kan betraktas som en återvändsgränd i vissa kretsar och har konstiga filnamn.
EOF
Om du bestämmer dig för att ta ditt liv i egna händer och servera TFTP över Internet, låt mig ge dig en varning, ja, en akronym faktiskt: NAT. Om Network Address Translation är involverad i fjärranslutningar kan du få problem med TFTP-överföringar på grund av att de använder UDP. NAT-routern måste fungera som en något mer avancerad proxy för att få detta att fungera. Du kan titta på den berömda säkerhetsprogramvaran pfSense, som tydligen kan hjälpa till.
Vi har tittat på ett antal av TFTP:s funktioner. Det är uppenbart att det finns särskilda omständigheter då det utmärkta TFTP är ett användbart verktyg som kan användas snabbt och effektivt med liten konfiguration.
Andra gånger, medges det, kommer TFTP inte riktigt att räcka till. I sådana fall kan sFTP och standard FTP vara mer lämpliga. Innan du letar efter dessa paket bör du dock ta en snabb titt för att se om de funktioner du behöver finns i TFTP:s verktygslåda. Du kan bli positivt överraskad av vad du hittar. När allt kommer omkring är många av de verktyg som vi använder i dag en förebild från den tid som TFTP kom från.
Chris Binnie är teknisk konsult med 20 års Linuxerfarenhet och skribent för Linux Magazine och Admin Magazine. I hans nya bok Linux Server Security: Hack and Defend får du lära dig att genomföra sofistikerade attacker, göra dina servrar osynliga och knäcka komplexa lösenord.
Förbättra din karriär inom Linux System Administration! Kolla in kursen Essentials of System Administration från The Linux Foundation.
Läs tidigare artiklar:
Trivial Transfers with TFTP, Part 1:
Trivial Transfers with TFTP, Part 2: Configuration