話題の記事

Red Hat Enterprise Linux 8の新機能「セッション記録ソリューション」を試してみた

2019.05.22

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

こんにちは、望月です。

Red Hat Enterprise Linux 8 (以下、RHEL8)がリリースされましたね!弊社のブログでも話題に上がっていましたがリリースノートを読んだところ、気になる新機能があったため、試してみました。

8.0 リリースノート - Red Hat Customer Portal

RHEL 8 のセッション記録ソリューションが追加

Red Hat Enterprise Linux 8 (RHEL 8) に セッション記録ソリューションが追加されました。新しい tlog パッケージと、それに関連付けられた Web コンソールセッションプレイヤーにより、ユーザー端末セッションを記録および再生できます。記録は、システムセキュリティーサービスデーモン (SSSD) サービスを介して、ユーザー別またはユーザーグループ別に設定できます。端末への入出力はすべてキャプチャーされ、テキストベースの形式でシステムジャーナルに保存されます。セキュリティー上の理由から、未加工のパスワードやその他の機密情報を傍受されないように、入力はデフォルトでは非アクティブになっています。

このソリューションを、セキュリティーが重要なシステムでユーザーセッションの監査に使用できます。セキュリティー違反が発生した場合に、記録されたセッションをフォレンジック分析として見直すことができます。システム管理者は、セッション記録をローカルに設定し、tlog-play ユーティリティーを使用して、RHEL 8 Web コンソールインターフェースまたはコマンドラインインターフェースから、結果を表示できるようになりました。

やってみた

参考

下記、Red Hatのブログに手順があるので、そちらを参考に設定を行っていきたいと思います。

Getting started with session recording in Red Hat Enterprise Linux 8 Beta

パッケージインストール

必要なパッケージをインストールし、Cockpitを立ち上げます。CockpitはWebインターフェイスでRedHatを管理できるツールとなり、セッション記録もCockpitから確認することができます。

$ sudo dnf install tlog cockpit cockpit-session-recording -y
$ sudo systemctl enable --now cockpit.socket

$ sudo systemctl status cockpit.socket
## Active: active (listening) になっていることを確認

SSSDを利用する必要があるため、コンフィグを配置し、再起動を行います。

$ sudo vi /etc/sssd/sssd.conf

[domain/local]
id_provider = files

[sssd]
domains = local
services = nss, pam, ssh, sudo
$ sudo chmod 600 /etc/sssd/sssd.conf
$ sudo systemctl restart sssd

Cockpitにログインするため root ユーザにパスワードを設定します。

$ sudo passwd

※一時的な検証のため、Cockpitへのログインにroot ユーザを利用していますが sudo 権限をもつユーザでも使用可能です。

Cockpitへログイン

下記、URLにアクセスし、CockpitのWebページを開きます。

https://<Public IP>:9090/

設定したパスワードを利用し、root ユーザでログインします。

メニューから「Session Recording」を選択し、コンフィグを開きます。

コンフィグ画面の下の方にあるSSSD ConfigurationのScopeを「All」に変更し、「Save」をクリックします。

以上で、セッション記録が行えるようになります。

セッションの記録

実際にログインし直してみると、「ATTENTION! Your session is being recorded!」と表示され、セッションが記録されているとの警告が表示されるようになります。

$ ssh ec2-user@<Public IP>
Web console: https://<Public IP>:9090/ or https://10.0.0.155:9090/

Last login: Wed May 22 02:56:51 2019 from <Global IP>
Locale charset is ANSI_X3.4-1968 (ASCII)
Assuming locale environment is lost and charset is UTF-8

ATTENTION! Your session is being recorded!

セッションが記録されることの確認のため、適当なコマンドを実行し、ログアウトします。

$ whoami
$ pwd
$ touch hoge
$ ls -lh
$ rm hoge
$ ls -lh
$ exit

セッションの再生

セッションの再生にはCockpitを利用しWebインターフェイスから確認する方法と、コマンドラインから確認する方法があります。

Webインターフェイスから確認

メニューから「Session Recording」を選択し、対象のセッションをクリックします。

プレイヤーが表示されるので、再生ボタンやシークバーをスライドすることで、セッションを再生することができます。また、実行したコマンドなどを検索し、該当時間を出すことも可能です。

コマンドラインから確認

下記コマンドを実行し、journalctlに保存されているログのレコーディングIDを確認します。

