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