GNU/Linux >> Linux の 問題 >  >> Linux

tlogを使用したセッション記録用にコンテナ化されたSSHサーバーを設定する

このシリーズの最初のパートでは、セッション記録とコンテナー化されたSSHサーバーの使用の利点のいくつかを強調しました。また、高レベルのアーキテクチャも紹介しました。準備手順として、RHEL 8.2を搭載したサーバーの1つが、SSHサーバーのルートレスコンテナーを構築およびホストするように構成されました。

サーバーを準備してユーザーを作成した後(tester2 )、セッション記録が構成されたSSHサーバー用のカスタムDockerfileを作成します。

次のDockerfileでは、systemdをサポートするubi-init(マルチサービス)イメージを利用しています。 CMD /sbin/init があります systemdを開始するデフォルトとして initサービス。この設定では、次の前提があります。

  • サービスは、SSHのコンテナ内で22ではなく2022のポートを公開します
  • 3人のユーザー(つまり、testerを構成します 、tester2 、およびtester3
  • コンテナユーザーtesterに同じUIDを使用する ユーザーとして(tester2 )このユーザーがコンテナ内でルート化できるように、ホスト上でルートレスコンテナを実行する
  • testerのUIDを変更する コンテナ内で0(ルート)として
  • SSHキーをユーザーtesterのビルド引数として構成します およびtester2 tester3のパスワードベースのログイン
  • ユーザーのセッション記録を構成するtester2 およびtester3 ログインシェルを/usr/bin/tlog-rec-sessionとして設定します
  • /homeの永続ボリュームをマップします および/var/log/journal ユーザーのホームディレクトリとSSHサービスおよびセッション記録ログを保持するためのコンテナ作成中
  • tlog-rec-session.confをコピーします journaldを使用してセッション記録ログをキャプチャするための次の構成でホストからコンテナに :
{"shell":"/bin/bash","notice":"\nATTENTION! Your session is being recorded!\n\n","latency":10,"payload":2048,"log":{"input":false,"output":true,"window":true},"limit":{"rate":16384,"burst":32768,"action":"pass"},"file":{"path":""},"syslog":{"facility":"authpriv","priority":"info"},"journal":{"priority":"info","augment":true},"writer":"journal"}

[ライブラボでセッションレコーディングを試す:ターミナルセッションレコーディングの構成]

SSHコンテナのDockerfile

SSHコンテナのサンプルDockerfileは次のとおりです。

FROM ubi8/ubi-init

ARG ADMIN_PUBLIC_KEY
ARG TESTER2_PUBLIC_KEY

RUN yum -y install openssh-server ed openssh-clients tlog glibc-langpack-en && yum clean all && systemctl enable sshd;
RUN sed -i 's/#Port.*$/Port 2022/' /etc/ssh/sshd_config && chmod 775 /var/run && rm -f /var/run/nologin
RUN mkdir /etc/systemd/system/sshd.service.d/ && echo -e '[Service]\nRestart=always' > /etc/systemd/system/sshd.service.d/sshd.conf

COPY tlog-rec-session.conf /etc/tlog/tlog-rec-session.conf
RUN adduser --system -s /bin/bash -u 1001 tester && \ #UID matching user uid on host
           adduser --system -s /usr/bin/tlog-rec-session -u 1000 tester2 && \
           adduser --system -s /usr/bin/tlog-rec-session -u 1002 tester3 -p y5utxaxUDNFII && \
           mkdir -p /home/tester/.ssh /home/tester2/.ssh /home/tester3/.ssh

RUN touch /home/tester/.ssh/authorized_keys /home/tester2/.ssh/authorized_keys /home/tester3/.ssh/authorized_keys && \
           chmod 700 /home/tester/.ssh /home/tester2/.ssh /home/tester3/.ssh && \
           chmod 600 /home/tester/.ssh/authorized_keys /home/tester2/.ssh/authorized_keys /home/tester3/.ssh/authorized_keys && \
           sed -i 's/1001/0/g' /etc/passwd && \ #Update UID with root UID
           echo ${ADMIN_PUBLIC_KEY} >> /home/tester/.ssh/authorized_keys && \
           echo ${TESTER2_PUBLIC_KEY} >> /home/tester2/.ssh/authorized_keys && \
           chown -R tester2:tester2 /home/tester2/ && chown -R tester3:tester3 /home/tester3/ && chown -R tester:tester /home/tester
LABEL Description="This ssh server is running systemd with rootless podman"
EXPOSE 2022

CMD ["/sbin/init"]

ファイルをホームディレクトリにsshdockfile.として保存します。 デフォルトの/etc/tlog/tlog-rec-session.confをコピーします ホームディレクトリに移動します。

コンテナイメージを作成する

目的のキーを使用してコンテナイメージを作成するには、ユーザーの新しいキーのペアを生成します。次に、デフォルトと新しく作成された公開鍵を変数としてエクスポートします。最後に、以下を使用してビルド引数としてそれらを渡します。プロセスは次のとおりです。

# ssh-keygen-t ecdsa ; ssh-keygen -t ecdsa -f .ssh/tester2

# export ADMIN_PUBLIC_KEY=`cat /home/test2/.ssh/id_ecdsa.pub`

# export TESTER2_PUBLIC_KEY=`cat /home/test2/.ssh/tester2.pub`

# podman build -t testsshd -f sshdockfile --cgroup-manager=cgroupfs --build-arg ADMIN_PUBLIC_KEY="$ADMIN_PUBLIC_KEY" --build-arg TESTER2_PUBLIC_KEY="$TESTER2_PUBLIC_KEY"

cgroup-manager 引数にはcgroups-v2が必要であり、ルートレスコンテナがsystemdを使用するために必要です。 正常に。この引数が渡されない限り、Podmanは次のエラーを報告します:

systemd cgroup flag passed, but systemd support for managing cgroups is not available: OCI runtime error

ビルドが成功した場合、次のステップは、目的の永続ボリュームでコンテナーを実行することです。これらのボリューム(/var/log/journal用) および/home )は事前に作成されているか、Podmanがvolumeで動的に作成します デフォルトの保存場所の下にあるディレクトリ(podman info | grep -i graphroot

SSHサーバーを実行します

ルートレスコンテナはネットワーキング用のCNIプラグインをサポートしていないため、SSHサービスを公開するために優先される上位ポート(> 1024)がマップされます。

# podman run -d --name=rootless_ssh1 -v ssh1home:/home:Z -v ssh1logs:/var/log/journal:Z -p 33000:2022 --cgroup-manager=cgroupfs localhost/testsshd

SSHアクセスのテスト

ホストマシンから、ユーザーtesterのSSHキーを使用してSSHサーバーにログインします。 およびtester2 、およびパスワード(redhat123tester3の場合 。

# ssh -l tester -i /home/test2/.ssh/id_ecdsa localhost -p 33000

# ssh -l tester2 -i /home/test2/.ssh/tester2 localhost -p 33000

# ssh -l tester3 localhost -p 33000

tester2にセッションが記録されているというメッセージが表示されます およびtester3

セッションの記録を検証する

testuser2としてログに記録した後 およびtestuser3 いくつかのコマンドを実行すると、tlogがあります ジャーナルログファイルのエントリ。 testerとして ユーザーは、コンテナ内で次のコマンドを実行します。

# journalctl | grep tlog-rec-session

tlog エントリには、ホストID、レコードID、および関連付けられたユーザーが含まれます。例:

"host":"0ce2921675b0","rec":"26b55a3aafd94f40b49473ac33bd2c96-42-f99b3","user":"tester2"

これらのログエントリには、ホストからvolumeを使用してアクセスすることもできます。 場所:

/home/test2/.local/share/containers/storage/volumes/ssh1logs/_data/<containerid>/system.journal

ssh1logs/_dataの下に複数のディレクトリがある場合があります 以前のコンテナが終了し、新しいコンテナがそれを置き換えた場合。

記録されたセッションを再生する

tlog-play コマンドは、セッションの再生をサポートします。通常、管理者は特定のユーザーセッションの再生に関心があります。これを実現するには、その特定のセッションのセッションエントリをジャーナルログからエクスポートし、ローカルファイルに保存します。

特定のレコードIDを特定し、それを使用して次のawkですべてのレコードをフィルタリングします コマンド:

# journalctl --file .local/share/containers/storage/volumes/ssh1logs/_data/<containerid>/system.journal | awk -F '{"' '$0~/<tlog record id>/{ print "\{\"" $2 }' 2>/dev/null > ~/session_recording.log

# tlog-play -r file -i ~/session_recording.log

このようにして、管理者は各ユーザーセッションの特定のセッションログを分離して保存し、オンデマンドで再生できます。これらのセッションログは、監査目的で中央の場所に送信することもできます。デフォルトでは、tlog ユーザーの標準入力をキャプチャしないため、パスワードなどの機密情報がキャプチャされてログに保存されることはありません。

複数のコンテナー化されたSSHサーバーをホスト上で同時に実行でき(異なるポートマッピングを使用)、各コンテナーは個別のユーザープロファイルと個別の永続ボリュームマッピングを持ちます。コンテナー自体は、systemdとして構成することもできます。 ホスト上のサービスを起動時に開始します。

まとめ

次のパートでは、Red Hat IDMとバックエンドサーバー(IDMと統合)を紹介します。ホストベースのアクセス制御と一元化されたsudo IDMのユーザー/グループに対して、どのユーザーがどのホストでどのコマンドを実行できるかを管理するように構成されます。

[コンテナを使い始めますか?この無料コースをチェックしてください。コンテナ化されたアプリケーションのデプロイ:技術的な概要。 ]


Linux
  1. Ssh – Sshアクセス試行のログ?

  2. Ctrl-c Sshセッションでの処理?

  3. RackspaceでCloudFlareを使用する

  1. ssh 用の teamviewer のようなツール?

  2. Linux で Apache を使用してサブドメインを設定する

  3. 暗号化されたホームディレクトリを持つUbuntuシステムへのauthorized_keysを使用したSSH?

  1. プライバシーのためにSSHを構成する3つの方法

  2. tlogを使用したセッション記録用にコンテナ化されたSSHサーバーを設定する

  3. 一部のユーザーのパスワードを使用した SSH ログインを無効にする方法は?