Skip to content
🚀 20% OFF for new customers on Linux and Windows servers! Code: ILK20  |  Order Now →
shield Безопасность и харднинг

Что такое Linux Capabilities? Руководство по открытию портов без прав root

Узнайте, как открывать привилегированные порты без прав root с помощью Linux capabilities. Мы подробно рассказываем об этом методе, снижающем риски безопасности, с примерами.

person
Editör
(Обновлено: 10 сен 2026) schedule 3 мин чтения visibility 14 просмотров

Когда речь идет о безопасности серверов Linux, ограничение ненужных привилегий root является одним из важнейших шагов. Но что делать, если вашему приложению необходимо прослушивать порт с номером меньше 1024, а вы не хотите запускать его от root? Здесь на помощь приходят Linux capabilities. В этой статье мы пошагово расскажем, как открыть порт без прав root, используя систему возможностей Linux.

Что такое Linux Capabilities?

В традиционных Unix-моделях проверялось, является ли процесс root'ом или нет. Root имел неограниченные права на всю систему, а обычный пользователь был сильно ограничен. Linux capabilities разбивают эту черно-белую картину на мелкие независимые единицы. Например, возможность CAP_NET_BIND_SERVICE позволяет процессу привязываться к портам с номером меньше 1024, не давая других root-привилегий.

Эта система идеально подходит для таких служб, как веб-серверы, DNS-серверы или базы данных. Если ваше приложение использует порты 80, 443 или 53, вы можете запустить его от обычного пользователя с помощью capabilities, предотвращая захват всей системы злоумышленником в случае уязвимости.

Как открыть порт без прав root?

1. Назначение возможности бинарному файлу

Чтобы дать приложению определенную возможность, используем команду setcap. Например, добавим CAP_NET_BIND_SERVICE для бинарного файла nginx:

sudo setcap 'cap_net_bind_service=+ep' /usr/sbin/nginx

Эта команда позволяет nginx привязываться к порту 80, даже если он запущен от обычного пользователя. Параметр +ep указывает, что возможность должна присутствовать как в эффективном (effective), так и в разрешенном (permitted) наборах.

2. Предоставление возможности работающему процессу

В некоторых случаях может потребоваться предоставить возможность уже работающему процессу. Для этого можно использовать capsh или prctl. Однако самый практичный способ — использовать ambient возможности при запуске приложения. Например, в файле службы systemd:

[Service] AmbientCapabilities=CAP_NET_BIND_SERVICE User=nginx ExecStart=/usr/sbin/nginx -g 'daemon off;'

Таким образом, nginx будет работать от пользователя nginx, но с правом привязки к порту 80.

Важные моменты и советы по безопасности

  • Давайте только те возможности, которые нужны. Например, CAP_NET_ADMIN дает гораздо более широкие права; используйте его только при реальной необходимости.
  • Запретите неавторизованным пользователям использовать setcap. Только root или пользователи с sudo должны иметь эту возможность.
  • Регулярно проверяйте назначенные возможности. С помощью команды getcap можно просмотреть, какие файлы обладают какими возможностями:
getcap -r / 2>/dev/null

Практический пример: простой HTTP-сервер на Python

Предположим, у вас есть простой HTTP-сервер на Python, работающий на порту 80. Обычно вы не можете запустить его без root. Вот шаги:

  1. Назначьте возможность интерпретатору Python: sudo setcap 'cap_net_bind_service=+ep' /usr/bin/python3
  2. Запустите сервер от обычного пользователя: python3 -m http.server 80
  3. Теперь порт 80 прослушивается без необходимости root.

Предупреждение: Этот метод дает права всем скриптам Python, поэтому будьте осторожны. Лучше запускать только нужный скрипт от специального пользователя.

Обязательно ли использовать Capabilities?

Конечно, существуют альтернативы: authbind, перенаправление портов через iptables или сокетная передача systemd. Однако capabilities — это самый прямой и современный подход. Особенно технологии контейнеров (Docker, Podman) основаны на возможностях. В Docker-контейнерах аналогичные операции выполняются с помощью --cap-add.

Заключение

Linux capabilities — незаменимый инструмент для повышения безопасности сервера. Ограничивая права root, вы сводите к минимуму последствия возможного взлома. Особенно открытие портов с помощью CAP_NET_BIND_SERVICE — один из наиболее часто используемых методов после настройки брандмауэра.

HostingServer.com.tr продолжает делиться актуальными методами для поддержания безопасности и производительности ваших серверов. Если у вас есть вопросы, ждем их в комментариях!

Поделиться статьёй

Поделиться LinkedIn WhatsApp

Похожие статьи