現在のホストに SSH 接続して終了した後に Kerberos チケットが失われる

現在のホストに SSH 接続して終了した後に Kerberos チケットが失われる

CentOS 7.3 で実行しています。

以下のシナリオで Kerberos TGT が失われないようにするにはどうすればよいですか?

ログアウト時に Kerberos チケットを破棄しないことのセキュリティへの影響は理解しており、これについてはさらに詳しく調べるつもりです。しかし、まずは以下に示すできるだけ単純な例から始めたいと思います。

[email protected]$ klist
klist: Credentials cache keyring 'persistent:25536700022:krb_ccache_h3j7qk7' not found

[email protected]$ kinit
Password for [email protected]:

[email protected]$ klist
Ticket cache: KEYRING:persistent:25536700022:krb_ccache_h3j7qk7
Default principal: [email protected]

Valid starting       Expires              Service principal
08/03/2018 17:06:45  08/04/2018 17:06:41  krbtgt/[email protected]

[email protected]$ ssh -K host
Last login: Fri Aug  3 17:06:21 2018 from 10.250.57.186

[email protected]$ klist
Ticket cache: KEYRING:persistent:25536700022:krb_ccache_h3j7qk7
Default principal: [email protected]

Valid starting       Expires              Service principal
08/03/2018 17:06:54  08/04/2018 17:06:41  krbtgt/[email protected]

[email protected]$ exit
logout
Connection to host closed.

[email protected]$ klist
klist: Credentials cache keyring 'persistent:25536700022:krb_ccache_h3j7qk7' not found

[email protected]$

アップデート#1

SSH サーバーの構成を次のように更新すると、提示された問題が解決されます。

GSSAPICleanupCredentials no

ただし、これを無条件に行うことは、セキュリティに悪影響を与えるため望ましくありません。作業が終わった後も、有効期限が切れていないチケットをマシン上に残しておくのは危険です。

ユースケースの詳細
SSHを使用してリモートホストでコマンドを実行します。リモートホストで実行されたコマンドは、SSHを使用してさらに別のホストでリモートコマンドを実行する可能性があります。これはすべてスクリプト化/自動化されているため、パスワードのプロンプトを表示することはできません。これが、ssh -K-Kフラグは、SSH 接続先のホストに Kerberos TGT を転送し、パスワードの入力を求められることなくそこから別のホストに SSH 接続できるようにします。

私たちの特定のユースケースでは、SSH を使用してコマンドを実行する「リモート」ホストの 1 つが、すでに使用しているホストである場合があります。上記の構成変更を行わないと、「リモート」コマンドの実行が終了し、SSH セッションが終了した後、Kerberos チケットは破棄されます。現在使用しているマシンでは! その後、すべてのホストにパスワードなしで SSH 接続する機能が失われました。

ユースケースに適した安全なソリューションの探求
無条件に安全保障上の問題を回避するためにないログアウト時に Kerberos チケットを破棄する方法について詳しく調べてみたいと思います。

次のいずれかを実行する方法はありますか?

  1. SSH接続先のマシンにKerberos TGTがまだ存在しない場合にのみ転送します。
  2. Kerberosチケットは退出時にのみ破棄してください最後シェルセッション

私が考慮していない他の可能性はありますか?

答え1

最終的に、.bash_profile に次の内容を入力しました。

cleanup()
{
   SHELL_COUNT=$(ps -elf | grep bash | grep $(whoami) | grep -v grep | wc -l)

   if [[ "$SHELL_COUNT" -eq 2 ]]; then
      kdestroy -q
   fi
}

trap '
   cleanup
' 0

関連情報