SSHFSのマウントはVPNフックではなくユーザーに属する
インターフェースを立ち上げる権限は、共有をマウントする権限ではない。ユーザーセッションでのマウントを手作業で証明し、その後トリガーに同じ文脈を要求させる。
この前提は吸収しやすく、気づきにくい。VPN接続フックはrootで動作するので、それが開始するマウントもrootで整えるべきだという考えだ。その推論は、デスクトップユーザーが開けないチームディレクトリ、トリガーとなるサービスが再起動すると消えるマウント、そして誰も答えられない文脈での認証プロンプトを生む。フックとマウントは別の仕事であり、特権が必要なのは片方だけだ。
神話:ネットワークの特権はマウントの特権を意味する
インターフェースを立ち上げることとファイルサーバーに認証することは無関係な能力であり、通常は別のアカウントに属する。VPNコンポーネントにはルートとインターフェースを変更するための十分な特権が要る。ファイルサーバーのアカウントには鍵かパスワード、ホスト鍵についての判断、マウント先のホームディレクトリが要る。二つ目の仕事の資格情報を一つ目の身元に渡すことが、ネットワークサービスがユーザーの鍵を抱え込む道だ。
単独ユーザーのノートPCでは同じアカウントかもしれないが、その偶然は設計ではない。
特権を持つフックがマウントを行うと、三つのことが静かに狂う。マウントはrootの所有になり、ユーザーのエージェントはその環境におらず、失敗は関心のあるセッションではなくネットワークサービスのログに現れる。どれもマウントコマンドにオプションを足しても直らない。身元を持つセッションに仕事を渡すことで直る。
なぜマウントはログイン中のユーザーに属するのか
SSHFSのマウントは、それを作成したプロセスが所有するFUSEマウントであり、アクセスは親ディレクトリのモードではなくその所有に従う。リファレンスは通常のユーザーと、そのユーザーが所有するマウントポイントを推奨しており、rootプロセスが作ったマウントが他の誰にとっても扱いにくいのはまさにそのためだ。マウントポイントの権限変更では直らない。障害物はマウント自体の所有者だからだ。
ユーザーセッションの中で手作業の基準から始める。ホームディレクトリ配下の既存の空のマウントポイント、サーバー上の許可されたアカウント、承認済みの手順ですでに検証したホスト鍵を用意する。一度手でマウントして使ってみる。自動化が存在する前に身元の経路が機能することを証明できるからだ。コマンドが必要としたもの、つまりアカウント名、エクスポートパス、プライベートなホスト名を記録する。動く手作業のマウントこそ、トリガーが再現すべき仕様なので、その通りの文脈を自動版にも引き継ぐ。
sshfs [email protected]:/exports/team "$HOME/mnt/team"その行の名前とパスはすべてプレースホルダーとして扱う。アカウントとエクスポートも含む。VPNアカウントのパスワードが自動的にストレージアカウントの資格情報になるわけではない。
トリガーはセッションに何を求めるべきか
サポートされる構成はネットワークイベントからユーザーセッションへの要求であり、借りた資格情報ではない。トリガーは意図した接続に限定する。名前かUUIDで指定し、たまたまtun0という名前のインターフェースに任せない。この一つの変更で、二つ目のプロファイル、テスト用トンネル、同僚のデバッグセッションがマウントを始めるのを防げる。
セッション側の動作は、意図した既存のマウントを探し、その後で一度だけ範囲を限った試行を行うべきだ。
ポーリングのたびに再試行せず、サーバーに到達できない間ずっと資格情報を求め続けない。どちらも一時的な障害をアカウントのロックアウトに変えてしまう。無人サービスは別の設計であり、独自の実行文脈で承認済みの資格情報とホスト検証の取り決めを持つ。誰かがグラフィカルエージェントを解除したことに頼ることはできない。コードをどこに置くかを選ぶ前に、どちらを作っているのかを決める。ここでの混乱の多くは、片方を作って他方を期待することから来る。
切断はファイルシステムのイベントであり、フックのイベントではない
計画された切断では、ファイル操作を終え、そのファイルシステム種別でサポートされたコマンドを使ってマウントしたユーザーのセッションからアンマウントすべきだ。フックを早く返すために強制切断するのは、アプリケーションが作業ディレクトリを失い、ユーザーが自動化への信頼を失う道だ。使用中のマウントにはアプリケーション層の判断、たとえばファイルを閉じるか書き込みを止めることが必要で、より強いシグナルではない。フックの終了状態は最適化すべきものではない。
fusermount3 -u "$HOME/mnt/team"予期しない消失は別のケースであり、SSHFSは中断された操作がトランスポートの再接続中にブロックすることがあると記している。
再接続オプションはトランスポートを回復するが、その再接続より前に開いたファイルは依然としてエラーを返し、開き直しが必要になりうる。VPNが戻ったことは、以前のハンドルや未保存の作業について何も証明しない。障害時に望む挙動を選ぶ。一時停止か、エラーの表示か、意図的な再マウントか。何かがそれに依存する前に、使い捨てのファイルで試す。