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