Quitter le forum et retourner au site

TFTP sous Ubuntu

Vous avez un didactiel ou une astuce particulière concernant un logiciel, partagez votre expérience dans cette partie.
Avatar de l’utilisateur
le Manchot Masqué
Administrateur du site
Messages : 719
Inscription : lun. 26 mai 2008, 21:05
Distribution : Debian, Ubuntu
Niveau : Moitié plein !
Localisation : Guebwiller

TFTP sous Ubuntu

Message par le Manchot Masqué »

Ce petit tutorial est clairement réservé aux admins. Si vous débutez, ne vous faites pas mal : il y a beaucoup d'autres infos beaucoup plus simples et sympas sur ce site que le casse tête qui suit...

TFTP est un protocole FTP simplifié, largement usité pour mettre à jour les firmwares d'éléments actifs (modems ADSL, ...), charger un noyau Linux distant à partir d'un terminal dénué de disque dur, etc... Contrairement au FTP classique, TFTP ne permet pas d'afficher les noms des fichiers : il faut déjà connaître le nom du fichier que l'on veut poster ou télécharger, ce qui offre déjà plus de sécurité.

Sous GNU/Linux, et dans les Unices classiques, les "services" (programmes qui tournent en sous-jacent) peuvent soit être autonomes, et gérer eux même la sécurité d'accès, soit reposer sur un démon dédié, généralement nommé inetd ou xinetd, suivant la version qu'on veut utiliser.

Par défaut, la Ubuntu utilise "openbsd-inetd" pour ce contrôle d'accès.

Si vous tenez absolument à usiter xinetd, il vous faudra l'installer via

Code : Tout sélectionner

apt-get install xinetd
puis rajouter le fichier de configuration /etc/xinetd.d/tftp comme suit

Code : Tout sélectionner

service tftp
{
#only_from      = 192.168.X.X/24
#interface      = 192.168.X.X
protocol        = udp
port            = 69
socket_type     = dgram
wait            = yes
user            = nobody
server          = /usr/sbin/in.tftpd
server_args     = /tftpboot
disable         = no
}
La paresse étant le maître mot de tout administrateur qui se respecte, nous laisserons xinetd de côté dans la suite de ce tuto... ;)

Passons à l'installation des quelques paquets utiles :

Code : Tout sélectionner

apt-get install atftp atftpd


L'installation de atftpd (le serveur TFTP proprement dit) modifie le fichier /etc/inetd.conf. Mais comme toujours, les répertoires changent un peu entre les BSD et les Linux... Sous Linux, on a plus l'habitude retrouver un /tftpboot dans la littérature courante. Il s'agit donc de transformer la ligne

Code : Tout sélectionner

tftp            dgram   udp4    wait    nobody /usr/sbin/tcpd /usr/sbin/in.tftpd --tftpd-timeout 300 --retry-timeout 5 --mcast-port 1758 --mcast-addr 239.239.239.0-255 --mcast-ttl 1 --maxthread 100 --verbose=5 /srv/tftp
en

Code : Tout sélectionner

tftp            dgram   udp4    wait    nobody /usr/sbin/tcpd /usr/sbin/in.tftpd --tftpd-timeout 300 --retry-timeout 5 --mcast-port 1758 --mcast-addr 239.239.239.0-255 --mcast-ttl 1 --maxthread 100 --verbose=5 /tftpboot
puis de créer le répertoire /tftpboot proprement dit :

Code : Tout sélectionner

mkdir /tftpboot
chown nobody:users /tftpboot
chmod 755 /tftpboot
On place ensuite un fichier dans /tftpboot que l'on nommera ABC pour les tests :

Code : Tout sélectionner

cp ABC /tftpboot
chown -R nobody:users /tftpboot
chmod 755 /tftpboot/ABC
Petit détail "croustillant" : le fait de forcer la configuration dans /etc/inetd.conf court-circuite le fichier de configuration /etc/default/atftpd.

On pourrait croire qu'on a enfin fini la mise en place, mais voilà : il manque encore la sécurité "basique" de /etc/hosts.allow et /etc/hosts.deny.
Ces deux fichiers filtrent en effet l'accès aux services gérés par inetd.

Le /etc/hosts.deny contient généralement la ligne

Code : Tout sélectionner

ALL:ALL
qui interdit l'accès à tous service par défaut.

Il faut en revanche penser à ouvrir l'accès au démon TFTP - le symptôme "classique" est une série de timeout en méthode GET ou PUT avec le client atftp, alors que la connection semble bien établie, d'où la ligne suivante à rajouter :

Code : Tout sélectionner

in.tftpd:ALL
On peut enfin relancer inetd via

Code : Tout sélectionner

/etc/init.d/openbsd-inetd restart
puis tester l'accès TFTP via

Code : Tout sélectionner

cd /tmp
atftp --trace -g -l ABC -r ABC IP_DU_SERVEUR
Le -g appelle la méthode GET (on récupère donc un fichier), le -l est le nom LOCAL, le -r le nom distant (REMOTE)

Si tout s'est bien passé, on doit retrouver le fichier ABC dans le répertoire /tmp.
Répondre