Вопрос или проблема
У меня возникла проблема в моей системе, которая работает на CentOS Linux release 7.9.2009 (Core)
, в течение нескольких дней, и я еще не нашел причину.
Я впервые заметил эту проблему, когда попытался перезапустить сессию VNC:
$ systemctl restart vncserver@:46
Авторизация недоступна. Проверьте, работает ли служба polkit, или см. отладочные сообщения для получения дополнительной информации.
Вот что я наблюдаю, когда проверяю состояние polkit:
$ systemctl status polkit.service -l
● polkit.service - Менеджер авторизации
Loaded: загружен (/usr/lib/systemd/system/polkit.service; статический; предпоставка от поставщика: включена)
Active: активен (работает) с Вт 2025-03-04 15:19:53 +03; 1 день 20ч назад
Docs: man:polkit(8)
Main PID: 1398 (polkitd)
Tasks: 7
Memory: 18.5M
CGroup: /system.slice/polkit.service
└─1398 /usr/lib/polkit-1/polkitd --no-debug
Mar 04 15:22:02 centos7-server polkitd[1398]: Зарегистрирован агент аутентификации для unix-сессии:c53 (системное имя автобуса :1.2330 [/usr/bin/gnome-shell], путевой объект /org/freedesktop/PolicyKit1/AuthenticationAgent, локаль en_US.UTF-8)
Mar 04 15:22:02 centos7-server polkitd[1398]: Зарегистрирован агент аутентификации для unix-сессии:c52 (системное имя автобуса :1.2317 [/usr/bin/gnome-shell], путевой объект /org/freedesktop/PolicyKit1/AuthenticationAgent, локаль en_US.UTF-8)
Mar 04 15:22:04 centos7-server polkitd[1398]: Зарегистрирован агент аутентификации для unix-сессии:c54 (системное имя автобуса :1.2351 [/usr/bin/gnome-shell], путевой объект /org/freedesktop/PolicyKit1/AuthenticationAgent, локаль en_US.UTF-8)
Mar 05 12:00:29 centos7-server polkitd[1398]: Отозван агент аутентификации для unix-сессии:c47 (системное имя автобуса :1.2251, путевой объект /org/freedesktop/PolicyKit1/AuthenticationAgent, локаль en_US.UTF-8) (отключен от автобуса)
Mar 05 12:00:42 centos7-server polkitd[1398]: Зарегистрирован агент аутентификации для unix-сессии:c55 (системное имя автобуса :1.3555 [/usr/bin/gnome-shell], путевой объект /org/freedesktop/PolicyKit1/AuthenticationAgent, локаль en_US.UTF-8)
Mar 06 11:05:28 centos7-server polkitd[1398]: Отозван агент аутентификации для unix-сессии:c28 (системное имя автобуса :1.339, путевой объект /org/freedesktop/PolicyKit1/AuthenticationAgent, локаль en_US.UTF-8) (отключен от автобуса)
Mar 06 11:05:38 centos7-server polkitd[1398]: Зарегистрирован агент аутентификации для unix-сессии:c56 (системное имя автобуса :1.4049 [/usr/bin/gnome-shell], путевой объект /org/freedesktop/PolicyKit1/AuthenticationAgent, локаль en_US.UTF-8)
Mar 06 11:06:12 centos7-server polkitd[1398]: Зарегистрирован агент аутентификации для unix-процесса:7965:15758743 (системное имя автобуса :1.4094 [/usr/bin/pkttyagent --notify-fd 5 --fallback], путевой объект /org/freedesktop/PolicyKit1/AuthenticationAgent, локаль en_US.UTF-8)
Mar 06 11:06:14 centos7-server polkitd[1398]: Отозван агент аутентификации для unix-процесса:7965:15758743 (системное имя автобуса :1.4094, путевой объект /org/freedesktop/PolicyKit1/AuthenticationAgent, локаль en_US.UTF-8) (отключен от автобуса)
Mar 06 11:06:19 centos7-server polkitd[1398]: Зарегистрирован агент аутентификации для unix-сессии:c57 (системное имя автобуса :1.4101 [/usr/bin/gnome-shell], путевой объект /org/freedesktop/PolicyKit1/AuthenticationAgent, локаль en_US.UTF-8)
После этого я проверил целостность журнала, и все выглядит нормально:
$ journalctl --verify
PASS: /run/log/journal/7856e0316151441fad566d51612f4a67/system.journal
Затем я проверил системные журналы с journalctl -xe
и заметил, что там отмечены некоторые ошибки:
Mar 05 07:46:08 centos7-server xdg-desktop-por[35472]: ошибка: GDBus.Error:org.freedesktop.DBus.Error.LimitsExceeded: Достигнуто максимальное количество активных соединений
Mar 05 07:46:18 centos7-server dbus[1350]: [system] Не удалось активировать службу 'org.freedesktop.hostname1': время ожидания истекло
Mar 05 07:46:24 centos7-server dbus[1350]: [system] Соединение не аутентифицировалось вовремя, отключается (auth_timeout=30000ms, elapsed: 30006ms)
...
:Mar 05 12:19:23 centos7-server gnome-session[15079]: gnome-session-binary[15079]: ПРЕДУПРЕЖДЕНИЕ: Невозможно заблокировать систему: GDBus.Error:org.freedesktop.DBus.Error.AccessDenied: Доступ запрещен
:Mar 05 12:20:47 centos7-server gnome-session-binary[5917]: ПРЕДУПРЕЖДЕНИЕ: Невозможно заблокировать систему: GDBus.Error:org.freedesktop.DBus.Error.AccessDenied: Доступ запрещен
...
Mar 06 11:16:53 centos7-server dbus[1350]: [system] Соединение не аутентифицировалось вовремя, отключается (auth_timeout=30000ms, elapsed: 30006ms)
Mar 06 11:16:53 centos7-server sshd[7677]: pam_systemd(sshd:session): Не удалось создать сессию: Соединение разорвано
Вот что я наблюдаю, когда проверяю /usr/share/dbus-1/session.conf:
<!-- лимиты памяти равны 1G, а не, скажем, 4G, потому что они не могут превышать максимум для 32-битных знаковых целых чисел -->
<limit name="max_incoming_bytes">1000000000</limit>
<limit name="max_incoming_unix_fds">250000000</limit>
<limit name="max_outgoing_bytes">1000000000</limit>
<limit name="max_outgoing_unix_fds">250000000</limit>
<limit name="max_message_size">1000000000</limit>
<!-- Мы не переопределяем max_message_unix_fds здесь, так как лимит в ядре также относительно низок -->
<limit name="service_start_timeout">120000</limit>
<limit name="auth_timeout">240000</limit>
<limit name="pending_fd_timeout">150000</limit>
<limit name="max_completed_connections">900</limit>
<limit name="max_incomplete_connections">92</limit>
<limit name="max_connections_per_user">100000</limit>
<limit name="max_pending_service_starts">10000</limit>
<limit name="max_names_per_connection">50000</limit>
<limit name="max_match_rules_per_connection">50000</limit>
<limit name="max_replies_per_connection">50000</limit>
Не могли бы вы помочь мне понять, в чем может быть проблема?
Ответ или решение
Обнаружение и устранение проблем с системными сервисами в CentOS 7 требует внимания к деталям и методического подхода. Приведённые симптомы: невозможность перезапуска сессии VNC, сообщения об ошибках авторизации через polkit и различные проблемы с D-Bus, указывают на возможные проблемы с конфигурацией системы и её службами. Рассмотрим потенциальные причины и пути их решения с учётом предоставленной информации.
Теория
CentOS 7 использует systemd для управления системными и сетевыми службами, а также для отслеживания их состояния. Политика авторизации в системе обеспечивается через polkit (PolicyKit), который предоставляет контроль над предоставлением привилегий для управления системными сервисами от имени пользователя.
D-Bus – это система межпроцессного взаимодействия, которая используется в Linux для предоставления коммуникационных каналов между системными службами и приложениями. Ошибки D-Bus могут быть вызваны превышением лимитов на соединения или проблемами с аутентификацией пользователя.
Пример
В предоставленном примере, команда для перезапуска VNC сервера вызывает ошибку авторизации, несмотря на то что служба polkit активна. Логирование также показывает ошибки, связанные с D-Bus, такие как "LimitsExceeded" и "Permission denied". Кроме того, конфигурация /usr/share/dbus-1/session.conf
демонстрирует высокие лимиты для различных параметров, что теоретически может привести к переполнению, особенно если другие приложения также активно используют D-Bus.
Решение
Шаг 1: Проверка состояния Polkit и D-Bus
-
Убедитесь, что службы
polkit
иdbus
правильно запущены и функционируют. Попробуйте перезапустить их, чтобы увидеть, не исчезли ли ошибки:systemctl restart polkit.service systemctl restart dbus.service
-
Проверьте логи для получения дополнительной информации:
journalctl -u polkit.service journalctl -u dbus.service
Шаг 2: Оптимизация конфигурации D-Bus
-
На основе конфигурационных параметров, описанных в
session.conf
, снижение некоторых лимитов может помочь избежать переполнения. Понизьте значенияmax_incoming_bytes
,max_outgoing_bytes
и других параметров в разумных пределах в зависимости от средней нагрузки на систему. -
Проверьте
/var/log/messages
и другие системные логи на наличие частых ошибок подключения и аутентификации.
Шаг 3: Аутентификация и права доступа
-
Перенастройте polkit и убедитесь в корректной настройке прав доступа. Это может включать в себя изменение или создание конфигурационных файлов
.policy
в/etc/polkit-1/rules.d/
для предоставления нужных разрешений процесса, который вызывает ошибку. -
Убедитесь, что пользователи, запускающие службу VNC, имеют достаточные права и включены в нужные группы для доступа к данным ресурсам.
Шаг 4: Выявление и устранение ошибок D-Bus
-
Проверьте, нет ли незавершённых или зависших процессов, использующих D-Bus. Это можно сделать с помощью следующей команды:
dbus-monitor
-
Убедитесь, что каждый процесс правильно завершает свои соединения с D-Bus в тех случаях, когда это требуется.
-
Попробуйте уменьшить количество одновременно подключённых к D-Bus клиентов, чтобы предотвратить "LimitsExceeded". Это может включать в себя оптимизацию скриптов или служб, которые периодически обращаются к D-Bus.
Заключение
Исправление данных ошибок потребует комплексного подхода к диагностике как на уровне отдельных служб, так и всей системы в целом. Важно следить за актуальностью системных обновлений, если это возможно, так как это часто решает многие системные проблемы. Тщательное изучение системных логов и корректная настройка конфигураций должны привести к успешному решению проблем с сервисами на сервере, работающем под управлением CentOS 7.