netatalk.io

Netatalk 4.5.0

認証

AFP 認証の基本

Apple は AFP クライアントとサーバー間の認証のために “User Authentication Methods” (UAM) と呼ばれる柔軟なモデルを選んだ。AFP クライアントがまず最初に AFP サーバーと接続するとき、 サーバーが提供している UAM のリストを問い合わせる。そして、クライアントがサポートしている最も強い暗号化の UAM を選ぶ。

数個の UAM は時間をかけて Apple が開発してものであり、サードパーティの開発者によるものもある。

Netatalk でサポートされている UAM

Netatalk はデフォルトで以下の UAM をサポートしている:

コンパイル時に Kerberos サポートが有効になっている場合、Netatalk は以下もサポートする:

uam list” を Global セクションで定義することによって、どの UAM を有効化すべきか設定できる。afpd はどの UAM を使っているのか、UAM を有効化した時に問題が起こっているのかどうかを、netatalk.log あるいは起動時の syslog にログとして保存する。asip-status も AFP サーバーで有効な UAM の問い合わせをするのに使うことができる。

ある特定の UAM がサーバー上で有効であるということが、直ちに、 クライアントもそれを使うことができるということを意味するわけではない。クライアント側でのサポートもまた必要である。Classic Mac OS が使われている古い Macintosh では、DHCAST128 のサポートは AppleShare クライアント 3.8.x 以降には存在している。

macOS では、AFP クライアントをもっと冗長にするクライアント側のテクニックがいくつかあるので、使用する UAM と折り合いをつけるまでに何が起こっているのか見ることができる。このヒント と比較してみるとよい。

どの UAM を有効にすべきか?

それは主に、ニーズとサポートする必要がある macOS クライアントの種類に依存する。ネットワークが macOS (Mac OS X) クライアントのみで構成されている場合は、DHX2 で十分であり、強力な暗号化と PAM(あるいはシステムのパスワードデータベース)との統合を提供する。

より強力なセキュリティを望み、別の検証子ファイルの追加のメンテナンスオーバーヘッドを気にしない場合は、SRP が最適な選択肢である。

様々な UAM の技術的実装についてのより詳細な概要については、Apple の File Server Security ページを見ていただきたい。

パスワード保管

Randnum と SRP はシステムのパスワードを直接使用しない。両方とも afppasswd で管理される別のファイルに依存している:

キーファイルには、オプションの改行を伴う 16 個の 16 進数文字が正確に含まれている必要がある。 例の値を再利用するのではなく、各サーバーのために新しいランダムなキーを生成すること。

認証バックエンドの切り替え

いくつかの UAM は別の認証バックエンドを使えるようにしてある。いわゆる uams_clrtxt.souams_dhx.so 及び uams_dhx2.so である。これらは /etc/passwd (/etc/shadow) からの古典的 UNIX パスワードでも、システムがサポートしていれば PAM でもどちらでも使うことができる。 uams_clrtxt.souams_passwd.so ないしは uams_pam.so へのシンボリックリンクとして、 uams_dhx.souams_dhx_passwd.so ないしは uams_dhx_pam.so へのシンボリックリンクとして、さらには uams_dhx2.souams_dhx2_passwd.so ないしは uams_dhx2_pam.soへのシンボリックリンクとすることができる。

もし Netatalk の UAM フォルダー(デフォルトで /etc/netatalk/uams/)が以下のようであれば、PAM さもなくば古典的な UNIX パスワードを使用しているわけである。

uams_clrtxt.so -> uams_pam.so
uams_dhx.so -> uams_dhx_pam.so
uams_dhx2.so -> uams_dhx2_pam.so

PAM を使用することで最も有利なのは、例えば LDAP 経由、あるいは NIS 経由などの集約した認証環境に Netatalk を統合できることである。そのような環境でのユーザーのログイン資格情報 (credentials) の保護は、UAM そのものが供している暗号化の強さにもまた依存している。 ということを常に念頭においていただきたい。

Netatalk UAM を概要表

公式にサポートされているUAMの概観。

UAM No User Auth Cleartxt Passwrd RandNum Exchange DHCAST128 DHX2 Kerberos V SRP
パスワード長 ゲストアクセス 最大 8 文字 最大 8 文字 最大 64 文字 最大 255 文字 Kerberos チケット 最大 255 文字
サポートするクライアント 全ての Mac OS のバージョンで組み込み済 10.0 を除く全ての Mac OS のバージョンで組み込み済。 最近のバージョンでは明示的にアクティブ化する必要がある。 ほとんど全ての Mac OS のバージョンで組み込み済 AppleShare クライアント 3.8.4 より組み込み済で、3.8.3 では macOS の AFP クライアントに統合したプラグインとしての用意あり。 Mac OS X 10.2 より組み込み済 Mac OS X 10.2 より組み込み済 Mac OS X 10.7 より組み込み済
暗号化 クライアント・サーバー間で認証なくゲストアクセス可能。 パスワードがネットワーク上を暗号化されずに伝わっていく。 字句そのままに悪いので、可能ならば全面的に使用を回避すべき (注意:NetBoot サービスの提供には ClearTxt UAM が必要) DES, 56 ビットに相当する 8 バイトの乱数がネットワーク上に送出。オフラインの辞書攻撃に対して脆弱。 パスワードがサーバー上で平文であることが求められる。 パスワードは 128 ビット CAST 128 で暗号化され、ユーザーはサーバーに認証されるが、“逆もまた真”ではない。このため中間者攻撃に対して弱い。 パスワードは CAST 128、CBC モードを用いて暗号化される。 ユーザーはサーバーに認証されるが、“逆もまた真”ではない。このため中間者攻撃に対して弱い。 パスワードがネットワークを通して送られることがない。サービスプリンシパル検知の方法が原因で、 この認証方法は中間者攻撃に対して脆弱である。 パスワードは決して送られない。SRP は検証子と相互証明 (M1/M2) を使用してクライアントとサーバーの両方を認証し、中間者攻撃に対する保護を提供する。
サーバーがサポートする共有オブジェクト uams_guest.so uams_cleartxt.so uams_randnum.so uams_dhx.so uams_dhx2.so uams_gss.so uams_srp.so
パスワードの保管方法 なし システム認証ないしはPAM afppasswd ファイル (DES暗号化) システム認証ないしはPAM システム認証ないしはPAM Kerberosキー配布センター afppasswd.srp という検証子ファイル

macOS で非推奨のレガシー UAM を有効にする方法については、Apple サポートのナレッジベース記事 Connecting to legacy AFP services を参照すること。ただし、これを本番環境で行うことは推奨されない。なぜなら、これにより AFP ユーザー資格情報がネットワークトラフィックにさらされる可能性があるからである。

多くのオープンソースやその他のサードパーティ製 AFP クライアントが存在する。。サポートされている UAM のリストについては、それらのドキュメントを参照すること。

パスワードの保存と変更

Netatalk はクライアントがサーバー上でパスワードを保存または変更できるように構成できる。afp.confGlobal セクションの save password オプションはこの機能を有効にするが、AFP クライアントもこのフラグをサポートし、尊重する必要がある。

クライアントがパスワードを変更できるようにするには、set password オプションを設定すること。これは使用している UAM に依存し、すべての UAM がこれをサポートしているわけではない。特に、PAM ベースの UAM はこの機能をサポートするが、古典的な UNIX パスワードに基づく UAM はサポートしない。