Если подсистема аудита ядра включена, вы можете включить модуль 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).