Outils pour utilisateurs

Outils du site


software:applications:tftpd-hpa:installer_serveur_tftp

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
software:applications:tftpd-hpa:installer_serveur_tftp [2023/12/11 23:28] yoannsoftware:applications:tftpd-hpa:installer_serveur_tftp [2024/07/22 14:59] (Version actuelle) – [Echec de l'upload] yoann
Ligne 1: Ligne 1:
 {{tag>sysadmin netadmin tftp}} {{tag>sysadmin netadmin tftp}}
  
 +:TODO_DOCUPDATE:
  
-====== tftpd-hpa : Un serveur tftp ======+====== tftpd-hpa : Un serveur TFTP ======
  
 Plusieurs versions de serveurs TFTP ((Trivial File Transfert Protocol)) sont disponibles sur la majorité des distributions GNU/Linux : Plusieurs versions de serveurs TFTP ((Trivial File Transfert Protocol)) sont disponibles sur la majorité des distributions GNU/Linux :
Ligne 16: Ligne 17:
  
 ===== Installer/configurer le serveur ===== ===== Installer/configurer le serveur =====
 +
 +Via le gestionnaire de paquetage, installer le paquet **tftp-hpa** :
  
 <code bash> <code bash>
Ligne 21: Ligne 24:
 </code> </code>
  
-Le fichier de configuration est minimaliste :+<note> 
 +Sur certaines distributions, à la fin de l'installation le service n'est pas correctement lancé. Voir la section  
 +</note> 
 + 
 +Pour vérifier l'état du service : 
 +<code bash> 
 +systemctl status tftpd-hpa.service 
 + 
 +netstat -anpe | grep :69 
 +</code> 
 + 
 +Le fichier de configuration par défaut est minimaliste :
 <file txt tftpd-hpa> <file txt tftpd-hpa>
 # /etc/default/tftpd-hpa # /etc/default/tftpd-hpa
Ligne 31: Ligne 45:
 </file> </file>
  
-L'installateur crée un dossier ''/srv/tftp'' c'est le dossier racine du serveur. Par défaut ce dossier appartient à root, l'utilisateur **tftp** qui executera le service n'aura qu' un accès en lecture.+L'installateur crée un dossier ''/srv/tftp'' c'est le dossier racine du serveur (l'option %%--secure%% active un chroot)Le dossier appartient à root, l'utilisateur **tftp** qui exécute le service n'qu'un accès en lecture.
  
