web-dev-qa-db-ja.com

どのようにすれば、journalctlでログイン試行のリストを取得できますか?

systemd docsによると、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.

これはいくつかの指標を与えるようですが、間違いなく最も堅牢な方法ではありません。正しい方法は何ですか?

6
jozxyqk

実行:

journalctl -q _AUDIT_TYPE=1112 _TRANSPORT=audit

説明:

監査サブシステムを実行している(そして、無効にしない限り、実行する)と仮定すると、これはこの種の情報を取得するための最良の方法です。なぜなら、特に_TRANSPORT=auditを使用する場合、メッセージは従来のsyslogのように偽装できないためです。ソケット。このトランスポートを介して送信されたメッセージのallを表示するには、journalctl -q _TRANSPORT=auditを使用します。 (-qは煩わしい-- Reboot --行を避けます。)

これらを詳細形式で表示するには、journalctl -q _TRANSPORT=audit -o verboseを実行します。実際には、フォローしているときに、今は停止して実行することをお勧めします。これは、次に表示されるフィールドの1つをフィルター処理するためです。これが私のシステムの記録です:

_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スタイルの出力に表示されるものです。我々はcould grep for MESSAGE=USER_LOGIN(そして今すぐ行われます)ですが、ジャーナルは私たちにもっとクールなことをさせてくれるので、それを続けましょう。

各監査メッセージタイプには、_AUDIT_TYPEが関連付けられています(想像してください)。何らかの理由で、これは構造化された出力ではテキストにうまく変換されませんが、1112USER_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ログインを取得し、成功と失敗を記録します。 しないでくださいSudosuのようなものをキャッチすることに注意してください—これらには異なる監査レコードがあります。

「短い」バージョンの出力でさえ冗長なものなので、-o jsonを使用して、出力をきれいな形式に解析する短いスクリプトを作成することができます。

3
mattdm

ログインまたはログイン試行を行いますか?

これはログインを示しますが、試行なし(今日など)で、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._

1
dcorking
journalctl -q SYSLOG_FACILITY=10 SYSLOG_FACILITY=4

これは、2つの異なる施設からのメッセージをフィルターで除外するようにジャーナルに指示します。 authprivは10、authは4です。 sshおよび他の多くのログイン依存アプリケーションは、これらの2つの機能を使用してログに記録します。

1
Umut