systemd Linux с systemd (конкретный дистрибутив и версия могут отличаться)

Systemd сообщает ошибку доступа к сокету

  • Обновлено
  • Чтение ≈ 3 минуты
  • Нужны права администратора

Краткий ответ

Служба не может открыть Unix-сокет или подключиться к нему. Это не обязательно ошибка network: у файлового сокета свои права, владелец, каталог и активатор *.socket.

В этой статье
  1. Как распознать проблему и где применимы действия
  2. Возможные причины и диагностические признаки
  3. Пошаговая диагностика и исправление
  4. Как проверить, что проблема действительно устранена
  5. Если результат не получен

#Как распознать проблему и где применимы действия

Служба не может открыть Unix-сокет или подключиться к нему. Это не обязательно ошибка network: у файлового сокета свои права, владелец, каталог и активатор *.socket. Перед выполнением определите название программы, редакцию Linux и управляющий сервис. Значения примеров в командах не являются готовой конфигурацией вашего устройства.

#Возможные причины и диагностические признаки

Возможная причинаКак узнатьЧто делать
Доступ к файлу сокета закрытОшибка EACCES при connect или bindПроверить владельца, режим файла и каталог
Сокет занят другой службойЖурнал содержит Address already in useОпределить владельца через ss, не удалять файл наугад
Сокет создаёт отдельный .socket unitЕсть активный сокет-юнит с ListenStream и SocketModeМенять настройки владельца в socket unit, не в service

#Пошаговая диагностика и исправление

  1. Шаг 1. Уточните сокет по журналуЗапишите точный путь /run/..., упомянутый в сообщении. Permission denied и Address already in use требуют противоположных действий. Если журнал содержит только системный код, включите предусмотренную приложением диагностику.
  2. Терминал Linux на сервере/клиенте, указанном в шаге
    Linux · Терминал (Bash)Команда
    Терминал Linux на сервере/клиенте, указанном в шаге. Обычно достаточно прав пользователя; имя.service, пути, адрес server.example.org, имена пользователей и другие демонстрационные значения необходимо заменить фактическими. После команды сравните результат с описанием шага; при ошибке остановитесь и выясните её причину.
    UNIT='имя.service'; journalctl -b -u "$UNIT" -n 90 --no-pager
  1. Шаг 2. Проверьте, есть ли активатор socketИмя socket-юнита может отличаться от имени service. Список сокетов показывает LISTEN и активируемую службу; не перезапускайте незнакомые системные сокеты.
  2. Терминал Linux на сервере/клиенте, указанном в шаге
    Linux · Терминал (Bash)Команда
    Терминал Linux на сервере/клиенте, указанном в шаге. Обычно достаточно прав пользователя; имя.service, пути, адрес server.example.org, имена пользователей и другие демонстрационные значения необходимо заменить фактическими. После команды сравните результат с описанием шага; при ошибке остановитесь и выясните её причину.
    systemctl list-sockets --all --no-pager
  1. Шаг 3. Определите владельца открытого сокетаКоманда ss -xlpn показывает локальные Unix-сокеты и процессы. Для подробных PID нужны права администратора. Не удаляйте файл сокета из /run, пока в нём работает процесс. Команды sudo или sudoedit выполняются с полномочиями администратора; если sudo не установлен, используйте разрешённую административную сессию.
  2. Терминал Linux на сервере/клиенте, указанном в шаге
    Linux · Терминал (Bash)КомандаНужен sudo
    Терминал Linux на сервере/клиенте, указанном в шаге. Нужны права администратора; имя.service, пути, адрес server.example.org, имена пользователей и другие демонстрационные значения необходимо заменить фактическими. После команды сравните результат с описанием шага; при ошибке остановитесь и выясните её причину.
    sudo ss -xlpn
  1. Шаг 4. Посмотрите права и право проходаПодставьте найденный путь. У каталога сокета должен быть x для учётной записи сервиса; права на конечный файл сами по себе не решают отсутствие прохода.
  2. Терминал Linux на сервере/клиенте, указанном в шаге
    Linux · Терминал (Bash)Команда
    Терминал Linux на сервере/клиенте, указанном в шаге. Обычно достаточно прав пользователя; имя.service, пути, адрес server.example.org, имена пользователей и другие демонстрационные значения необходимо заменить фактическими. После команды сравните результат с описанием шага; при ошибке остановитесь и выясните её причину.
    namei -l /run/имя-программы/приложение.sock
    stat -c '%A %U:%G %n' /run/имя-программы/приложение.sock
  1. Шаг 5. Проверьте параметры socket unitЕсли сокетом управляет systemd, проверьте ListenStream, SocketUser, SocketGroup и SocketMode. Изменять надо конкретную настройку socket-юнита через drop-in, если это предусмотрено архитектурой приложения.
  2. Терминал Linux на сервере/клиенте, указанном в шаге
    Linux · Терминал (Bash)Команда
    Терминал Linux на сервере/клиенте, указанном в шаге. Обычно достаточно прав пользователя; имя.service, пути, адрес server.example.org, имена пользователей и другие демонстрационные значения необходимо заменить фактическими. После команды сравните результат с описанием шага; при ошибке остановитесь и выясните её причину.
    systemctl cat имя.socket
    systemctl show имя.socket -p ActiveState -p Listen
  1. Шаг 6. Проверьте доступ от пользователя сервисаПосле точечных разрешённых изменений прав либо корректировки socket unit выполните контролируемый restart затронутого компонента. Это может разорвать соединения; заранее согласуйте простой. Команды sudo или sudoedit выполняются с полномочиями администратора; если sudo не установлен, используйте разрешённую административную сессию.
  2. Терминал Linux на сервере/клиенте, указанном в шаге
    Linux · Терминал (Bash)С осторожностьюНужен sudo
    Терминал Linux на сервере/клиенте, указанном в шаге. Нужны права администратора; имя.service, пути, адрес server.example.org, имена пользователей и другие демонстрационные значения необходимо заменить фактическими. После команды сравните результат с описанием шага; при ошибке остановитесь и выясните её причину.
    sudo systemctl restart имя.socket
    systemctl status имя.socket --no-pager

    Команда может изменить состояние системы или её настройки. Проверьте параметры и последствия перед запуском.

#Как проверить, что проблема действительно устранена

Повторите операцию приложения, которая раньше возвращала Permission denied. Если ошибка осталась, изучите SELinux/AppArmor и ограничители sandboxing (ProtectSystem, RuntimeDirectory) — не отключайте их глобально.

#Если результат не получен

Вернитесь к самому раннему отличающемуся результату диагностики и проверьте точный текст ошибки, текущую загрузку и фактическую версию программы. Не повторяйте опасную команду с другими правами наугад. Если это рабочий сервер, передайте администратору обезличенные отрывки журнала за момент сбоя и уже выполненные действия.

Так эту ошибку тоже называют

Источники и обновления

Последнее обновление статьи: 2 ноября 2026. Версии программ и интерфейсы меняются — если шаги не совпадают с вашей версией, сверяйтесь с документацией производителя.