-Pour permettre l'écriture par l'utilisateur tftp sur la racine du dossier tftp :+Avec la configuration par défaut, l'utilisateur pourra downloader les fichiers disponibles sur le serveur mais ne pourra pas uploader des fichiers. 
 + 
 +<note> 
 +Le service TFTP est peu sûr, il fonctionne sans authentification. Il est donc fortement conseillé : 
 +  * de limiter sa portée (autoriser les clients bien connus, les réseaux locaux via le pare-feu) ; 
 +  * de limiter son activation (activer le service seulement au besoin). 
 +</note> 
 + 
 +<code bash> 
 +# Désactive le démarrage automatique du service 
 +systemctl disable tftpd-hpa.service  
 +</code> 
 + 
 +Pour limiter l'accès au service TFTP, selon le mode de compilation du programme, il faudra utiliser : 
 +  * soit les règles appropriées du pare-feu ; 
 +  * soit s'appuyer sur la base **host_access** (confère **man tftpd** section SECURITY). 
 + 
 +<note> 
 +Sur Ubuntu 20.04 le programme est compilé pour utiliser la base **host_access** : il faut éditer les fichiers /etc/hosts.allow et /etc/hosts.deny pour controler l'accès au service TFTP. 
 +</note> 
 + 
 +<file conf hosts.deny> 
 +# /etc/hosts.deny: list of hosts that are _not_ allowed to access the system. 
 +#                  See the manual pages hosts_access(5) and hosts_options(5). 
 +
 +# Example:    ALL: some.host.name, .some.domain 
 +#             ALL EXCEPT in.fingerd: other.host.name, .other.domain 
 +
 +# If you're going to protect the portmapper use the name "rpcbind" for the 
 +# daemon name. See rpcbind(8) and rpc.mountd(8) for further information. 
 +
 +# The PARANOID wildcard matches any host whose name does not match its 
 +# address. 
 +
 +# You may wish to enable this to ensure any programs that don'
 +# validate looked up hostnames still leave understandable logs. In past 
 +# versions of Debian this has been the default. 
 +# ALL: PARANOID 
 + 
 +# Tout service non explicitement autorisé est bloqué 
 +ALL: ALL 
 + 
 +</file> 
 + 
 +<file conf hosts.allow> 
 +# /etc/hosts.allow: list of hosts that are allowed to access the system. 
 +#                   See the manual pages hosts_access(5) and hosts_options(5). 
 +
 +# Example:    ALL: LOCAL @some_netgroup 
 +#             ALL: .foobar.edu EXCEPT terminalserver.foobar.edu 
 +
 +# If you're going to protect the portmapper use the name "rpcbind" for the 
 +# daemon name. See rpcbind(8) and rpc.mountd(8) for further information. 
 +
 +in.tftpd: LOCAL 192.168.1.0/24 
 +</file> 
 + 
 +:TODO: 
 +  * Voir pourquoi le service est accessible alors que le pare-feu est paramétré pour interdire l’accès ; 
 +  * Voir désactivation du service. 
 + 
 +===== Autoriser l'upload sur le serveur ===== 
 + 
 +Par défaut le serveur TFTP rend accessible ses fichiers aux clients mais ne permet pas la création de nouveau contenu/l'écriture de fichiers. Il est cependant possible d'autoriser l'upload de fichiers sur le serveur TFTP. 
 + 
 + 
 +Si le serveur n'est pas paramétré pour accepter la création de nouveaux fichiers, lors de l'utilisation de la commande **''put''** une erreur avec le message ''File not found'' est retournée: 
 +<code> 
 +tftp> put prise-A10.txt 
 +Error code 1: File not found 
 +</code> 
 + 
 +Modifier le fichier de configuration **/etc/default/tftp-hpa**, ajouter l'option **%%--create%%** à la variable **TFTP_OPTIONS**: 
 +<file> 
 +... 
 +TFTP_OPTIONS="--secure --ipv4 --verbose --create" 
 +</file> 
 + 
 +Modifier les droits sur le dossier racine du serveur TFTP, l'utilisateur tftp doit avoir les droits d'écriture. Si les droit ne sont pas correctement positionnés, on obtient un message ''Error code 0: Permission denied''
 + 
 +<code  bash> 
 +sudo chown tftp:tftp /srv/tftp/ 
 +</code> 
 + 
 +Relancer le service 
 + 
 +<code bash> 
 +systemctl restart tftpd-hpa.service 
 +</code> 
 + 
 +:TODO: 
 + 
 +Modifier le masque associé à l'utilisateur tftp pour que les fichiers créés ne soient accessibles qu'en lecture aux utilisateurs du système (other). 
 + 
 + 
 +===== Pare-feu ===== 
 + 
 +Il est possible de spécifier une plage de ports 
 +<file> 
 +TFTP_OPTIONS="--secure --ipv4 --verbose --create --port-range 53000:55000" 
 +</file> 
 + 
 +Pour pouvoir gérer correctement les connexions, le module **ip_conntrack_tftp** doit être chargé : 
 + 
 +<code bash> 
 +modprobe ip_conntrack_tftp 
 + 
 +# Vérifier que le module est bien chargé 
 +lsmod | grep -i tftp 
 +</code> 
 + 
 +<file> 
 +# Autorise le trafi 
 +</file> 
 + 
 + 
 +<file> 
 +table ip ipfilter { 
 +  comment "Firewall" 
 + 
 +  ct helper tftp-standard { 
 +    type "tftp" protocol udp 
 +    l3proto ip 
 +  } 
 + 
 +  chain PRE {  
 +    type filter hook prerouting priority filter; policy accept; 
 +    udp dport 69 ct helper set "tftp-standard" 
 +  } 
 +   
 +  chain inbound { 
 +    comment "Filtrage des paquets entrants" 
 +    type filter hook input priority filter; policy drop; 
 +    ct state invalid counter drop 
 +     
 +    ct state established,related counter accept 
 +     
 +    iif "lo" counter accept comment "Accepte le trafic local sur l'interface loopback" 
 + 
 +    udp dport 69 counter accept 
 +    ct helper "tftp" accept 
 +     
 + 
 +    log prefix "[FW] [REJECT] [RID=666] " counter reject comment "Rejette tout trafic entrant non explicitement autorise" 
 +  } 
 + 
 + chain outbound { 
 +    comment "Filtrage des paquets sortants" 
 +    type filter hook output priority filter; policy drop; 
 +     
 +    ct state established,related counter accept comment "Autorise tout trafic sortant en lien avec les connexions explicitement autorisees" 
 +     
 +    log prefix "[FW] [REJECT] [RID=667] " counter reject comment "Rejette tout trafic sortant non explicitement autorise" 
 +  } 
 + 
 +  chain forward { 
 +    type filter hook forward priority filter; policy drop; 
 +    log prefix "[FW] [REJECT] [RID=668] " counter reject comment "Rejette tout transfert non explicitement autorise" 
 +  } 
 +
 + 
 +</file> 
 + 
 +===== Dépannage ===== 
 + 
 +==== Echec de démarrage du service après installation ==== 
 + 
 +Le service ne démarre pas à la fin du processus d'installation. 
 +<code bash> 
 +systemctl status tftpd-hpa.service 
 +</code> 
 + 
 +<file> 
 +juil. 02 14:31:57 node-7c87 systemd[1]: Starting tftpd-hpa.service - LSB: HPA'tftp server... 
 +juil. 02 14:31:57 node-7c87 tftpd-hpa[16693]:  * Starting HPA's tftpd in.tftpd 
 +juil. 02 14:31:57 node-7c87 systemd[1]: tftpd-hpa.service: Control process exited, code=exited, status=71/OSERR 
 +juil. 02 14:31:57 node-7c87 systemd[1]: tftpd-hpa.service: Failed with result 'exit-code'
 +juil. 02 14:31:57 node-7c87 systemd[1]: Failed to start tftpd-hpa.service - LSB: HPA's tftp server. 
 +</file> 
 + 
 +Le journal indique également : 
 +<code bash> 
 + journalctl --priority err 
 +</code> 
 + 
 +<file> 
 +juil. 02 14:31:57 node-7c87 in.tftpd[16700]: cannot open IPv6 socket, disable IPv6: Address family not supported by protocol 
 +juil. 02 14:31:57 node-7c87 in.tftpd[16700]: Cannot set nonblock flag on socket: Bad file descriptor 
 +juil. 02 14:31:57 node-7c87 systemd[1]: Failed to start tftpd-hpa.service - LSB: HPA's tftp server. 
 +</file> 
 + 
 +Modifier le fichier **''/etc/default/tftpd-hpa''** ajouter l'option **%%--ipv4%%** : 
 + 
 +<file> 
 +TFTP_USERNAME="tftp" 
 +TFTP_DIRECTORY="/srv/tftp" 
 +TFTP_ADDRESS="192.168.1.10:69" 
 +TFTP_OPTIONS="--secure --ipv4" 
 +</file> 
 + 
 + 
 +==== Echec de l'upload ==== 
 + 
 +Toute tentative d'upload (copie d'un fichier sur le serveur TFTP) échoue. Les messages suivants peuvent être retournés au client : 
 + 
 +<file> 
 +Error code 1: File not found 
 +</file> 
 + 
 + 
 +<file> 
 +ERRORtransfer fail. 
 +</file>
  
 +  * Vérifier que l'utilisateur tftp a le droit d'écriture à un sous dossier de son home mais pas à son home (/srv/tftp) ;
 +  * Vérifier la présence de l'option **%%--create%%** dans la variable **''TFTP_OPTIONS''** du fichier **''/etc/default/tftpd-hpa''**.
  
 +voir section [[software:applications:tftpd-hpa:installer_serveur_tftp#autoriser_l_upload_sur_le_serveur|Autoriser l'upload sur le serveur TFTP]]
 ===== Références ===== ===== Références =====
  
Ligne 41: Ligne 270:
   * [[https://www.it-connect.fr/configurer-un-serveur-tftp-sous-ubuntu-server/|Configurer un serveur TFTP sous Ubuntu Server (it-connect.fr)]]   * [[https://www.it-connect.fr/configurer-un-serveur-tftp-sous-ubuntu-server/|Configurer un serveur TFTP sous Ubuntu Server (it-connect.fr)]]
   * [[https://www.inertramblings.com/2017/06/16/configuring-a-tftp-server-on-ubuntu-for-switch-upgrades-and-maintenance/|Configurer un serveur TFTP sous Ubuntu pour maintenir et mettre à jour un switch Cisco]]   * [[https://www.inertramblings.com/2017/06/16/configuring-a-tftp-server-on-ubuntu-for-switch-upgrades-and-maintenance/|Configurer un serveur TFTP sous Ubuntu pour maintenir et mettre à jour un switch Cisco]]
 +  * [[https://fr.linux-console.net/?p=15435|Installer un serveur TFTP sous Debian 11]]
 +  * [[https://help.ubuntu.com/community/TFTP|Documentation Ubuntu : TFTP]]
 +  * man tftpd
 +  * https://unix.stackexchange.com/questions/99270/iptables-rules-for-tftp-server#101036
  
software/applications/tftpd-hpa/installer_serveur_tftp.1702337326.txt.gz · Dernière modification : 2023/12/11 23:28 de yoann