3

Я хотел бы сохранить историю входа и выхода пользователей в Linux.

То есть, дайте мне знать, если соответствующие системные вызовы используются для событий входа в систему и выхода из системы, чтобы я мог сделать это путем перехвата системных вызовов.

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

Кроме того, если в Linux уже есть механизм ведения истории входа / выхода, пожалуйста, дайте мне знать, где я могу получить подробную информацию.

Спасибо.

Счастливый

1 ответ1

5

Если подсистема аудита ядра включена, вы можете включить модуль PAM pam_loginuid.so , который будет создавать новый "сеанс аудита" для каждого входа в систему (путем записи в /proc /self /loginuid). Это будет зарегистрировано audd или systemd-journald.

Но, кроме того , нет никаких системных вызовов для входа в систему. Почти все делается в пользовательском пространстве (и немного разбросано), за исключением последнего переключения учетных данных (что, однако, также часто выполняется внутренними демонами). Не существует единого события "пользователь вошел в систему", по крайней мере, ни одного, которое было бы согласованным во всех дистрибутивах Linux.

Тем не менее, все вовлеченные компоненты этого уже кучки информации о регистрации. Например, вы можете найти журнал сеансов в /var/log/wtmp (прочитайте с помощью команд who <file> или last), и вы можете найти несколько сообщений, касающихся каждого входа в систему, в /var/log/secure или /var/log/auth.log или системный журнал:

sshd[3037]: Authorized to grawity, krb5 principal grawity@NULLROUTE.EU.ORG (krb5_kuserok)
sshd[3037]: Accepted gssapi-with-mic for grawity from 2a00:1a28:1157:143::2 port 55350 ssh2
kernel: audit: type=1006 audit(1441862594.054:16701): pid=3037 uid=0 old-auid=4294967295 auid=1000 old-ses=4294967295 ses=14576 res=1
sshd[3037]: pam_unix(sshd:session): session opened for user grawity by (uid=0)
systemd-logind[1531]: New session 14576 of user grawity.

Для мониторинга этого в вашей собственной программе есть несколько вариантов:

  • Если на целевых машинах запущен systemd, вы можете отслеживать сигналы D-Bus, отправляемые systemd-logind (SessionNew и SessionRemoved). ConsoleKit имеет похожий интерфейс.

  • Вы можете реализовать свой собственный модуль PAM, который отправляет уведомления через IPC. Это было бы похоже на этап "сеанса" pam_unix (который в настоящее время просто печатает вышеуказанное сообщение в системный журнал).

  • Вы можете inotify-наблюдать файлы "utmp" или "wtmp" (первый в (/var)/run/utmp в Linux, второй в /var/log/wtmp). Большинство сеансов входа в систему записываются там для просмотра с who или w . (utmp содержит текущее состояние, тогда как wtmp - это фактический журнал.)

  • Вы можете использовать audd, который будет регистрировать как сообщения ядра от pam_loginuid так и различные сообщения пользовательского пространства от демонов.

Не забудьте провести различие между "интерактивными" входами (gdm, sshd, login), "служебными" входами (imap, ftp) и "пакетными" сеансами (cron, systemd-user).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .