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
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
}
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
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
Code : Tout sélectionner
mkdir /tftpboot
chown nobody:users /tftpboot
chmod 755 /tftpboot
Code : Tout sélectionner
cp ABC /tftpboot
chown -R nobody:users /tftpboot
chmod 755 /tftpboot/ABC
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
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
Code : Tout sélectionner
/etc/init.d/openbsd-inetd restart
Code : Tout sélectionner
cd /tmp
atftp --trace -g -l ABC -r ABC IP_DU_SERVEUR
Si tout s'est bien passé, on doit retrouver le fichier ABC dans le répertoire /tmp.