Executar:
journalctl -q _AUDIT_TYPE=1112 _TRANSPORT=audit
Explicação:
Supondo que você tenha o subsistema de auditoria em execução (e a menos que tenha desabilitado, é a melhor maneira de obter esse tipo de informação, porque entre outras coisas, se usar _TRANSPORT=audit
, as mensagens não podem ser falsificadas como aqueles sobre o soquete syslog tradicional. Para ver all das mensagens enviadas através deste transporte, use journalctl -q _TRANSPORT=audit
. (O -q mantém as linhas -- Reboot --
irritantes.)
Para ver isso em forma detalhada, faça journalctl -q _TRANSPORT=audit -o verbose
. Na verdade, sugiro que você pare e faça isso agora, já que está acompanhando, porque a próxima coisa que queremos fazer é filtrar um dos campos que vemos lá. Aqui está um registro do meu sistema:
_BOOT_ID=[redacted]
_MACHINE_ID=[redacted]
_HOSTNAME=[redacted]
_UID=0
_TRANSPORT=audit
SYSLOG_FACILITY=4
SYSLOG_IDENTIFIER=audit
AUDIT_FIELD_HOSTNAME=?
AUDIT_FIELD_ADDR=?
AUDIT_FIELD_RES=success
_AUDIT_LOGINUID=18281
_AUDIT_TYPE=1112
AUDIT_FIELD_OP=login
AUDIT_FIELD_ID=18281
_PID=5398
_SELINUX_CONTEXT=system_u:system_r:local_login_t:s0-s0:c0.c1023
AUDIT_FIELD_EXE=/usr/bin/login
AUDIT_FIELD_TERMINAL=tty6
_AUDIT_SESSION=541
_SOURCE_REALTIME_TIMESTAMP=1480529473269000
_AUDIT_ID=7444
MESSAGE=USER_LOGIN pid=5398 uid=0 auid=18281 ses=541 subj=system_u:system_r:local_login_t:s0-s0:c0.c1023 msg='op=login id=18281 exe="/usr/bin/login" hostname=? addr=? terminal=tty6 res=success'
O MESSAGE
na parte inferior é o registro de log não estruturado, que é basicamente o que você vê na saída não detalhada do estilo syslog. Nós poderíamos grep para MESSAGE=USER_LOGIN
(e ser feito agora), mas a revista nos permite fazer coisas mais legais, então vamos continuar nisso.
Cada tipo de mensagem de auditoria tem um _AUDIT_TYPE
associado (imagine isso!). Por algum motivo, isso não é convertido para texto na saída estruturada, mas 1112
corresponde a USER_LOGIN
. Confirmei isso verificando em libaudit.h
, que tem (com algumas linhas de contexto):
#define AUDIT_USER_CHAUTHTOK 1108 /* User acct password or pin changed */
#define AUDIT_USER_ERR 1109 /* User acct state error */
#define AUDIT_CRED_REFR 1110 /* User credential refreshed */
#define AUDIT_USYS_CONFIG 1111 /* User space system config change */
#define AUDIT_USER_LOGIN 1112 /* User has logged in */
#define AUDIT_USER_LOGOUT 1113 /* User has logged out */
#define AUDIT_ADD_USER 1114 /* User account added */
#define AUDIT_DEL_USER 1115 /* User account deleted */
Então, journalctl -q _AUDIT_TYPE=1112 _TRANSPORT=audit
é o que você precisa. Ele obtém logins ssh, terminal e GUI e registra sucesso e falha. Note que não pega coisas como sudo
ou su
- existem registros de auditoria diferentes para eles.
Até mesmo a versão "curta" da saída é meio detalhada, então você pode querer usar -o json
e criar um script curto para analisar a saída em um formato bonito.