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
이는 서로 다른 두 시설의 메시지를 필터링하도록 로그에 지시합니다. 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
더 정확한 정보를 얻기 위해 grep을 사용할 수 있습니다.
$ 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.