# journalctl -o verbose | grep \"rec\"
    MESSAGE={"ver":"2.2","host":"ip-10-0-0-155.ap-northeast-1.compute.internal","rec":"2e7d01d745c84accb6908dd338325434-41ad-d686","user":"ec2-user","term":"xterm-256color","session":7,"id":1,"pos":0,"timing":"=150x55+18>57","in_txt":"","in_bin":[],"out_txt":"\u001b]0;ec2-user@ip-10-0-0-155:~\u0007[ec2-user@ip-10-0-0-155 ~]$ ","out_bin":[]}
    MESSAGE={"ver":"2.2","host":"ip-10-0-0-155.ap-northeast-1.compute.internal","rec":"2e7d01d745c84accb6908dd338325434-41ad-d686","user":"ec2-user","term":"xterm-256color","session":7,"id":2,"pos":26958,"timing":"=150x55>1+496>4+344>1+208>1+47>1+1443>1+165>1+86>1+959>2+1>67+3792>1+91>1+172>1+445>75","in_txt":"","in_bin":[],"out_txt":"w\b\u001b[Kwhoami\r\nec2-user\r\n\u001b]0;ec2-user@ip-10-0-0-155:~\u0007[ec2-user@ip-10-0-0-155 ~]$ pwd\r\n/home/ec2-user\r\n\u001b]0;ec2-user@ip-10-0-0-155:~\u0007[ec2-user@ip-10-0-0-155 ~]$ ","out_bin":[]}
    MESSAGE={"ver":"2.2","host":"ip-10-0-0-155.ap-northeast-1.compute.internal","rec":"2e7d01d745c84accb6908dd338325434-41ad-d686","user":"ec2-user","term":"xterm-256color","session":7,"id":3,"pos":37342,"timing":"=150x55>1+49>1+165>1+89>1+439>4+133>4+139>4+111>4+148>1+3247>1+294>1+59>1+117>1+70>1+180>1+1110>1+50>1+152>1+47>1+462>59+759>1+81>1+410>4+120>4+94>1+215>1+85>1+51>1+221>1+721>1","in_txt":"","in_bin":[],"out_txt":"host\b\u001b[K\b\u001b[K\b\u001b[K\b\u001b[K\u0007touch hoge\r\n\u001b]0;ec2-user@ip-10-0-0-155:~\u0007[ec2-user@ip-10-0-0-155 ~]$ rm\b\u001b[K\b\u001b[K\u0007ls -l","out_bin":[]}
    MESSAGE={"ver":"2.2","host":"ip-10-0-0-155.ap-northeast-1.compute.internal","rec":"2e7d01d745c84accb6908dd338325434-41ad-d686","user":"ec2-user","term":"xterm-256color","session":7,"id":4,"pos":47362,"timing":"=150x55>1+469>4+114>4+144>4+94>4+583>1+296>1+201>1+109>1+691>1+774>4+172>2+1>119+1648>1+431>4+246>1+102>1+119>1+643>1+42>1+161>1+61>1+481>59+425>7+162>17+635>68","in_txt":"","in_bin":[],"out_txt":"h\b\u001b[K\b\u001b[K\b\u001b[K\b\u001b[K -lh \b\u001b[K\r\ntotal 0\r\n-rw-rw-r--. 1 ec2-user ec2-user 0 May 22 03:04 hoge\r\n\u001b]0;ec2-user@ip-10-0-0-155:~\u0007[ec2-user@ip-10-0-0-155 ~]$ r\b\u001b[Krm hoge\r\n\u001b]0;ec2-user@ip-10-0-0-155:~\u0007[ec2-user@ip-10-0-0-155 ~]$ rm hoge\b\b\b\b\b\b\b\u001b[1Pls -lh\r\ntotal 0\r\n\u001b]0;ec2-user@ip-10-0-0-155:~\u0007[ec2-user@ip-10-0-0-155 ~]$ ","out_bin":[]}
    MESSAGE={"ver":"2.2","host":"ip-10-0-0-155.ap-northeast-1.compute.internal","rec":"2e7d01d745c84accb6908dd338325434-41ad-d686","user":"ec2-user","term":"xterm-256color","session":7,"id":5,"pos":57748,"timing":"=150x55>1+190>1+119>1+126>1+368>10","in_txt":"","in_bin":[],"out_txt":"exit\r\nlogout\r\n","out_bin":[]}
## "rec":"<レコーディングID>"を確認

下記コマンドで対象のレコーディングIDを指定することで、セッションの再生がおこなうことができます。

# tlog-play -r journal -M TLOG_REC=2e7d01d745c84accb6908dd338325434-41ad-d686
[ec2-user@ip-10-0-0-155 ~]$ whoami
ec2-user
[ec2-user@ip-10-0-0-155 ~]$ pwd
/home/ec2-user
[ec2-user@ip-10-0-0-155 ~]$ touch hoge
[ec2-user@ip-10-0-0-155 ~]$ ls -lh
total 0
-rw-rw-r--. 1 ec2-user ec2-user 0 May 22 03:04 hoge
[ec2-user@ip-10-0-0-155 ~]$ rm hoge
[ec2-user@ip-10-0-0-155 ~]$ ls -lh
total 0
[ec2-user@ip-10-0-0-155 ~]$ exit
logout

#

まとめ

RHEL8 を利用し、簡単にユーザのセッション記録を取ることができました。今までは script コマンドを利用し、セッション記録を取得することが多かったのかなと思いますが、この方法を使えば簡単にセッション記録を取得し再生することができると思いました。

script コマンドで頑張っている部分をこの機能に置き換えるなど、検討していくのもいいかもしれませんね。