Гид по технологиям

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

• 6 min read • Linux • Обновлено 01 Dec 2025
Запуск Nmap без sudo с Linux capabilities
Запуск Nmap без sudo с Linux capabilities

Изображение логотипа Nmap и графики сканирования сети

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-bin

Fedora/CentOS (dnf/yum):

sudo dnf install libcap

Arch Linux:

sudo pacman -S libcap

openSUSE:

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.
  • Доступ к бинарнику ограничен правами файловой системы для посторонних пользователей.

Небольшая методология тестирования

  1. На тестовой машине назначьте capabilities.
  2. Запустите nmap без sudo и выполните базовый SYN-скан.
  3. Проверьте, что результаты совпадают с запуском под sudo (контрольный тест).
  4. Проверьте отсутствие неожиданных прав доступа и проанализируйте логи.

Диаграмма принятия решения

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.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро