Estou trabalhando em um script bash para ativar a detecção automática e o controle remoto dos gravadores de dados de propriedade da minha empresa. Os gravadores executam uma versão customizada do linux e são essencialmente poderosos ou arduinos.
A porta ethernet nos dispositivos é configurada para que, quando conectada à rede, receba uma concessão de dhcp. Para detectar os dispositivos, estou monitorando /var/lib/dhcp/dhcpd.leases na minha máquina local. Para cada entrada única, eu portscan para testar o status do servidor ssh usando nmap
. Para ativar um lançamento automático deste script, ele está sendo chamado de /etc/rc3.d/rc.local e, portanto, é executado pelo root no tempo de inicialização. É aqui que as coisas ficam estranhas.
Para garantir que sempre possamos detectar novas conexões, o arquivo dhcpd.leases é verificado em um loop infinito. Também queremos manter uma baixa pegada de sistema, de modo a reduzir o tempo de cada iteração de loop, impomos um pequeno tempo limite em nosso nmap
. Aqui está a linha exata em uso:
nmap --max-retries=1 -p 22 --host-timeout=50ms $ip_address
Quando executado como um usuário normal, essa linha funciona de maneira incrivelmente consistente, mas, como root, tenho que aumentar o tempo limite para 600 ms para obter resultados consistentemente positivos. Eu testei usando o comando time
e aqui está um resultado normal (feito com um timeout 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
Aqui está a saída para a mesma coisa, mas logado como 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
Alguma idéia do que poderia estar causando esse tempo extra e como evitá-lo? A partir de algumas pesquisas preliminares, posso ver que o root é executado com alguns padrões definidos pelos quais outros usuários não têm acesso. Como posso replicar as condições de nmap
sendo executado por um usuário normal?
Como nota adicional, isso está sendo executado em uma máquina Ubuntu 14.04 LTS.