Se o subsistema de auditoria do kernel estiver habilitado, você poderá habilitar pam_loginuid.so Módulo PAM, que criará uma nova "sessão de auditoria" para cada login (escrevendo para / proc / self / loginuid). Isso será registrado pelo auditd ou systemd-journald.
Mas além disso há não são qualquer chamada de sistema de "login". Quase tudo é feito no espaço do usuário (e um pouco disperso), exceto pela troca final de credencial (que também é freqüentemente feita por daemons internamente). Não há um único evento "usuário efetuou login", pelo menos nenhum que seria consistente em todas as distribuições do Linux.
No entanto, todos os componentes envolvidos Faz já log de montes de informações. Por exemplo, você pode encontrar um log de sessão /var/log/wtmp (leia com os comandos who <file> ou last ), e você pode encontrar várias mensagens sobre cada login em /var/log/secure ou /var/log/auth.log ou o jornal systemd:
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.
Para monitorar isso dentro do seu próprio programa, existem várias opções:
Se as máquinas de destino executarem o systemd, você poderá monitorar os sinais de D-Bus enviados pelo systemd-logind ( SessionNew e SessionRemoved ). O ConsoleKit tem uma interface semelhante.
Você pode implementar seu próprio módulo PAM, que envia notificações sobre IPC. Seria semelhante ao estágio de "sessão" do pam_unix (que atualmente apenas imprime a mensagem acima para o syslog).
Você pode inotify-assistir os arquivos "utmp" ou "wtmp" (o primeiro em (/var)/run/utmp no Linux, o último em /var/log/wtmp ). A maioria das sessões de login são gravadas lá para visualização com who ou w. (utmp mantém o estado atual, enquanto wtmp é um log atual.)
Você pode usar o auditd, que irá registrar tanto as mensagens do kernel pam_loginuid bem como várias mensagens do espaço do usuário dos daemons.
Não se esqueça de distinguir entre logins "interativos" (gdm, sshd, login), logins "service" (imap, ftp) e sessões "batch" (cron, systemd-user).