AFS ファイルを使用する Ubuntu (Linux) では、「aklog」を実行して AFS ファイルにアクセスする前に、「kinit」で Kerberos チケットを取得する必要があります。「aklog」を実行する前に「kinit」を実行するために、AFS に保存されている「keytab」ファイルにアクセスできません。Catch-22のようです。助言がありますか?私は現在次のようなことをしています: kinit user@realm ; これは Mac OSX では機能しませんが、Linux では機能します。「kinit」と「aklog」でアクセスを確立するまで、AFS アクセス権がない無人の「cron」ジョブを実行しています。
1 に答える
通常、キータブを使用して AFS への認証を行う予定がある場合は、キータブを /afs に配置しません。これは、金庫の鍵を金庫の中に保管するようなものです。あなたが言ったように、それはcatch-22です。また、実行しないでくださいecho "password" | kinit
。キータブの保存をどこかにパスワードを保存することに置き換えているだけであり、キータブはecho
パスワードをあちこちに配置するための優れた代替品となることを目的としています。スクリプトの任意の時点でecho "password" | kinit
、別のユーザーがプロセス リストを参照してそのパスワードを表示できる可能性があるため、これはあまり安全ではありません。
通常、cron ジョブへの認証済み AFS アクセスを提供する方法は、keytab をローカル ディスクに置き、スクリプトにアクセスさせることです。次に、keytab に従来の Unix パーミッションを設定して、自分だけがアクセスできるようにします。ローカル ディスクにアクセスできないと、これが少し難しくなりますが、可能です。いくつかのアプローチを考えることができます:
Cron に資格情報を取得させる
一部の環境では、ユーザーの cron ジョブを実行するときに、特別な「cron」-y ユーザーの資格情報を取得する機能があります。つまり、「dguertin」だけでなく、ユーザー「cron.dguertin」の下で実行されるように cron ジョブにサインアップします。cron システム自体は、「cron.dguertin」として認証するためのキータブにアクセスできます。AFS ACL を設定して、cron.dguertin が必要なファイルにアクセスできるようにすることができます。これらのシステムがどのように機能するかについての洞察はありませんが、スタンフォード CSやスタンフォード ITなどで聞いたことがあります。
もちろん、これを行うにはシステムをセットアップする必要があります。インフラストラクチャを制御できない場合、これは役に立ちません。
Cron への認証情報の埋め込み
誰もあなたのcrontabの内容を読むことができないと仮定すると(これは従来のcronに当てはまるので、使用しているどのcronセットアップでも当てはまると思います)、実際にはcrontabファイル自体に資格情報を埋め込むことができます. ただし、前述のようにecho
、パスワードを入力するだけでは通常は得策ではありません。これは、誰かがプロセス リストを見てパスワードを確認できるためです。
cron の一部の実装では、実行するコマンドを指定する前に環境変数を設定できます。例えば:
GUERTIN_PASSWORD=donotuse_TuAk9OgVoigg
# m h dom mon dow command
* * * * * /path/to/script
その後、スクリプトは GUERTIN_PASSWORD 環境変数の値を読み取り、パスワードを kinit にパイプするか、それを使用して暗号化されたキータブ/パスワードを復号化することができます。読み取り後に GUERTIN_PASSWORD 環境変数を設定解除してください。子プロセスに漏れません。
または、実際にキータブ ファイルを cron エントリに直接埋め込むこともできます。キータブはバイナリ データなので少し面倒ですが、かなり短い傾向があります。たとえば、キータブに次の内容があるとします。
$ cat /path/to.keytab | base64
BQIAAABFAAEAC0VYQU1QTEUuQ09NAAdleGFtcGxlAAAAAVUmAlwBABIAILdV5P6NXT8RrTvapcMJ
QxDYCjRQiD0BzxhwS9h0VgyM
次に、次のように cron エントリを作成できます。
GUERTIN_KEYTAB=BQIAAABFAAEAC0VYQU1QTEUuQ09NAAdleGFtcGxlAAAAAVUmAlwBABIAILdV5P6NXT8RrTvapcMJQxDYCjRQiD0BzxhwS9h0VgyM
# m h dom mon dow command
* * * * * /path/to/script
次に、スクリプトで base64 をデコードし、その内容を一時ファイルに書き込んで、次のように実行します。
k5start -U -f "$tmp_keytab" -t -- $rest_of_command
(k5start はaklog
、AFS PAG の実行とセットアップを処理します)。または、kinit/aklog を使用して:
kinit -k -t "$tmp_keytab" "$principal" && aklog
前述のように、コマンドを実行する前に GUERTIN_KEYTAB 環境変数を必ずクリアしてください。
すべての cron 実装で、このような環境変数を個別に設定できるわけではないことに注意してください。一部の cron 実装では、次のようなことを行う必要があります。
* * * * * export FOO=bar; /path/to/script
しかし、これは、関連する環境変数の内容がプロセス リストを介して表示されるため、この状況では役に立ちません。
keytab を AFS に入れる
実際にはキータブを AFS に配置し、IP アドレスを介してアクセスを制限することができます。これにより、最初に AFS に認証する必要なく、クラスターで実行されているホストのみがアクセスできます。OpenAFS には、IP 経由のアクセスを制限するための機能がいくつかありますが、少し扱いにくいです。通常、これらを使用することもお勧めしませんが、場合によっては (cron ジョブやその他のバッチ ジョブなど)、選択の余地があまりありません。これらは通常、「IP ACL」または「ホスト ACL」と呼ばれます。
これを行うには、必要な IP アドレスのユーザーを作成します。
$ pts createuser 198.51.100.23
そして、それを通常のように AFS ACL に追加するだけです:
$ fs setacl /path/to/dir 198.51.100.23 rl
ある範囲の IP へのアクセスを制限したい場合、AFS ホスト ACL には IP をワイルドカード化するいくつかのプリミティブ機能があります。
$ fs setacl /path/to/dir 198.51.100.0 rl
これにより、198.51.100.0/24 の範囲全体でそのディレクトリを読み取ることができます。IP アドレスの「0」セグメントはワイルドカードとして扱われます。(まだ 198.51.100.0 ユーザーを作成する必要があります。) 複数の範囲または複数の個々の IP へのアクセスを許可する場合は、複数のユーザーにアクセスを許可する場合と同様に、それらを ACL に追加するだけです。
ホスト ACL は、最初に使用してから有効になるまでに数時間かかる場合があることに注意してください。これは、個々のホストの権限がバックグラウンドで定期的に再計算されるためです。これは非常に混乱を招く可能性があるため、これらを使用したい場合は、機能していないように思われる場合は数時間待ってください.
ただし、関連する IP ユーザーを作成できない場合、これは役に立ちません。
キータブを別の場所に置く
または、もちろん、前述のようにキータブをWebサーバーに配置し、WebサーバーにIPアドレスを介したキータブへのアクセスを制限させることもできます。同じアプローチは、キータブの内容をデータベースに配置する場合にも機能し、IP によるデータベースへのアクセスを制限するか、または IP 経由のアクセスを制限できるその他のメカニズムを制限します。
Web サーバー経由でこれを行うには、keytab を /afs のディレクトリに配置し、AFS ACL を制限して、Web サーバーだけがそれを読み取れるようにします (Web サーバーが AFS クレデンシャルで実行されていると仮定します)。次に、特定の IP のみがそのファイルを取得できるように Web サーバーを構成します。
組み合わせ
もちろん、上記のアプローチを組み合わせることもできます。クラスター マシンの IP からのすべてのアクセスを信頼していないが、「cron にパスワードを埋め込む」アプローチに完全に自信がない場合は、上記のメカニズムのいずれかを使用して IP アドレスでキータブへのアクセスを制限できます。上記の環境変数で crontab エントリに埋め込んだパスワードを使用してキータブを暗号化します。
また、これらのソリューションの多くはかなり面倒で、回りくどいものであることも認識しています。これが、いくつかのサイトがユーザーの cron 固有の資格情報を取得するための独自のメカニズムを持っている理由です。そのため、これらすべてを実行する必要はありません。cronjobs だけがアクセスできるキータブをローカルに持たない場合、これらの他のアプローチはすべて明らかにハックです。