Rocky Linux Rocky Linux

Rocky Linux: после смены пользователя ломаются права на сокет

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

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

После перевода приложения на отдельную учётную запись другой процесс не может подключиться к Unix-сокету. Проверяют реального создателя сокета, разрешения родительского каталога и socket activation.

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

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

После перевода приложения на отдельную учётную запись другой процесс не может подключиться к Unix-сокету. Проверяют реального создателя сокета, разрешения родительского каталога и socket activation. Rocky Linux с приложением, использующим Unix-domain socket для связи процессов; пользователь службы изменён недавно.

#Основные причины: как отличить одну от другой

Возможная причинаКак узнатьЧто делать
Сокет создаёт другой UIDНа socket остаётся прежний владелец после смены User=stat показывает root или старую группуИсправить пользователя создающей службы и штатные параметры SocketMode
Недоступен родительский каталогКлиенту не хватает x на /run/папкеnamei -l показывает закрытую цепочкуНазначить доступ только требуемой группе
Сокет управляется socket unitsystemd создаёт файл раньше службыsystemctl cat *.socket показывает SocketUser/SocketGroupНастраивать socket unit вместо ручного chmod

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

  1. Шаг 1. Найдите точный путь сокета из сообщения клиентаВ терминале прочитайте журнал ошибки приложения и убедитесь, что речь о Unix socket, а не TCP-порту. Путь вида /run/имя/сервис.sock часто пересоздаётся при каждой загрузке.
  2. Терминал Rocky Linux; административные права не обязательны
    Linux · Терминал (Bash)Команда
    Терминал Rocky Linux; административные права не обязательны. Диагностика или адресная проверка; выполните только при соответствии условиям шага.
    ss -xlpn | head -50
    systemctl --failed
  1. Шаг 2. Сравните права сокета с UID клиентаВставьте реальный путь из сообщения. stat показывает владельца и режим сокета; namei — права прохода по всем каталогам. Наличие chmod 660 у сокета бесполезно, если каталог закрыт.
  2. Терминал Rocky Linux; административные права не обязательны
    Linux · Терминал (Bash)Команда
    Терминал Rocky Linux; административные права не обязательны. Диагностика или адресная проверка; выполните только при соответствии условиям шага.
    SOCK="/run/имя/сервис.sock"
    stat -c "%a %U:%G %n" "$SOCK"
    namei -l "$SOCK"
  1. Шаг 3. Узнайте, кто именно создаёт сокетСопоставьте серверную службу и приложение-клиент, их User/Group. Если используется systemd socket activation, сокет создаёт .socket unit, и смена владельца у файла вручную пропадёт после перезапуска.
  2. Терминал Rocky Linux; административные права не обязательны
    Linux · Терминал (Bash)Команда
    Терминал Rocky Linux; административные права не обязательны. Диагностика или адресная проверка; выполните только при соответствии условиям шага.
    systemctl list-sockets --all
    systemctl status имя.socket --no-pager
  1. Шаг 4. Проверьте определения socket и serviceИзучите SocketMode, SocketUser, SocketGroup и ListenStream, а также User и RuntimeDirectory родительского service. Не назначайте на весь /run права 777: это временная ФС, права должны создаваться штатными механизмами.
  2. Терминал Rocky Linux; административные права не обязательны
    Linux · Терминал (Bash)Команда
    Терминал Rocky Linux; административные права не обязательны. Диагностика или адресная проверка; выполните только при соответствии условиям шага.
    systemctl cat имя.socket
    systemctl cat имя.service
  1. Шаг 5. Проверьте дополнительные ограничения SELinuxЕсли обычные UNIX-права подходят, но подключение запрещено, проверьте актуальный отказ AVC. Не отключайте SELinux и не переводите все процессы в unconfined; настройте только проверенный тип сокета.
  2. Терминал Rocky Linux; нужны административные права
    Linux · Терминал (Bash)КомандаНужен sudo
    Терминал Rocky Linux; нужны административные права. Диагностика или адресная проверка; выполните только при соответствии условиям шага.
    getenforce
    SOCK="/run/имя/сервис.sock"
    ls -lZ "$SOCK"
    command -v ausearch && sudo ausearch -m AVC -ts recent | tail -30 || true
  1. Шаг 6. Исправьте конфигурацию, создающую сокетВыберите именно socket unit, если он управляет файлом. В drop-in добавляйте только доказанно нужные SocketGroup/SocketMode и сохраняйте исходный вариант. Если приложение создаёт сокет самостоятельно, проверьте его собственный umask и конфигурацию.
  2. Терминал Rocky Linux; нужны административные права
    Linux · Терминал (Bash)С осторожностьюНужен sudo
    Терминал Rocky Linux; нужны административные права. Меняет настройки/состояние службы: сначала копия и возможность отката.
    sudo systemctl edit имя.socket

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

  1. Шаг 7. Проверьте новый сокет после штатного перезапускаВ согласованное окно перезапустите конкретный сокет и сервис согласно порядку приложения. Не удаляйте /run/*.sock вручную при активном сервере. Снова проверьте stat/namei и реальное подключение клиента.
  2. Терминал Rocky Linux; нужны административные права
    Linux · Терминал (Bash)С осторожностьюНужен sudo
    Терминал Rocky Linux; нужны административные права. Меняет настройки/состояние службы: сначала копия и возможность отката.
    sudo systemctl daemon-reload
    sudo systemctl restart имя.socket
    systemctl status имя.socket имя.service --no-pager
    ss -xlpn | grep "сервис.sock" || true

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

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

Клиент под своим UID подключается к правильному сокету, права сохраняются после нового старта службы и перезагрузки; другим пользователям не выдаётся лишний доступ.

#Если предложенный способ не сработал

Если сокет исчезает, проверьте порядок запуска и RuntimeDirectory, затем журнал создающего процесса. Не меняйте владельца самого сокета вручную как постоянное исправление.

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

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

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