Вопрос или проблема
У меня есть установка Ubuntu, где несколько пользователей одновременно имеют сеансы рабочего стола, некоторые через XRDP, а другие непосредственно на VT7. Как я могу узнать, какой из этих пользователей инициировал завершение работы или перезагрузку, например, с помощью механизма XRDP?
Или через всплывающее меню в системном трее?
Например, как в системе 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
. Используя вышеописанные методы, вы сможете идентифицировать пользователей и иметь контроль над действиями, проводимыми в вашей системе.
Если будут еще вопросы или нужна дополнительная информация по конкретным аспектам, пожалуйста, дайте знать.