Я работаю над сценарием bash для автоматического обнаружения и удаленного управления запатентованными регистраторами данных моей компании. Записывающие устройства работают под заказной версией Linux и по сути являются мощными PIS или Arduinos.
Порт Ethernet на устройствах настроен таким образом, что при подключении к сети он получает аренду dhcp. Чтобы обнаружить устройства, я отслеживаю /var/lib/dhcp/dhcpd.leases на моей локальной машине. Для каждой уникальной записи я проверяю порты для проверки состояния сервера ssh с помощью nmap
. Чтобы включить автоматический запуск этого скрипта, он вызывается из /etc/rc3.d/rc.local и, таким образом, запускается пользователем root во время загрузки. Здесь вещи становятся странными.
Чтобы убедиться, что мы всегда можем обнаружить новые соединения, файл dhcpd.leases проверяется в бесконечном цикле. Мы также хотим сохранить низкую нагрузку на систему, поэтому, чтобы сократить время каждой итерации цикла, мы накладываем небольшой тайм-аут на нашу nmap
. Вот точная строка в использовании:
nmap --max-retries=1 -p 22 --host-timeout=50ms $ip_address
При запуске от имени обычного пользователя эта линия работает невероятно стабильно, но для получения положительных результатов мне нужно увеличить время ожидания до 600 мс. Я проверил это, используя команду time
и вот обычный результат (сделанный с таймаутом 600 мс):
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
Вот вывод для той же вещи, но вошел как 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
Есть идеи, что может быть причиной этого дополнительного времени и как его предотвратить? Из некоторых предварительных исследований я вижу, что root работает с некоторыми настройками по умолчанию, к которым другие пользователи не имеют доступа. Как мне выполнить репликацию условий выполнения nmap
обычным пользователем?
Как дополнительное примечание, это выполняется на машине Ubuntu 14.04 LTS.