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 xinetdCode : 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 atftpdL'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/tftpCode : 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 /tftpbootCode : Tout sélectionner
mkdir /tftpboot
chown nobody:users /tftpboot
chmod 755 /tftpbootCode : Tout sélectionner
cp ABC /tftpboot
chown -R nobody:users /tftpboot
chmod 755 /tftpboot/ABCOn 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:ALLIl 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:ALLCode : Tout sélectionner
/etc/init.d/openbsd-inetd restartCode : Tout sélectionner
cd /tmp
atftp --trace -g -l ABC -r ABC IP_DU_SERVEURSi tout s'est bien passé, on doit retrouver le fichier ABC dans le répertoire /tmp.