Busybox
Busybox est un exécutable regroupant une multitude d'utilitaires généralement disponibles via GNU Core Utilities. Il a l'avantage de ne prendre que très peu de place et peut être utilisé pour faire des systèmes embarqués très simples.
Installation
Via le gestionnaire de paquet
apt install busybox
Via les sources
Le paquet build-essential
est nécessaire pour utiliser la commande make
.
wget https://busybox.net/downloads/busybox-1.27.2.tar.bz2 tar xf busybox-1.27.2.tar.bz2 cd busybox-1.27.2/ make defconfig make
Un exécutable busybox a été créé dans le répertoire courant.
La commande make defconfig
permet de créer le fichier de configuration pour make
(.config). Les commandes de pré-configurations possibles sont:
- make defconfig: Créé la configuration la plus saine possible. Ça active la plupart des fonctionnalités sans quelques outils de débogage ainsi que les outils nécessitants des modifications du système comme les noms de périphériques selinux ou devfs. Utiliser cette option si vous voulez démarrer depuis un Busybox complet pour, par la suite, écrémer les fonctionnalités pour en avoir un plus petit.
- make allnoconfig: Désactive tout. Cela crée une petite version de Busybox qui ne fait rien. Commencez ici si vous savez exactement ce que vous voulez et que vous souhaitez sélectionner uniquement ces fonctionnalités.
- make menuconfig: Modifie interactivement le fichier .config via une interface de menu à plusieurs niveaux. Utilisez-le après l'un des deux précédents.
Les autres options sont:
- make oldconfig: Mettre à jour un vieux fichier .config pour une nouvelle version de Busybox.
- make allyesconfig: Sélectionnez absolument tout. Cela crée une version statiquement liée de Busybox remplie de code de débogage, avec des dépendances sur selinux, en utilisant des noms de devfs ... Cela s'assure que tout est compilé. Que le résultat fasse quelque chose d'utile ou non est une question ouverte.
- make randconfig: Créer une configuration aléatoire à des fins de tests.
Socket réseau en utilisateur standard
Par défaut, un système Linux n'autorise la création et la gestion d'un socket réseau que par l'utilisateur root. Il peut être pratique de permettre certains exécutables à le faire via un utilisateur standard (c'est chiant d'avoir à taper le mot de passe root tout le temps). Pour ce faire, nous utiliserons les Linux capabilities.
Autorisation de redirection réseau
setcap CAP_NET_BIND_SERVICE=+eip /bin/busybox
ASTUCE
On peut voir cette autorisation avec la commandegetcap /bin/busybox
.Les utilisateurs standards peuvent désormais utiliser le serveur HTTP ou autres intégré à Busybox.
Source de la section
Usage
Nous allons partir du principe que l'emplacement de notre binaire busybox se trouve dans notre variable d'environnement $PATH
.
Lister les programmes disponibles dans notre Busybox
busybox
Afficher le manuel des outils contenus dans Busybox
man busybox
Avec un /
suivi du nom de la commande + entrer
+ n
on tombe directement sur le manuel de l'outil désiré.
Serveur WEB
Utiliser le serveur WEB intégré
busybox httpd -f -v -h /tmp/foo/
Le serveur httpd ne liste pas les fichiers, il faut entrer une URL complète comme pour le TFTP. Cependant, il redirige automatiquement sur un index.html si présent.
Paramètres:
- -f: Ne rend pas la main. Ça permet de fermer le serveur web avec un
ctrl+c
au lieu de ce faire chier avec les commandesps
etkill
- -v: affiche les IP des clients se connectant et le message renvoyé par le serveur
- -h: Spécifie le répertoire de travail du serveur. Si ce paramètre n'est pas renseigné, le répertoire courant est utilisé
Serveur DHCP
Créer le fichiers du processus
touch /tmp/udhcpd.pid
Créer le fichier contenant les baux DHCP
touch /tmp/udhcpd.leases
Créer un fichier de configuration
cat > /tmp/udhcpd.conf << _EOF_
# Plage d'adresse attribuable
start 192.168.0.1 # Par défaut: 192.168.0.20
end 192.168.0.253 # Par défaut: 192.168.0.254
# Interface réseau d'écoute
interface eth1 # Par défaut: eth0
# Nombre maximum de baux
max_leases 253 # Par défaut: 254
# Stocker le temps restant pour chaque bail dans le fichier des baux
# C'est utile sur les systèmes embarqués ne pouvant garder l'heure après un redémarrage
# Si cette valeur est définie à "no", l'heure de fin de bail sera stocker dans le fichier
# des baux au lieu du temps restant avant expiration
#remaining yes # Par défaut: yes
# Localisation du fichier des baux
lease_file /tmp/udhcpd.leases
# Localisation du fichier processus
pidfile /tmp/udhcpd.pid # Par défaut: /var/run/udhcpd.pid
# Les options suivantes sont pour le PXE
#siaddr 192.168.0.22 # Par défaut: 0.0.0.0
#sname zorak # Par défaut: (none)
#boot_file /var/nfs_root # Par défaut: (none)
# Options DHCP
# Elles peuvent être spécifiées via le mot clé "option" ou "opt" qui est un alias.
# La seule options définie par défaut est "lease" pour définir la durée des baux
opt dns 192.168.170.171 80.67.169.12
option subnet 255.255.255.0
opt router 192.168.0.254
#opt wins 192.168.10.10 # Ajoute un serveur WINS
#option dns 129.219.13.81 # Ajoute un autre DNS aux 2 autres ci-dessus
option domain local
option lease 864000 # 10 jours en secondes
_EOF_
Vous pouvez adapter les adresses et nom d'interface avec les commande suivante en remplaçant toto par la donnée appropriée:
sed -i 's/192\.168\.0\./192\.168\.toto./g' /tmp/udhcpd.conf sed -i 's/eth1/toto/g' /tmp/udhcpd.conf
Paramètres possibles:
Paramètre | Effet | Valeur par défaut |
---|---|---|
Paramètre 1 | Il fait ça | yes |
Liste exhaustive des options supportés. Voir le fichier source options.c:
Option | Effet |
---|---|
toto | titi |
Exécuter le serveur DHCP
busybox udhcpd -fv /tmp/udhcpd.conf
Paramètres:
- -f: Ne rend pas la main. Ça permet de fermer le serveur DHCP avec un
ctrl+c
au lieu de ce faire chier avec les commandesps
etkill
- -v: affiche les requêtes ACK et OFFER entre le serveur et les clients (on voit l'IP attribué de ce fait)
Sources de la section
- Page officielle de udhcpd: https://udhcp.busybox.net/
- Fichier de configuration exemple: https://udhcp.busybox.net/udhcpd.conf
TFTP
Client TFTP
Télécharger un fichier via TFTP
busybox tftp -r toto.txt 192.168.100.2 -g
Téléverser un fichier via TFTP
busybox tftp -l toto.txt 192.168.100.2 -p
Serveur TFTP
Le serveur TFTP est rarement embarqué dans le Busybox des distributions Linux. Dans ce cas, il faudra le compilé soit même (testé avec la version 1.31.1).
Busybox tftpd a besoin de s'appuyer sur un programme (lui même présent dans Busybox) d'ouverture de socket réseau: udpsvd
.
/tmp/busybox-1.31.1/busybox udpsvd -vE 0.0.0.0 69 /tmp/busybox-1.31.1/busybox tftpd -c /tmp/tftp/
Paramètres:
- -r: lecture seule
- -c: téléversements autorisés
- -u: rendre l'utilisateur passé en paramètre propriétaire des fichiers téléversés
- -l: journaliser dans Syslog en plus du Stdout (non fonctionnel d'après mes tests)
Netcat
Les commandes netcat sont identique à la version APT (avec quelques options en moins).
busybox nc -l -p 2323
busybox nc ipserver 2323
Terminal série
On peut remplacer l'usage de Minicom par Busybox avec l'outil embarqué Microcom.
busybox microcom -s 9600 /dev/ttyUSB0
Pour quitter Microcom, faites la séquence d'échappement ctrl+x
.