Как узнать, какой пользователь выполнил перезагрузку или выключение, когда активны несколько сеансов рабочего стола?

Вопрос или проблема

У меня есть установка Ubuntu, где несколько пользователей одновременно имеют сеансы рабочего стола, некоторые через XRDP, а другие непосредственно на VT7. Как я могу узнать, какой из этих пользователей инициировал завершение работы или перезагрузку, например, с помощью механизма XRDP?

XRDP SESSION

Или через всплывающее меню в системном трее?

TTY7 SESSION

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

Ни один из пользователей не будет использовать командную строку для выполнения завершения работы или перезагрузки.

Вы можете реализовать эту функцию самостоятельно, в данный момент её не существует.

Я подал запрос на добавление функции более года назад:

https://github.com/systemd/systemd/issues/27847

На самом деле над этим активно работают, но оно ещё не было объединено:

https://github.com/systemd/systemd/pull/28579

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

В openSUSE Leap 15.5 я нашел следующее после того, как выключил систему через меню GNOME:

polkitd[1721]: Оператор unix-session:2 успешно прошел аутентификацию как unix-user:root для получения ВРЕМЕННОЙ авторизации для действия org.freedesktop.login1.power-off для system-bus-name::1.65 [/usr/lib/gnome-session-binary --systemd-service --session=gnome] (принадлежит unix-user:windl)
...
systemd-logind[1826]: Система выключается.

Смотрите часть “принадлежит unix-user:“.

Ответ или решение

Как определить, какой пользователь инициировал перезагрузку или завершение работы в Ubuntu с несколькими активными сеансами

В вашем вопросе поднимается важная проблема, касающаяся идентификации пользователя, который инициировал завершение работы или перезагрузку системы в окружении с несколькими активными сеансами Ubuntu. В отличие от Windows, где такие события удобно отслеживаются через "Event Viewer", в Linux есть свои механизмы, позволяющие получить эту информацию.

1. Использование системных журналов

Когда пользователь инициирует перезагрузку или завершение работы через графический интерфейс, информация об этом записывается в системные журналы. Основные места, которые стоит проверить:

  • /var/log/syslog: Этот файл журналов содержит общую информацию о системных событиях, включая команды выключения и перезагрузки.
  • /var/log/auth.log: Здесь фиксируются события аутентификации, что может помочь определить, какой пользователь выполнил действие.

Откройте терминал и используйте команды:

grep "shutdown" /var/log/syslog
grep "shutdown" /var/log/auth.log

2. Политики авторизации (Polkit)

Как вы правильно отметили, пользователи могут инициировать завершение работы или перезагрузку, используя интерфейс, связанный с Polkit. В примере, который вы привели, мы видим записи, сообщающие о том, что оператор с указанием unix-user был аутентифицирован для выполнения действия. Чтобы идентифицировать пользователя, который инициировал завершение работы, можно выполнить запрос к этому журналу.

Пример строки:

polkitd[1721]: Оператор unix-session:2 успешно аутентифицирован как unix-user:root...

Здесь можно увидеть имя пользователя, который выполнил команду ‘power-off’ через графический интерфейс.

3. Использование journalctl

Система ведет журналы через systemd, что позволяет использовать journalctl для извлечения информации. Здесь можно сделать запросы к журналу системы:

journalctl | grep "system is powering down"

Это вернет вам записи, когда система начала процесс завершения работы. Обратите внимание, что такие записи также будут содержать идентификатор сессии (unix-session), и вы сможете сопоставить это с конкретными пользователями.

4. Адаптация существующих решений

Так как вопрос отслеживания пользователя, способствующего завершению работы системы, активно обсуждается и разрабатывается в сообществе systemd, возможно, стоит применить патч, который предоставляет требуемую функциональность. Вы можете ознакомиться с последними изменениями по следующей ссылке: Merge Request на систему.

Заключение

Отслеживание пользователей, которые инициируют перезагрузку или завершение работы системы в Ubuntu с несколькими активными сеансами, требует комбинации анализа системных журналов и применения инструментов журнала systemd. Используя вышеописанные методы, вы сможете идентифицировать пользователей и иметь контроль над действиями, проводимыми в вашей системе.

Если будут еще вопросы или нужна дополнительная информация по конкретным аспектам, пожалуйста, дайте знать.

Оцените материал
Добавить комментарий

Капча загружается...