Assista e histórico registrando os eventos de Login e Logout dos usuários no Linux

3

Eu gostaria de manter o histórico de login e logout dos usuários no Linux.

Ou seja, deixe-me saber se as chamadas relevantes do sistema são usadas para eventos de login e logout, para que eu possa fazer isso por meio da conexão da chamada do sistema.

Além disso, se houver outra maneira de o meu código proprietário (processo ou thread) poder receber eventos de login e logout.

Além disso, se já houver um mecanismo de manutenção de histórico de login / saída no Linux, por favor, deixe-me saber onde posso obter as informações detalhadas.

Obrigado.

Feliz

Happy
fonte
A pesquisa do histórico de login para usuários específicos pode ajudar em parte ou em complemento a outro método: serverfault.com/questions/305738/how-do-i-extract-login-history
StackAbstraction

Respostas:

5

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 [email protected] (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).

grawity
fonte
Muito obrigado pela resposta. Você poderia, por favor, aconselhar com mais detalhes sobre a última declaração que é "Não se esqueça de distinguir entre sessões de logins (gdm, sshd, login), sessões de" serviço "(imap, ftp) e" batch "(cronativas) , systemd-user). "
Happy