после смены пользователя ломаются права на сокет — как найти причину и исправить

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

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

После перевода службы Arch Linux на другого пользователя клиент больше не может подключиться к Unix-сокету. Нужно отличить сокет, который создаёт сама программа, от сокета, создаваемого systemd через .socket: права и настройки для них различаются.

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

#Симптом и границы применимости

После перевода службы Arch Linux на другого пользователя клиент больше не может подключиться к Unix-сокету. Нужно отличить сокет, который создаёт сама программа, от сокета, создаваемого systemd через .socket: права и настройки для них различаются.

#Возможные причины и признаки

Возможная причинаКак узнатьЧто делать
Сокет принадлежит прежней учётной записиПосле смены пользователя файловые права не позволяют новому клиенту подключиться.stat показывает старую группу и режим 600/660.Изменить способ создания сокета или ограниченную группу доступа.
Файл создаёт systemd.socketВладелец и режим устанавливаются в SocketUser/SocketGroup/SocketMode.systemctl list-sockets показывает unit для этого пути.Настроить .socket, не трогая файлы во время работы.
Каталог недоступенДаже при верном режиме сокета не хватает права прохода через родительский каталог.namei -l отмечает каталог без x для клиента.Исправить каталог/ACL для согласованной группы.

#Подробная диагностика и безопасные действия

  1. 1. Определите конкретный путь к сокетуВ терминале узнайте имя сокета по журналу приложения. Подставьте реальный путь вместо /run/ПРОГРАММА/app.sock. Если файла нет, проблема может заключаться не в разрешениях, а в том, что сервер не создал endpoint.
  2. Диагностическая команда в терминале Arch Linux, без изменения настроек
    Linux · Терминал (Bash)Команда
    Диагностическая команда в терминале Arch Linux, без изменения настроек.
    ss -xlpn
    systemctl list-sockets --all --no-pager
  1. 2. Посмотрите владельца, группу и режимstat показывает тип socket, права и учётную запись; namei -l выявит недоступный родительский каталог. Обычный ls не отображает эффективные ACL, поэтому при необходимости добавьте getfacl.
    Linux · Терминал (Bash)Команда
    Диагностическая команда в терминале Arch Linux, без изменения настроек.
    stat -c "%F %U:%G %a %n" /run/ПРОГРАММА/app.sock
    namei -l /run/ПРОГРАММА/app.sock
  1. 3. Установите, кто создаёт сокетЕсли он перечислен в systemctl list-sockets, откройте соответствующую .socket единицу и настройки SocketUser/SocketGroup/SocketMode. Если не перечислен, сокет вероятно создаёт само приложение; его режим нужно менять в настройках приложения, а не systemd.
    Linux · Терминал (Bash)Команда
    Диагностическая команда в терминале Arch Linux, без изменения настроек.
    systemctl cat ИМЯ.socket
    systemctl show ИМЯ.socket -p Listen -p SocketUser -p SocketGroup -p SocketMode
  1. 4. Проверьте группы обоих участниковПодставьте фактические имена процесса-сервера и процесса-клиента; id показывает группы каждой учётной записи. Для подключения через каталог необходимы x на каждом предке и разрешённый доступ к самому сокету.
  2. Диагностическая команда в терминале Arch Linux, без изменения настроек
    Linux · Терминал (Bash)Команда
    Диагностическая команда в терминале Arch Linux, без изменения настроек.
    id ПОЛЬЗОВАТЕЛЬ_СЕРВЕРА
    id ПОЛЬЗОВАТЕЛЬ_КЛИЕНТА
    getfacl /run/ПРОГРАММА/app.sock
  1. 5. Сверьте настройки процесса и запреты sandboxВ unit службы посмотрите User, Group, RuntimeDirectory, UMask; в пользовательском окружении различайте --user и системный .socket. При ProtectSystem или PrivateTmp socket path может быть недоступен по другой причине.
  2. Диагностическая команда в терминале Arch Linux, без изменения настроек
    Linux · Терминал (Bash)Команда
    Диагностическая команда в терминале Arch Linux, без изменения настроек.
    systemctl cat ИМЯ.service
    systemctl show ИМЯ.service -p User -p Group -p RuntimeDirectory -p UMask
  1. 6. Выполните безопасную точечную правкуЕсли сокет создаётся systemd, настройте SocketGroup/SocketMode для одной .socket единицы через drop-in и ограниченную группу, заранее согласовав, кто получит доступ. Если сокет создаёт приложение, найдите его официальную настройку umask/socket permissions. Команды chmod 777 здесь недопустимы.
  2. Дополнительная команда по теме
    Linux · Терминал (Bash)С осторожностьюНужен sudo
    Изменение только параметров разрешённого сокета; дополнительный доступ предоставляет полномочия клиенту.
    sudo systemctl edit ИМЯ.socket
    sudo systemctl daemon-reload
    systemctl cat ИМЯ.socket

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

  1. 7. Проверяйте после согласованного перезапускаПерезапуск .socket способен оборвать новые и существующие соединения, а .service — активные операции. Запланируйте его, затем проверьте режим и подключение настоящим клиентом. При неуспехе верните старый drop-in и исследуйте журнал.
  2. Диагностическая команда в терминале Arch Linux, без изменения настроек
    Linux · Терминал (Bash)Команда
    Диагностическая команда в терминале Arch Linux, без изменения настроек.
    stat -c "%U:%G %a %n" /run/ПРОГРАММА/app.sock
    journalctl -b -u ИМЯ.socket --no-pager -n 50

#Как понять, что проблема устранена

Повторите исходное действие, из-за которого возникла неисправность, и сверяйте не только код завершения команды, но и прикладной результат. Сохраните вывод последней диагностической команды и записи журнала до и после исправления. Если ошибка повторяется, верните только изменённую настройку из резервной копии и передайте специалисту точный симптом, имя программы/службы, версию системы и необходимые фрагменты журнала без паролей и закрытых ключей.

#Что делать, если не помогло

Не применяйте случайные советы для другого дистрибутива: в Arch Linux особенно опасны частичные обновления пакетов, а в Rocky Linux — отключение SELinux или неконтролируемый перезапуск системных служб. Остановитесь после неуспешного безопасного шага, зафиксируйте фактическое сообщение и вернитесь к соответствующей причине. Для загрузки, разделов диска и единственного удалённого подключения используйте резервную копию и локальную консоль.

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

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

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