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短いスクリプトを使用して出力を良い形式に解析することをお勧めします。

おすすめ記事