ターミナルロギングはプライバシーの侵害のように聞こえるかもしれませんが、ユーザーが実行しているコマンドを知りたい理由はたくさんあります。コンプライアンス上の理由であろうと、単に優れたシステム管理であろうと、ユーザーが何をしているのかを知りたいだけの場合があります。 Linuxシステムのフリートを管理していて、シェルを委託した人々が何をしているのかを知る必要がある場合は、tlog
を検討することをお勧めします。 。 tlog
は、RHELおよびその他のいくつかのディストリビューションに含まれているターミナルI/Oロガーです。キーストローク以上のものをログに記録します。また、受信した出力もログに記録します。文字通りセッションを再生するために使用できます。
この記事では、基本的なtlog
について説明します。 構成し、それが発揮する力の一部を示します。 Linuxは、アクションのロギングに非常に優れています。たとえば、sudo
を介して実行されたコマンドをログに記録できます。 。 安全 ログは、誰がログインしたか、またはログインに失敗したかを示しますが、箱から出してすぐにすべてのアクションを一元的にログに記録するものはありません。 特権のないユーザーが撮影しました。はい、ほとんどのシェルは履歴を保持していますが、ユーザーは自分が何をしているかを知っていれば、履歴を変更または削除することもできます。 tlog
ユーティリティ自体は絶対確実ではありませんが、ロギングの追加レイヤーが問題になることはありません。ただし、以下のリンクされたRedHatのドキュメントで概説されている制限と懸念があります。また、tlog
JSONにログインして、後で解析したり、再生したりできるようにします。
私の目標は、tlog
の力をお見せすることです コックピットと一緒に。コックピットは、ご存じない方もいらっしゃると思いますが、RHELに含まれているWeb管理インターフェースです。コックピットの使用はオプションであり、tlog
を使用する場合 それがなければ、それは問題ありません。コックピットの構成を含む手順をスキップするだけです。
[お楽しみいただけるかもしれません:Linuxでのlogrotateの設定]
tlogを設定する
このハウツーでは、新しくインストールした最小限のRHEL8.3システムを使用しています。ターミナルロギングに関するRedHatEnterpriseLinux8の公式ドキュメントはここにあります。開始するには、サブスクリプションを備えたRHEL8システムだけが必要です。このプロセスは、CentOS8でもほぼ同じである必要があります。tlog
をインストールします。 コックピットを開いてから、sssd(システムセキュリティサービスデーモン)でセッションの記録を有効にします。 tlog
を使用できます 他のいくつかの方法がありますが、このアプローチではtlog
を管理できます ユーザーごとではなく、sssd経由。
まず、必要なパッケージをインストールします:
[root@gangrif-tlogtest ~]# yum install -y tlog cockpit cockpit-session-recording
インストールが完了したら、コックピットを有効にして起動します。
[root@gangrif-tlogtest ~]# systemctl enable cockpit.socket --now
Created symlink /etc/systemd/system/sockets.target.wants/cockpit.socket → /usr/lib/systemd/system/cockpit.socket.
Webブラウザでhttps://your-server's-IP
。それでも問題が解決しない場合は、ホストベースまたはネットワークベースのファイアウォールでコックピットを有効にする必要があります。私の場合、それは必要ありませんでした。
次に、tlog
を追加します sssd設定に。 sssdデーモンを使用すると、リモートユーザーディレクトリなど、認証スタックをさまざまにカスタマイズできます。この場合、ローカルのtlog
に使用しています。 統合。これを設定する方法はいくつかあります。 tlog
を追加します 疑わしいユーザーと呼ばれる特定のグループへのセッションの記録 、そのため、そのグループに追加されたすべてのユーザーがログに記録されます。必要に応じて、個々のユーザーまたはすべてのユーザーをログに記録できます。次の設定を/etc/sssd/conf.d/sssd-session-recording.conf
に追加します 。このファイルがroot:rootによって所有されていることを確認してください 、およびユーザー/その他はファイルの読み取りまたは書き込みを行うことができません。 Sssdは、正当な理由でこれに気を配っています。
[root@gangrif-tlogtest ~]# cat /etc/sssd/conf.d/sssd-session-recording.conf
[session_recording]
scope = some
groups = suspicious-users
sssdを使用しない、または使用できない場合は、tlog
を手動で構成するオプションがあります。 ユーザー向け。このオプションの概要は、前述のドキュメントに記載されています。
そのファイルを配置した後、sssdを再起動します。次に、構成をテストします。
ユーザーセッションのログ
そのギャングリフ ユーザー、彼は疑わしいようです。彼を疑わしいユーザーに入れます tlog
のグループ 記録するように構成されています。
[root@gangrif-tlogtest tlog]# groupmems -g suspicious-users -a gangrif
[root@gangrif-tlogtest ~]# id gangrif
uid=1000(gangrif) gid=1000(gangrif) groups=1000(gangrif),10(wheel),1001(suspicious-users)
gangrifとしてログインする場合 、監視されていることを示す素敵な警告バナーが表示されます。このバナーは、通知を使用して変更または削除できます /etc/tlog/tlog-rec-session.conf
のディレクティブ 。監視されていることをユーザーに通知する必要がある場合があります。私にとって、tlog
潜在的な攻撃者に監視されていることを通知しない場合は、より強力です。あなたが何を持っているかを彼らに伝えることは、彼らに何を無効にしようとするかを知らせるだけです。
[nlager@batou-lan ~]$ ssh [email protected]
[email protected]'s password:
Web console: https://gangrif-tlogtest.tamlab.rdu2.redhat.com:9090/ or https://10.8.109.214:9090/
Last login: Tue Dec 22 15:29:44 2020 from 10.10.116.62
ATTENTION! Your session is being recorded!
[gangrif@gangrif-tlogtest ~]$
コックピットでセッションを表示
デフォルトでは、tlog
システムジャーナルにログを記録します。ログに記録されたデータを元に戻す最も簡単な方法は、コックピットのセッションロギングを使用することです。 パネル。それは実際にはかなり滑らかで、うまくまとめられています。セッションを再生して、入力されたコマンド(タイプミス、入力されたが失敗したコマンド、 Ctrl + C を使用して閉じられたコマンドなど)を確認できます。 。 ログビューを押すと ボタンをクリックすると、このビューアには、セッション中に更新された関連システムログも表示されます。本当に素晴らしいツールです。
システムジャーナルからファイルログに切り替えます
コックピットを使用していない場合、探しているデータはシステムジャーナルにあるため、ログの表示は少し複雑になります。この場合、tlog
を切り替えるのが最も簡単であることがわかりました。 ファイルへの記録に移ります。また、syslogにログインすることもできます。これは、同様の効果があり、おそらく保守が容易です。簡単にするために、ファイルに直接書き込むだけです。 tlog
を移動することを警告する必要があります システムジャーナルからログアウトしてファイルにログインすると、コックピットの統合が中断されます。
まず、ファイルを保存する場所を作成し、 tlogで書き込み可能であることを確認します ユーザー。 /var/log
にディレクトリを追加しました tlog
と呼ばれます 所有権をtlog:tlogに設定します 。
次に、/etc/tlog/tlog-rec-session.conf
で 、tlog
に伝えます ログを保存する場所。さまざまな構成のスタンザがファイルにあります。 1つはファイルライターパラメータというラベルが付いています 。このパラメーターを使用すると、出力ファイルのパスを定義できます。パスの構成は次のようになりました:
// File writer parameters
"file": {
// The "file" writer log file path.
"path" : "/var/log/tlog/tlog.log"
},
次に、tlog
に伝えます ジャーナルであるデフォルトの代わりにファイルライターを使用します。設定ファイルの下部に、閉じる}の直前の行があります。 // "writer": "journal"が含まれています 設定。その設定をファイルに変更します そのように:
// The type of "log writer" to use for logging. The writer needs
// to be configured using its dedicated parameters.
"writer" : "file"
}
次回ターゲットユーザーがログインするとき、ファイル/var/log/tlog/tlog.log
作成する必要があり、セッションはそこに記録されます。これにログローテーションを設定する必要があります。外部ロガーがある場合は、このファイルをそこに送信する必要があります。このデータは、必要なときに利用できる場合にのみ役立ちます。攻撃者がそれを見つけて削除した場合、それはあなたに何の役にも立ちません。
tlog-playでセッションを表示
これらのログをファイルに保存したら、それらを確認できます。 journalctl
を使用できます 、ただし、ログはJSON形式であるため、人間が読みやすいものではありません。例として、私のrm -rf
上記のコマンド例は次のようになります:
{"ver":"2.2","host":"gangrif-tlogtest.tamlab.rdu2.redhat.com","rec":"2a5a7ca40dd6424e91f587c0e012e623-3cf2-1f1e2d","user":"gangrif","term":"xterm-256color","session":31,"id":1,"pos":0,"timing":"=185x50+31>61+136>1+105>1+135>1+193>1+218>1+202>4+161>4+111>1+167>1+181>1+93>1+196>1+1412>2+2>166+1897>1+251>1+208>1+159>1+73>1+110>1+90>1+73>1+119>1+285>1+504>1+143>1+136>1+961>1+175>1+144>1+865>4","in_txt":"","in_bin":[],"out_txt":"\u001b]0;gangrif@gangrif-tlogtest:~\u0007[gangrif@gangrif-tlogtest ~]$ rm rf\b\u001b[K\b\u001b[K-rf /\r\nrm: it is dangerous to operate recursively on '/'\r\nrm: use --no-preserve-root to override this failsafe\r\n\u001b]0;gangrif@gangrif-tlogtest:~\u0007[gangrif@gangrif-tlogtest ~]$ mwahahaha!!!! \b\u001b[K","out_bin":[]}
情報を読むのは簡単ではありませんが、幸いなことに、これを簡単にするツールがあります。 tlog-play
を使用できます ジャーナルに記録されたセッションで、特定の記録を出力するための記録IDを指定できます。代わりにファイルを解析する場合、記録IDは機能しません。すべての録音は同じファイルになり、セッションIDが同じではないため、すべてを再生することはできません。あなたはそれらを分割する必要があります。見たいセッションIDを特定してから、grep
そのセッションIDをtlog-play
の前に新しいファイルに追加します それに満足します。おそらく、syslogは、これらのファイルが書き込まれるときに自動的に分割するように構成できます。
[root@gangrif-tlogtest tlog]# grep 2a5a7ca40dd6424e91f587c0e012e623-3da9-1fdf38 tlog.log >> session.log
[root@gangrif-tlogtest tlog]# tlog-play -i session.log
[gangrif@gangrif-tlogtest ~]$ rm -rf /
rm: it is dangerous to operate recursively on '/'
rm: use --no-preserve-root to override this failsafe
[gangrif@gangrif-tlogtest ~]$ logout
[root@gangrif-tlogtest tlog]#
セッションは、JSONログのタイミングデータを使用して画面上で再生されます。かなり滑らかです。停止または侵害が検出された後にフォレンジックを実行するときに、これがどのように役立つかを想像できます。 tlog
を使用することもできます コマンドラインで何かのデモを記録するようなもののために。
[Red Hat and O'Reillyからこの無料の本を入手してください-KubernetesOperators:Automating the ContainerOrchestrationPlatform。 ]
まとめ
ユーザーの入力の監視に関するこのすべての話は、いくつかの疑問を提起する可能性があります。同様に、パスワードエントリはログに記録されますか?別のホストにジャンプするSSHセッションはどうですか? Xセッションはどうですか?ドキュメントには、警告としてXセッションが記載されていますが、tlog
それらをキャプチャしません。パスワードログはデフォルトでオフになっていますが、必要に応じて有効にすることができます。
したがって、コンプライアンスのためであろうと、新しいテクノロジーの洗練されたデモを記録するためであろうと、この記事がtlog.
を使用して作業を完了するのに役立つことを願っています。