Installation du serveur TFTP sous Debian

TFTP signifie en Français « Protocole simplifié de transfert de fichiers ». TFTP est donc utilisé pour transférer des fichiers de manière simple dans un réseau privé. Je l’utilise pour démarer mes OS via le réseau et pour mettre à jour les firmwares de mes équipements réseaux et sauvegarder leur configuration.

Dans ce tutoriel pour installer un serveur tftp sous linux et plus particulièrement sous Debian, je vais détailler comment procéder et donner quelque explication.

Installation:

On utilise le paquet tftpd-hda qui se trouve dans les dépôts Debian (commande à saisir dans un terminal root ou en étant sudo):


root@server:/home/user# apt-get install tftpd-hpa

On doit ensuite créer le répertoire ou seront stockés les fichiers dont nous avons besoins sur le réseau via TFTP (/media/raid5/Install/tftp dans mon cas).


root@server:/home/user# mkdir /media/raid5/Install/tftp

Attention! nous venons de créer le répertoire en tant que root. Il faut changer le propiétaire et le groupe pour le répertoire.


root@server:/home/user# chown tftp:tftp /media/raid5/Install/tftp

Ensuite, donner les droits sur le répertoire:

Le 2 devant 777 spécifie que les fichiers créés dans le répertoire appartiendront toujours au groupe tftp.


root@server:/home/user# chmod 2777 /media/raid5/Install/tftp

Pour vérifier les droits:


root@server:/home/user# ls -lAh /media/raid5/Install/ |grep tftp
drwxrwsr-x  2 tftp   tftp 4,0K août  18 19:52 tftp

Une dernière chose, l’installation crée un utilisateur tftp avec comme « home » le répertoire /srv/tftp. Nous allons modifier le home de l’utilisateur tftp:


root@root:/home/user# usermod --home /media/raid5/Install/tftp tftp

Sécurité:

L’utilisation d’un service TFTP ne requière pas de compte et de mot de passe spécifique sur le serveur. Du fait qu’il n’y ait pas d’autentification, tftpd-hda n’autorisera que les fichiers publiquement accessible (o+r) à être lu, sauf si un permission spécifique a été précisée. Un fichier pourra être modifié seulement si il existe déjà. Par défaut, de nouveaux fichiers ne peuvent pas être créés à moins de préciser l’option –create.

Le serveur TFTP devrait être paramétré pour s’exécuter avec le privilège le plus bas possible. Pour cela,  utiliser le parametre –user pour spécifier l’ID du service tftpd-hpa et créer un utilisateur spécifique avec peu de privilège. Lors de l’installation, l’utilisateur tftp est créé.

L’acces aux fichiers peut et devrait être restreint en invoquant tftpd-hpa avec une liste de répertoire. Cela se fait via le parametre TFTP_DIRECTORY= et permet de limiter l’access aux fichiers inclus dans le répertoite défini. Si possible, il est recommander d’utiliser le paramètre –secure pour ch-rooter le tout une fois que le serveur est lancer.

Ajout d’un utilisateur local au groupe tftp pour l’écriture en local:

Après la procédure d’installation ci-dessus,  seuls les membres du groupe tftp ont le droit d’écrire dans l’arborescence du service TFTP. Tous les utilisateurs du système ont le droit de lire le contenu de cette même arborescence. Pour autoriser un utilisateur à écrire dans le répertoire /media/raid5/Install/tftp/, il suffit de l’ajouter au groupe système dédié. Voici un exemple :


root@server:/home/user# adduser user tftp
Ajout de l'utilisateur « user » au groupe « tftp »...
Ajout de l'utilisateur user au groupe tftp
Fait.

Configuration du service tftp:

Fichier de configuration:

Il se trouve pour Debian dans le répertoire : « /etc/default/tftpd-hpa »

Par défaut, voici son contenu

TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/srv/tftp"
TFTP_ADDRESS="0.0.0.0:69"
TFTP_OPTIONS="--secure"

Nous allons le personnaliser via la commande:


root@server:/home/user# nano /etc/default/tftpd-hpa
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/media/raid5/Install/tftp"
TFTP_ADDRESS="0.0.0.0:69"
TFTP_OPTIONS="--secure"

On redémare le service:


root@server:/home/user# service tftpd-hpa restart

Creation du fichier désiré sur le serveur tftp:

PS: J’ai choisi de ne pas autoriser la création de fichier via le service tftpd-hpa. Je les créerai moi même directement sur le serveur.


root@server:/home/user# touch /media/raid5/Install/tftp/nom du fichier désiré
root@server:/home/user# chmod 775 /media/raid5/Install/tftp/nom du fichier désiré
root@server:/home/user# chown tftp:tftp /media/raid5/Install/tftp/nom du fichier désiré

Réseau et firewall:

La partie réseau et firewall a été rédigé par Loïc BLOT, cf (son blog). Je n’ai fait que le reprendre.

Le TFTP est un protocole particulier basé sur le port 69 UDP et un port aléatoire. Le soucis vient du fait, que les réponses sont envoyées depuis et sur un port aléatoire. De ce fait vos firewall ne peuvent pas laisser passer tous ces flux, ce serait extrêmement dangeureux.

Afin d’activer le TFTP, il faut ajouter des règles de NAT et d’autorisation :


iptables -I FORWARD -p udp --dport tftp -j ACCEPT
iptables -t nat -A POSTROUTING -p udp --destination-port tftp -j MASQUERADE

et ensuite activer le module noyau de netfilter permettant de nater correctement les réponses TFTP:


modprobe nf_nat_tftp

Vérification:

Installer le packet tftp: apt-get install tftp
Se connecter au serveur tftp: tftp 192.168.10.13
Lancer le mode verbeur pour voir ce qui se passe: tftp>  verbose
Récrupérer le fichier désiré: tftp> get c800-universalk9-mz.SPA.153-3.M.bin
Lire le résultat qui normallement doit être bon et quiter: tftp> quit
En restant dans le répertoire courant, vérifier que le fichier a bien été reçu: root@server:/home/user# ls


root@server:/home/user# apt-get install tftp
root@server:/home/user# tftp 192.168.10.13
tftp>  verbose
tftp> get c800-universalk9-mz.SPA.153-3.M.bin
tftp> getting from 192.168.10.13:c800-universalk9-mz.SPA.153-3.M.bin to c800-universalk9-mz.SPA.153-3.M.bin [netascii]
Received 68390499 bytes in 26.9 seconds [20359837 bit/s]
tftp> quit
root@server:/home/user# ls
c800-universalk9-mz.SPA.153-3.M.bin

Voila!