この文書は、Gfarm の 認証に関する概要を説明します。
各認証方式を表にまとめると下記の通りとなります。
名称 | ニーモニック | 暗号化 | 相互認証 | サーバ間認証 | ドキュメント |
---|---|---|---|---|---|
sharedsecret | s | × | × | ○ | auth-sharedsecret.html |
tls_sharedsecret | S | ○ | ○ (*1) | ○ | auth-tls.html |
tls_client_certificate | T | ○ | ○ | ○ | auth-tls.html |
sasl_auth | a | × | ○ (*1) | × | auth-sasl.html |
sasl | A | ○ | ○ (*1) | × | auth-sasl.html |
kerberos_auth | k | × | ○ | ○ | auth-kerberos.html |
kerberos | K | ○ | ○ | ○ | auth-kerberos.html |
gsi_auth | g | × | ○ | △ (*2) | auth-gsi.html |
gsi | G | ○ | ○ | △ (*2) | auth-gsi.html |
ニーモニックは、「gfhost -l」コマンド出力の第二欄で認証方式を示すために 用いられる形式です。 暗号化通信には大文字を、平文通信には小文字を割り当てています。
平文での通信は盗聴やTCPのコネクション ハイジャックといった攻撃に対して 脆弱であるため、 広域での利用時には暗号化された通信を用いる認証方式の利用を推奨します。 平文による通信は、サイト内での利用時に性能を追及したい場合のために 用意していますが、近年のCPUには暗号化のための命令セットが用意されているため、 暗号通信を用いた場合も必ずしも性能が大きく低下するとは限りません。
Gfarm のサーバーは認証されたクライアントからのみ接続を許します (ただし health check 用に gfsd のロードアベレージを取得する UDP 通信のみは 例外で 認証なしで動作します)。 この認証時に、逆方向の認証すなわちクライアントがサーバーを認証するか否かは 認証方式に依存します。 これを表の相互認証の項に記載しています。 相互認証を行なわない場合、DNS spoofing、BGP経路ハイジャック、ARP spoofing と いった手段でサーバーを詐称する攻撃に対して脆弱であるため、 特に広域での利用時には相互認証を行なう認証方式の利用を推奨します。
サーバー間認証の項には、gfmdおよびgfsdのようなサーバー間の認証において 利用できるか否かを記載しています。
(*1) この印のついた認証方式では、名称の意味する方式は サーバーによるクライアント認証で用いられます。 クライアントによるサーバ認証には、サーバのTLS証明書を用います。
(*2) GSI認証のサーバ間での利用は、 少なくとも Ubuntu 22.04 では不具合があることが判明しています。 CentOS 8 系では動作しています。
auth enable sharedsecret *これは config-gfarm のデフォルトである -a sharedsecret の例で、 全てのサイトに対して sharedsecret を認証方式として用います。
authディレクティブの最初のパラメータには enable か disable のいずれかを記載します。
authディレクティブの次のパラメータには認証方式か「*」を記載します。 「*」の場合はすべての認証方式を意味します。
authディレクティブの次のパラメータには対象となるホストのホスト名ないし IPアドレスを以下のいずれかの形式で記載します。
ホスト指定形式 | 例 | 意味 |
---|---|---|
* | * | すべてのホスト |
ホスト名 | host1.example.net | 指定したホスト |
.ドメイン名 | .example.net | 指定したドメインに属するホスト |
IPv4アドレス | 192.168.0.1 | 指定したIPアドレスのホスト |
IPv4アドレス/ネットマスク | 192.168.0.0/24 | 指定したIPアドレスの範囲に適合するホスト |
同一の認証方式の間では、auth ディレクティブは記述の順番に意味があり、上から適用されていきます。 このため以下の例だと
auth enable * 192.168.0.0/24 auth disable * .blacklist.example.net auth enable tls_client_certificate *次の意味になりますが
auth enable tls_client_certificate * auth disable * .blacklist.example.net auth enable * 192.168.0.0/24下記の意味になってしまいます。
異なる認証方式の間の順序に意味はなく、 クライアントは enable とされている認証方式を、以下の順序で試行します。
auth_trial_order tls_client_certificate sasl