web-dev-qa-db-ja.com

AFSトークンはどこに保存され、Screenセッションを実行するにはどうすればよいですか?

次の状況があります。実行中のGNU画面セッションでAFSにアクセスできなくなりました-トークンの有効期限が切れています。ただし、新しいシェルからアクセスできます。-との違い この質問 私はKerberosチケットを持っていないので(aklogが探しているレルムではありません)、aklogを呼び出すことができません。そのようなチケットも取得できません。I AFSがどのように設定されているかはわかりませんが、機能します。

現在、Kerberosチケットは/ tmp/krb5cc *に「格納」され、KRB5CCNAMEと呼ばれる変数によってポイントされます。 Kerberosとscreen/tmuxでこの問題が発生した場合は、kinitを実行するか、KRB5CCNAMEを設定して新しいチケットを古いシェルに移植できます。

AFS資格情報がどのようにポイントされているのか、そして同様にそれらを外側のシェル(AFSアクセス権を持つSSHで接続するもの)から内側のシェル(screen -rの後に取得するもの)に移植できるかどうか疑問に思います。これ以上のAFSアクセスはありません)。両方のシェル間で変更された関連する環境変数はないようです。 strace tokensは、/proc/fs/openafs/afs_ioctlにアクセスするだけであることを示しています。これは、プロセスに関連付けられており、特別なカーネル機能を使用していることを示しています。シェルを閉じて新しいシェルを開かずに、シェルにAFSアクセスを戻す方法はありますか?

2
jdm

Ssh経由でログインし、pam_afs_session.soがアクティブな場合、Kerberosチケットが生成され、それを使用してAFSトークンが作成されます。ログアウトすると、KerberosチケットとAFSトークンの両方が削除されます。

お気づきのとおり、Kerberosチケットはファイルに保存され、AFSトークンはカーネルのPAG(プロセス認証グループ)に保存されます。 2番目のSSHセッションを介して接続すると、pam_afs_session.soライブラリは新しいファイルに新しいKerberosチケットを作成し、新しいPAGに新しいAFSトークンを作成します。

GNUスクリーンセッションでAFSトークンをアクティブに保つ最も簡単な方法は、次のとおりです。

  1. 新しいKerberosチケットファイルを作成します。既存のものはおそらく/ tmp/krb5cc_UID_RANDOMのようなものです。新しいRANDOM文字列で作成します。
  2. 既存のチケットファイルを、作成したばかりの新しいチケットファイルにコピーします。
  3. KRB5CCNAME環境変数を作成した新しい名前に変更(およびエクスポート)します。
  4. 起動画面-r
  5. これで、外側のシェルからログアウトできます。これにより、古いチケットファイルからKerberosチケットが削除されますが、コピーは引き続き内部シェルで有効です。ただし、AFSトークンも削除されるため...
  6. 内部シェルに再接続するときは、aklogを実行します。これにより、(保存した)Kerberosチケットが新しいAFSトークンにコピーされます。有効期限が切れるまで有効です。内部シェルを終了する前に、おそらくkdestroyを実行して、不要になったKerberosチケットを削除する必要があります。
2
Steven Schoch