Как запускать Nmap без sudo с помощью Linux capabilities

Nmap (Network Mapper) — один из наиболее популярных инструментов для сканирования портов и сетевого аудита. Многие расширенные режимы сканирования (например, SYN-скан, доступ к «сырым» сокетам и пр.) требуют низкоуровневого сетевого доступа, который по умолчанию доступен только root-пользователю. Вместо того, чтобы давать полный root-доступ, безопаснее предоставить конкретные привилегии через Linux capabilities.
В этой статье подробно показано, какие capabilities нужны Nmap, как их назначить, как корректно запускать Nmap после этого и какие меры безопасности стоит принять.
Что такое Linux capabilities
Linux capabilities — это атомарные привилегии ядра, которые делят полномочия root-пользователя на независимые части. Каждая capability отвечает за отдельный набор действий (работа с сетью, управление пакетами, привязка к привилегированным портам и т.п.).
Краткое определение терминов:
- capability — отдельное право ядра (пример: CAP_NET_RAW).
- eip (effective, inheritable, permitted) — наборы, в которых capability может присутствовать для исполняемых файлов и процессов.
В нашем случае мы используем набор eip, чтобы позволить Nmap использовать назначенные привилегии независимо от того, какой пользователь запускает бинарник.
Важно: назначение повышенных привилегий требует осторожности. Nmap включает скриптовый движок (NSE), который при некорректной конфигурации может быть использован для эскалации привилегий или атак на локальную систему. Ограничьте доступ к бинарнику и контролируйте пользователей.
Какие capabilities нужны Nmap и зачем
- CAP_NET_RAW — доступ к «сырым» пакетам и raw-сокетам. Необходим для низкоуровневых сканов (например, SYN-скан).
- CAP_NET_ADMIN — администрирование сетевого стека: изменение таблиц маршрутизации, настройка интерфейсов, управление правилами и пр.
- CAP_NET_BIND_SERVICE — привязка сокетов к привилегированным портам (<1024), если это требуется для тестов.
Мы назначаем именно эти три, чтобы минимум привилегий позволял Nmap выполнять расширенные сетевые операции без полного root-доступа.
Шаг 1 — Установите инструмент для работы с capabilities
Пакет libcap поставляет утилиты setcap/getcap. Установите его через пакетный менеджер вашей системы.
Debian/Ubuntu:
sudo apt-get update
sudo apt-get install libcap2-binFedora/CentOS (dnf/yum):
sudo dnf install libcapArch Linux:
sudo pacman -S libcapopenSUSE:
sudo zypper install libcap1Примечание: имя пакета и менеджер зависят от дистрибутива. Если пакет уже установлен, переходите к следующему шагу.
Шаг 2 — Назначьте capabilities бинарнику Nmap
Найдите полный путь к бинарнику nmap и назначьте требуемые capabilities. Рекомендуется указывать полный путь (не относиться к PATH) при вызове setcap.
which nmap
sudo setcap cap_net_raw,cap_net_admin,cap_net_bind_service+eip /usr/bin/nmapЕсли вы предпочитаете использовать подстановку пути:
sudo setcap cap_net_raw,cap_net_admin,cap_net_bind_service+eip $(which nmap)Проверьте результат:
getcap $(which nmap)
# пример вывода: /usr/bin/nmap = cap_net_bind_service,cap_net_admin,cap_net_raw+eipСоветы:
- Применяйте setcap только к проверенному бинарнику. Избегайте назначения capabilities для исполняемых файлов в общих каталогах, где может появиться небезопасная замена.
- Если на системе включены SELinux или AppArmor, учтите их политики, они могут блокировать часть действий даже с назначенными capabilities.
Шаг 3 — Запуск Nmap: флаг –privileged и альтернативы
После назначения capabilities Nmap нужно сообщить, что бинарник обладает привилегиями. Для этого используйте опцию –privileged или установите переменную окружения NMAP_PRIVILEGED.
Пример запуска:
nmap --privileged -sS 192.168.0.112Если не указать –privileged, Nmap может переключиться на менее привилегированный режим и ограничить набор доступных техник сканирования.
Чтобы не вводить флаг каждый раз, добавьте экспорт переменной в один из файлов конфигурации сессии:
- ~/.xsessionrc — для графических окружений (наследуется терминалами).
- ~/.profile — для login-shells.
- ~/.bashrc — для интерактивной bash-сессии.
- ~/.gnomerc — если вы используете старый GNOME-профиль.
Пример строки:
export NMAP_PRIVILEGED=1Когда этот подход не работает
- Если файловая система не поддерживает ambient capabilities (например, при запуске с NFS-монта), назначение может не примениться.
- Если ядро или дистрибутив сильно устарели и не учитывают наборы eip в ожидаемом виде.
- SELinux/AppArmor или другие LSM могут запрещать действия, несмотря на назначенные capabilities.
- Если вы используете контейнер с ограничениями сети (например, Docker без разрешений), способности внутри контейнера не дадут доступ к хостовой сети.
Альтернативные подходы
- Ограниченная запись в sudoers: разрешите запуск конкретных nmap-команд через sudo без пароля. Это даёт контроль, но требует прав sudo для настройки.
- Контейнеризация: запустите nmap в контейнере с сетевым режимом host или с CAP_NET_RAW, назначенным контейнеру (docker –cap-add).
- Setuid-обёртка: создание setuid-оболочки — не рекомендовано из соображений безопасности.
Меры безопасности и лучшие практики
- Давайте минимально необходимые capabilities. Не назначайте CAP_SYS_ADMIN или другие широкие права.
- Ограничьте права на бинарник nmap (chown root:somegroup и chmod 750) и добавьте только нужных пользователей в группу.
- Используйте запись в sudoers для администрирования присвоения setcap и его отмены.
- Подумайте о дополнительных механизмах: AppArmor профиль для nmap или SELinux-модуль, чтобы ограничить нежелательные действия.
Важно: даже при ограниченных capabilities Nmap с включенным NSE (Nmap Scripting Engine) способен запускать скрипты, взаимодействующие с системой. Контролируйте список доступных скриптов и их владельцев.
Контроль и откат
Чтобы снять capabilities с бинарника:
sudo setcap -r $(which nmap)Чтобы увидеть текущие capabilities:
getcap $(which nmap)Контрольный список ролей
Администратор:
- Установить libcap и проверить версию nmap.
- Назначить capabilities с полным путем к бинарнику.
- Ограничить права доступа к файлу nmap и контролировать группу.
Разработчик/пентестер:
- Проверить, что nmap запускается с –privileged и выполняет нужные сканы.
- Тестировать скрипты NSE в изолированных средах.
Аудитор:
- Проверить, кто может запускать бинарник и какие capabilities назначены.
- Проверить логи и конфигурацию AppArmor/SELinux.
Критерии приёмки
- getcap выводит cap_net_raw,cap_net_admin,cap_net_bind_service+eip для /usr/bin/nmap.
- nmap –privileged -sS <хост> выполняет SYN-скан без sudo.
- Доступ к бинарнику ограничен правами файловой системы для посторонних пользователей.
Небольшая методология тестирования
- На тестовой машине назначьте capabilities.
- Запустите nmap без sudo и выполните базовый SYN-скан.
- Проверьте, что результаты совпадают с запуском под sudo (контрольный тест).
- Проверьте отсутствие неожиданных прав доступа и проанализируйте логи.
Диаграмма принятия решения
flowchart TD
A[Нужен доступ к raw-сокетам?] -->|Да| B[Можно ли дать setcap?]
B -->|Да| C[Назначить CAP_NET_RAW,CAP_NET_ADMIN,CAP_NET_BIND_SERVICE]
B -->|Нет| D[Использовать sudoers/контейнер]
A -->|Нет| E[Обычный запуск без привилегий]Краткий глоссарий
- Nmap — инструмент сканирования сети и портов.
- NSE — Nmap Scripting Engine, система скриптов для Nmap.
- setcap/getcap — утилиты для назначения и просмотра capabilities.
Итого
Назначение CAP_NET_RAW, CAP_NET_ADMIN и CAP_NET_BIND_SERVICE бинарнику Nmap позволяет запускать большинство продвинутых сканов без необходимости давать пользователю root или full sudo. Этот подход уменьшает площадь атаки по сравнению с предоставлением полного root-доступа, но требует внимательного управления доступом к бинарнику и контроля за использованием NSE. В качестве альтернативы рассмотрите ограниченные записи в sudoers или запуск в контейнере.
Ключевые рекомендации:
- Давайте только необходимые capabilities.
- Указывайте полный путь к nmap при использовании setcap.
- Ограничьте права на исполняемый файл и контролируйте скрипты NSE.
Спасибо за внимание. Если нужно, могу подготовить вариант инструкции для конкретного дистрибутива или шаблон sudoers для безопасного разрешения запуска nmap.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента