Startseite
» LINUX
»
Wie man einen TFTP-Server auf einem Ubuntu-Server mit tftpd-hpa einrichtet
Wie man einen TFTP-Server auf einem Ubuntu-Server mit tftpd-hpa einrichtet
Installieren Sie den tftpd-hpa- Server und den tftp-hpa- Client von Ubuntu . Diese Konfiguration stellt Dateien bereit /srv/tftpund speichert Uploads in einem separaten Verzeichnis. Informationen zu den Paketlisten für Server und Client finden Sie in der Ubuntu- Dokumentation .
Sicherheit: TFTP erfordert weder Anmeldung noch Verschlüsselung. Beschränken Sie den Zugriff auf ein vertrauenswürdiges LAN; erreichbare Clients können verfügbare Dateien lesen und, sofern die Berechtigungen dies zulassen, Dateien hochladen. Übertragen Sie keine vertraulichen Informationen. Die TFTP-Spezifikation beschreibt die Sicherheitsgrenzen.
TFTP-Server einrichten
1. Server und Client installieren
Aktualisieren Sie die APT-Metadaten und installieren Sie anschließend beide Pakete:
--secureBeschränkt den Daemon auf sein konfiguriertes Stammverzeichnis, --createerlaubt Uploads und --umask 027beschränkt neue Upload-Dateien auf den Modus „nicht verfügbar“ 0640. Die Ubuntu-TFTPD-Dokumentation beschreibt diese Optionen. Speichern Sie mit Strg+O, drücken Sie die Eingabetaste und anschließend Strg+X.
Da der Client das Stammverzeichnis als sichtbar --secureangibt /srv/tftp, sind Dateinamen relativ dazu: Verwenden Sie `/tmp` hello.txt, nicht `/tmp` /srv/tftp/hello.txt. TFTP-Clients durchsuchen keine Verzeichnisse, daher wird eine Liste der veröffentlichten Dateinamen und ihrer Pfade geführt.
Dateien einschränken und Upload-Maske festlegen.
3. Erstellen Sie das Stammverzeichnis und das Upload-Verzeichnis.
Das Hauptverzeichnis soll dem Benutzer „root“ gehören, und Schreibzugriff soll nur dem Upload-Ordner gewährt werden:
Der Daemon kann das Stammverzeichnis lesen, aber nur das tftpBenutzerkonto kann hineinschreiben /srv/tftp/upload. Vermeiden Sie es, den gesamten Verzeichnisbaum für alle Benutzer beschreibbar zu machen, beispielsweise durch Berechtigungen wie „all“ 777.
Dateien im öffentlichen Stammverzeichnis sollten von allen autorisierten Clients als lesbar behandelt werden. Beschränken Sie dieses Verzeichnis auf Boot-Images, Firmware oder andere für dieses Netzwerk bestimmte Daten. Wählen Sie für private Übertragungen ein Protokoll mit Authentifizierung und Verschlüsselung.
Nur das Upload-Unterverzeichnis ist beschreibbar.
4. Fügen Sie eine Datei zum Bereitstellen hinzu.
Erstellen Sie eine bekannte Datei im Stammverzeichnis. Die standardmäßigen Leseprüfungen von TFTP erfordern, dass die bereitgestellten Dateien öffentlich lesbar sind. Setzen Sie daher den Modus auf 0644:
echo 'TFTP test file' | sudo tee /srv/tftp/hello.txt
sudo chmod 0644 /srv/tftp/hello.txt
Erstellen Sie eine bekannte Datei für den Download-Test.
5. Aktivieren und starten Sie den Dienst neu.
Aktivieren Sie das Gerät beim Systemstart, starten Sie es neu, um die Einstellungen anzuwenden, und überprüfen Sie seinen Status:
Falls der Startvorgang fehlschlägt, überprüfen Sie das Dienstprotokoll mit sudo journalctl -u tftpd-hpa -b --no-pager.
Starten Sie den Dienst nach der Änderung der Einstellungen neu.
6. Firewall-Zugriff einschränken
Wenn UFW aktiviert ist, erlauben Sie die erste Anfrage nur aus Ihrem Client-Subnetz. Ersetzen Sie das Beispielnetzwerk durch Ihren vertrauenswürdigen LAN-Bereich:
sudo ufw allow from 192.168.1.0/24 to any port 69 proto udp
sudo ufw status
Die Regeln für das Quellnetzwerk finden Sie im UFW-Leitfaden von Ubuntu . TFTP startet auf UDP-Port 69 und verwendet anschließend einen vom Server ausgewählten UDP-Port für die Dateidaten, wie in der Protokollspezifikation beschrieben . Eine restriktive Firewall, ein Router oder ein NAT-Gerät kann die Anfrage zwar zulassen, aber die Übertragung blockieren. Bei einem Client-Timeout verwenden Sie TFTP-fähiges Connection Tracking oder eine geeignete Firewall-Richtlinie. Öffnen Sie nicht jeden UDP-Port und setzen Sie TFTP nicht dem Internet aus. Dieser Befehl fügt eine Regel hinzu; er aktiviert UFW nicht. Wenn Sie den Server über SSH administrieren und eine inaktive Firewall aktivieren möchten, erlauben Sie SSH zuerst, um den Fernzugriff zu gewährleisten.
Erlauben Sie erste Anfragen aus einem vertrauenswürdigen Subnetz.
Test-Downloads und -Uploads
7. Von einem Ubuntu-Client herunterladen
Führen Sie auf dem Server den Befehl aus ip -brief addressund notieren Sie sich die erreichbare LAN-Adresse. Installieren Sie den Client gegebenenfalls auf einem Ubuntu-Client. Ersetzen Sie 192.0.2.10unten die Adresse durch die tatsächliche Serveradresse:
Die Datei wird im aktuellen Verzeichnis des Clients gespeichert. Das Handbuch des Ubuntu-TFTP-Clients dokumentiert binarydie getVorgehensweise. Der Binärmodus wird für Firmware, Boot-Images und Dateien empfohlen, deren Bytes unverändert bleiben müssen. Linux-Dateinamen unterscheiden zwischen Groß- und Kleinschreibung; geben Sie daher jeden Remote-Namen exakt ein.
Fordern Sie die bekannte Datei im Binärmodus an.
8. In den eingeschränkten Ordner hochladen
Erstellen Sie auf dem Client eine Testdatei und senden Sie diese anschließend an einen Pfad unterhalb des Upload-Verzeichnisses des Servers:
Verwenden Sie die tatsächliche Adresse des Servers. Der Remote-Pfad ist relativ zu /srv/tftp; überprüfen Sie den Upload auf dem Server mit sudo ls -l /srv/tftp/upload/. TFTP-Clients verwenden bekannte Dateinamen, anstatt ein Verzeichnis zu durchsuchen.
Uploads bleiben im beschreibbaren Unterverzeichnis.
Häufige Fehler beheben
Datei nicht gefunden: Überprüfen Sie den Dateinamen relativ zum Pfad /srv/tftpund stellen Sie sicher, dass die Datei existiert.
Zugriffsverletzung:tftp Bereitstellen, dass die bereitgestellten Dateien öffentlich lesbar sind; bei Uploads die Eigentumsrechte des Ziels überprüfen und sicherstellen, --createdass diese festgelegt sind.
Zeitüberschreitung: Stellen Sie sicher, dass der Client die erreichbare Adresse des Servers verwendet, der Dienst aktiv ist und die Firewall den ausgehandelten UDP-Datenfluss zulässt.
Um ein Netzwerkproblem einzugrenzen, testen Sie zunächst von einem Client im selben LAN. Funktioniert dies, aber ein Client im gerouteten Netzwerk meldet einen Timeout, überprüfen Sie, ob der Router oder die Firewall TFTP-fähig ist und den ausgehandelten Datenport korrekt verarbeitet.
Bei einem schreibgeschützten Dienst entfernen Sie --createihn TFTP_OPTIONSund starten Sie ihn neu tftpd-hpa.