Linux 13Средняя

Ошибка доступа к порту 13: как исправить отказ в разрешении

В статье рассмотрим ошибку доступа при работе с портами в Linux (код 13). Вы узнаете, из-за чего она возникает и как исправить её за несколько минут.

Обновлено 7 июля 2026 г.
5-10 мин
Средняя
FixPedia Team
Применимо к:Ubuntu 22.04Debian 11CentOS 8

Что означает ошибка 13

Ошибка Permission denied (код 13 / EACCES) возникает, когда Linux-задача пытается привязаться к сетевому порту, но не имеет достаточных прав. Типичные сценарии: запуск приложения без root, попытка использовать порт ниже 1024 (80, 443), блокировка брандмауэром или политика SELinux/AppArmor.

Причины возникновения

  • Недостаток прав root – не-root-пользователь не может использовать «защищённые» порты (<1024).
  • Отсутствие необходимых capabilities – процесс не получил CAP_NET_BIND_SERVICE.
  • Блокировка брандмауэромiptables, firewalld или ufw блокируют входящий трафик на порт.
  • Порт уже занят – другой процесс уже слушает этот порт.
  • Политика SELinux/AppArmor – ограничения SELinux могут запретить приложению доступ к порту.
  • Неправильная конфигурация приложения – указан занятый или заблокированный порт.

Способы решения

Способ 1: Запустите приложение с правами root или sudo

  1. Откройте терминал.
  2. Выполните команду с sudo: sudo <your‑app>.
  3. Если приложение запускается через сервис, отредактируйте его unit-файл и добавьте User=root (или используйте sudo в ExecStart).

💡 Совет: Используйте sudo только для низких портов; для постоянного доступа рассмотрите setcap вместо полного root.

Способ 2: Используйте порт >1024 (измените конфигурацию)

  1. Откройте конфигурационный файл приложения (sudo nano /etc/yourapp.conf).
  2. Найдите строку port и измените её на порт >1024, например port=8080.
  3. Перезапустите сервис: sudo systemctl restart yourapp.

Способ 3: Откройте порт в брандмауэре

firewalld

sudo firewall-cmd --permanent --add-service=http   # для порта 80
sudo firewall-cmd --reload

iptables

sudo iptables -I INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables-save > /etc/iptables/rules.v4

⚠️ Важно: После изменения правил перезапустите firewalld (sudo systemctl restart firewalld) или iptables (sudo systemctl restart iptables).

Способ 4: Освободите занятый порт

  1. Определите процесс: sudo lsof -i :80.
  2. Запишите PID (123456).
  3. Завершите его: sudo kill -9 123456.
  4. Повторите попытку запуска приложения.

Способ 5: Добавьте необходимые права с помощью setcap

  1. Убедитесь, что libcap2-bin установлен (sudo apt install libcap2-bin).
  2. Добавьте capability: sudo setcap 'cap_net_bind_service=+ep' /path/to/binary.
  3. Проверьте: getcap /path/to/binary — должно показать cap_net_bind_service=+ep.

Профилактика

  • Используйте порты >1024 для пользовательских сервисов – избегайте необходимости в root.
  • Настройте сервисы через systemd с явным указанием пользователя и группы.
  • Регулярно проверяйте брандмауэр (sudo firewall-cmd --list-all, sudo iptables -L -n).
  • Мониторьте занятые порты (sudo ss -tulpn) и устраняйте конфликты.
  • Включите SELinux/AppArmor в режиме « enforcing» и ведите его логи (audit.log).
  • Документируйте конфигурацию портов и храните резервные копии в VCS для быстрого восстановления.

Часто задаваемые вопросы

Почему возникает ошибка доступа к порту при запуске сервиса?
Как проверить, есть ли у меня права администратора для работы с портами?
Что делать, если порт уже занят другим процессом?
Как предотвратить повторение ошибки после перезагрузки системы?

Полезное

Проверьте права и попробуйте запустить с sudo
Используйте порт >1024 (измените конфигурацию)
Откройте порт в firewalld или iptables
Освободите занятый порт
Добавьте необходимые права с помощью setcap