Je travaille sur un bash script pour permettre la détection automatique et le contrôle à distance des enregistreurs de données propriétaires de ma société. Les enregistreurs exécutent une version personnalisée de linux et sont essentiellement des pis ou des arduinos puissants.
Le port Ethernet des appareils est configuré de telle sorte que lorsqu'il est branché sur le réseau, il reçoit un bail dhcp. Afin de détecter les périphériques, je surveille /var/lib/dhcp/dhcpd.leases sur ma machine locale. Pour chaque entrée unique, je fais un balayage de ports pour tester le statut du serveur ssh en utilisant nmap
. Pour permettre un lancement automatique de ce script, il est appelé depuis /etc/rc3.d/rc.local et est donc lancé par root au démarrage. C'est là que les choses deviennent étranges.
Pour s'assurer que nous pouvons toujours détecter les nouvelles connexions, le fichier dhcpd.leases est vérifié dans une boucle infinie. Nous voulons également maintenir une faible empreinte système, donc afin de réduire le temps de chaque itération de la boucle, nous imposons un petit délai d'attente à notre fichier nmap
. Voici la ligne exacte utilisée :
nmap --max-retries=1 -p 22 --host-timeout=50ms $ip_address
Lorsqu'elle est exécutée en tant qu'utilisateur normal, cette ligne fonctionne de manière incroyablement cohérente, mais en tant que root, je dois augmenter le timeout à 600ms pour obtenir des résultats positifs constants. Je l'ai testé en utilisant le time
et voici un résultat habituel (fait avec un délai de 600ms) :
Starting Nmap 6.40 ( http://nmap.org ) at 2014-12-19 09:41 EST
Nmap scan report for 192.168.53.101
Host is up (0.00039s latency).
PORT STATE SERVICE
22/tcp open ssh
Nmap done: 1 IP address (1 host up) scanned in 0.05 seconds
real 0m0.059s
user 0m0.043s
sys 0m0.004s
Voici le résultat pour la même chose, mais en étant connecté en tant que root :
Starting Nmap 6.40 ( http://nmap.org ) at 2014-12-19 09:48 EST
Nmap scan report for 192.168.53.101
Host is up (0.00035s latency).
PORT STATE SERVICE
22/tcp open ssh
MAC Address: 00:04:D1:0B:03:EC
Nmap done: 1 IP address (1 host up) scanned in 0.55 seconds
real 0m0.580s
user 0m0.056s
sys 0m0.008s
Avez-vous une idée de ce qui pourrait causer ce temps supplémentaire et comment l'éviter ? D'après quelques recherches préliminaires, je peux voir que root fonctionne avec certains paramètres par défaut auxquels les autres utilisateurs n'ont pas accès. Comment puis-je m'y prendre pour reproduire les conditions de nmap
exécuté par un utilisateur normal ?
En outre, ce projet est exécuté sur une machine Ubuntu 14.04 LTS.