Journalctl을 사용하여 로그인 시도 목록을 어떻게 얻을 수 있나요?

Journalctl을 사용하여 로그인 시도 목록을 어떻게 얻을 수 있나요?

systemd문서 에 따르면 파일 트리 journalctl보다는 로그 탐색에 권장됩니다 /var/log/*.

하는 동안man 1 journalctl사용 방법을 설명하지만, 내가 원하는 항목의 목록을 제공하기 위해 어떤 인수가 필요한지 여전히 알 수 없습니다. 예를 들어, 사용자 로그인 목록을 보고 싶습니다. 나는 알고 있다sshdSSH 로그인을 처리합니다., 하지만 로컬 로그인과 일반 사용자 인증은 어떻습니까?

내가 시도한 것은 다음과 같습니다.

#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을 사용하면 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

이는 저널에 2개의 다른 시설에서 오는 메시지를 필터링하도록 지시합니다. 의 경우 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.

덮개 및 전원 버튼과 같은 다른 정보로 인해 복잡하므로 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.

관련 정보