Как получить список попыток входа с помощью journalctl?

Как получить список попыток входа с помощью journalctl?

Согласно systemdдокументации, journalctlрекомендуется для просмотра журналов, а не /var/log/*дерева файлов.

Покаman 1 journalctlописывает, как его использовать, я все еще не знаю, какие аргументы ему нужны, чтобы дать мне список того, что я хочу. Например, я хочу увидеть список логинов пользователей. Я знаюsshdобрабатывает входы по ssh, но как насчет локальных входов в систему и общей аутентификации пользователей?

Вот что я попробовал:

#shows all logs. huge
journalctl

#limit history and search for "login"
journalctl --since "yesterday" | grep login

#a week ago rather than just a day
journalctl --since `date +"%Y-%m-%d" --date "last week"` | grep login

... systemd-logind[678]: New session 81 of user jozxyqk.

Это, кажется, дает некоторые указания, но определенно не самый надежный метод. Как правильно?

решение1

Бегать:

journalctl -q _AUDIT_TYPE=1112 _TRANSPORT=audit

Объяснение:

Если у вас запущена подсистема аудита (а если вы ее не отключили, то она у вас есть), то это лучший способ получить такую ​​информацию, поскольку, помимо прочего, если вы используете _TRANSPORT=audit, сообщения не могут быть подделаны, как сообщения через традиционный сокет syslog. Чтобы увидетьвсесообщений, отправляемых через этот транспорт, используйте journalctl -q _TRANSPORT=audit. (-q исключает раздражающие -- Reboot --строки.)

Чтобы увидеть их в подробной форме, выполните journalctl -q _TRANSPORT=audit -o verbose. На самом деле, я предлагаю остановиться и сделать это прямо сейчас, пока вы следуете за мной, потому что следующее, что мы хотим сделать, это отфильтровать по одному из полей, которые мы там видим. Вот запись из моей системы:

_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'

Внизу MESSAGEнаходится неструктурированная запись журнала, которая по сути является тем, что вы видите в неподробном выводе в стиле syslog. Мымогgrep for MESSAGE=USER_LOGIN(и сделать это прямо сейчас), но журнал позволяет нам делать более интересные вещи, так что давайте продолжим.

Каждый тип сообщения аудита имеет связанный _AUDIT_TYPE(представьте себе!). По какой-то причине это не преобразуется в текст в структурированном выводе, но 1112соответствует USER_LOGIN. Я подтвердил это, проверив libaudit.h, который имеет (с некоторыми строками контекста):

#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 */

Итак, journalctl -q _AUDIT_TYPE=1112 _TRANSPORT=auditэто то, что вам нужно. Он получает входы ssh, терминала и GUI, а также записывает успехи и неудачи. Обратите внимание, что онне делаетотслеживайте такие вещи, как sudoили su— для них существуют различные записи аудита.

Даже «короткая» версия вывода довольно многословна, поэтому вы можете использовать -o jsonи создать короткий скрипт для анализа вывода в удобном формате.

решение2

journalctl -q SYSLOG_FACILITY=10 SYSLOG_FACILITY=4

Это сообщает журналу о необходимости отфильтровывать сообщения, поступающие из двух разных источников. Номер 10 для authprivи номер 4 для auth. ssh, а также многие другие приложения, чувствительные к входу в систему, используют эти два источника для ведения журнала.

решение3

Вам нужны входы или попытки входа?

Это показывает логины, ноне попытки(например, сегодня) и работает в Fedora 22:

$ journalctl -u 'systemd-logind'  --since "today" --until "tomorrow"

Вот пример вывода: -- Logs begin at Mon 2014-09-01 03:10:03 BST, end at Fri 2015-11-20 09:55:02 GMT. -- Nov 20 08:47:15 meow systemd[1]: Starting Login Service... Nov 20 08:47:15 meow systemd-logind[699]: New seat seat0. Nov 20 08:47:15 meow systemd-logind[699]: Watching system buttons on /dev/input/event2 (Power Button) Nov 20 08:47:15 meow systemd-logind[699]: Watching system buttons on /dev/input/event0 (Power Button) Nov 20 08:47:15 meow systemd-logind[699]: Watching system buttons on /dev/input/event1 (Lid Switch) Nov 20 08:47:15 meow systemd[1]: Started Login Service. Nov 20 08:47:37 meow systemd-logind[699]: New session c1 of user gdm. Nov 20 08:47:46 meow systemd-logind[699]: New session c2 of user gdm. Nov 20 08:47:46 meow systemd-logind[699]: Removed session c1. Nov 20 08:47:46 meow systemd-logind[699]: Removed session c2. Nov 20 08:47:46 meow systemd-logind[699]: New session c3 of user gdm. Nov 20 08:51:22 meow systemd-logind[699]: New session 1 of user david1.

Он загроможден другой информацией, такой как крышка и кнопки питания, поэтому вы можете выполнить команду grep, чтобы sessionбыть более точным: $ journalctl -u 'systemd-logind' --since "today" --until "tomorrow" | grep session Nov 20 08:47:37 meow systemd-logind[699]: New session c1 of user gdm. Nov 20 08:47:46 meow systemd-logind[699]: New session c2 of user gdm. Nov 20 08:47:46 meow systemd-logind[699]: Removed session c1. Nov 20 08:47:46 meow systemd-logind[699]: Removed session c2. Nov 20 08:47:46 meow systemd-logind[699]: New session c3 of user gdm. Nov 20 08:51:22 meow systemd-logind[699]: New session 1 of user david1.

Связанный контент