この文書は、Gfarm の SASL 認証で必要な設定について説明します。
Gfarm における SASL認証には以下の2種類があります。
mech_list: 利用するSASL認証メカニズムを空白で区切って指定 …その他、メカニズム固有の設定が必要な場合は記述するmech_list には以下のように空白で区切って複数のメカニズムを 記述できます。
例:
mech_list: PLAIN XOAUTH2このファイルが存在しない場合、システムにインストールされている SASL メカニズムすべてが利用候補となります。
XOAUTH2 を除く各メカニズムに関する設定については、 Cyrus SASL のドキュメントを参照してください。 XOAUTH2 メカニズムについては以下を参照してください。
XOAUTH2 メカニズムを利用する場合、 cyrus-sasl-xoauth2-idp パッケージをインストールし、 Cyrus SASL のサーバー設定ファイルに 以下の内容の設定を gfarm.conf という名称で置きます。
mech_list: XOAUTH2 xoauth2_scope: JWTのサーバー側検証時にJWTへ要求する scope xoauth2_aud: JWTのサーバー側検証時にJWTへ要求する audience xoauth2_user_claim: JWT中でユーザーIDとして用いるclaimのkey名 xoauth2_issuers: 信頼できるJWT発行サーバのURLのリスト具体的な設定は OAuth IdP の構成に依存しますが、たとえば以下のようになります。
mech_list: XOAUTH2 xoauth2_scope: hpci xoauth2_aud: hpci xoauth2_user_claim: hpci.id xoauth2_issuers: https://keycloak.example.com/auth/realms/hpci https://keycloak.example.org/auth/realms/hpcixoauth2_issuers を設定しない場合、 どのサーバが発行した JWT でも受け入れます。 しかしこれはセキュリティ的に危険ですので、 必ず信頼できるサーバのみに制限するように設定してください。
サーバー側は OAuth IdP へアクセスしますが、このときに Web proxy サーバーを 介す必要がある場合にはさらに下記の設定も追加します。
proxy: http://proxyサーバー名:proxyポート番号/「proxyサーバー名」および「proxyポート番号」は、適宜修正してください。
Ubuntu では、gfsd との認証が "unable to open Berkeley db /etc/sasldb2: Permission denied" により失敗することがあります。その場合、 /etc/sasldb2 の所有者を変更することにより解決します。
% sudo chown _gfarmfs /etc/sasldb2
auth enable sasl *あるいは
auth enable sasl_auth *また以下のような設定を追加して利用するメカニズムを限定してください。
sasl_mechanisms "PLAIN XOAUTH2"セキュリティ確保のため、実際に利用するメカニズムのみを指定してください。
SASLユーザ名とGfarmのユーザ名が異る場合は、SASLユーザ名を以下のように 登録します。
% gfuser -A Gfarmユーザ名 SASL SASLユーザ名
sasl_mechanisms "ANONYMOUS" sasl_user "dummy-user-name"anonymous メカニズムの設定にはユーザ特有の情報は含まれていませんから、 gfarm2.conf に設定することも可能です。
sasl_mechanisms "PLAIN" sasl_user "ユーザー名" sasl_password "パスワード"このファイルが他のユーザーに読みとられないように、 chmod(1) コマンドを用いてファイルのモードを 0600 ないし 0400 に 設定してください。
sasl_mechanisms "LOGIN" sasl_user "ユーザー名" sasl_password "パスワード"このファイルが他のユーザーに読みとられないように、 chmod(1) コマンドを用いてファイルのモードを 0600 ないし 0400 に 設定してください。
sasl_mechanisms "XOAUTH2" sasl_user "ユーザー名"
Cyrus SASL の設定を置くディレクトリ ($(pkg-config --variable=libdir libsasl2)/sasl2) に 以下の内容の設定を gfarm-client.conf という名称で置くと、 上記 sasl_user の指定は省略できます。
xoauth2_user_claim: JWT中でユーザーIDとして用いるclaimのkey名こうするとユーザ固有の設定は不要となりますから、 .gfarm2rc では特に設定を行なわず、 sasl_mechanism の設定を gfarm2.conf で行なうことも可能となります。
さらに環境変数 JWT_USER_PATH で指定されたファイル、 あるいはもし環境変数が設定されていない場合には ファイル /tmp/jwt_user_u<自身のUNIX_UID>/token.jwt に、 XOAUTH2 で用いるアクセストークンを置いてください。 このファイルが他のユーザーに読みとられないように、 chmod(1) コマンドを用いて JWT ファイルのモードを 0600 ないし 0400 に 設定してください。
jwt-logon コマンドや jwt-agent コマンドを用いると、 トークンを取得してこのファイルに適切なモードで JWT を設定することができます。
環境変数 JWT_USER_PATH に設定されいている値の最初の文字が「!」である場合、 それ以降の文字列をコマンドと見なして実行し、そのコマンドの出力を XOAUTH2 で用いるアクセストークンと見なします。
なお環境変数 GFARM_CONFIG_FILE で指定されたファイル、 あるいはもし環境変数が設定されていない場合には ホームディレクトリの .gfarm2rc ファイル中の sasl_password ディレクティブで、 JWT の内容を直に設定することも可能です。 この場合、他のユーザーに読みとられないように、 chmod(1) コマンドを用いてファイルのモードを 0600 ないし 0400 に 設定してください。