要約

  • draft-ietf-nfsv4-posix-acls-02 は、POSIX Draft ACLを直接扱い、アクセス判定に実際に使うモデルとその作用域を示す四つの任意属性を提案する。
  • ファイル単位の作用域では、旧クライアントの一度のACL書込みが真の形式を切り替え、反対側の許可規則を削除し得る。AUDIT/ALARMは別の面に残る。
  • 確かな証拠は、機能、真の形式、順序付き書込み、一貫した読戻し、主体、Mask評価、実操作の判定、ファイル結果を分離して結ぶ。

同じファイルを別のモデルが支配する瞬間

あるディレクトリはPOSIX Draft ACLを真の形式としている。名前付きグループには書込みビットがあるが、Mask ACEが実効上限を狭めている。対応クライアントから見ると、アクセスACLもデフォルトACLも期待どおりである。

そこへ拡張を知らない旧クライアントが標準のdaclを書き込む。acl_trueform_scopeがファイル単位なら、成功したSETATTRはそのオブジェクトをACL_MODEL_NFS4へ切り替え、POSIXのアクセスACLとデフォルトACLを削除できる。成功は保存を意味しない。成功したのは、別モデルへの移行かもしれない。

逆も同じである。非空のPOSIX ACLを書けば、NFSv4のALLOW/DENY daclが消え、真の形式がPOSIX Draftへ変わり得る。一方、AUDIT/ALARM ACEは論理的に分離されている。「ACL更新済み」という一行では、現在どの規則が拒否権を持つか分からない。

2026年9月7日付のrevision 02は、NFSv4作業部会の有効なStandards Track Internet-Draftで、2027年3月11日に失効予定である。RFCでも必須機能でもなく、製品準拠や導入実績の証明でもない。

四属性が解釈の座標を与える

acl_trueformはNFSv4、POSIX Draft、ACLなしを区別する。acl_trueform_scopeはその選択が一つのオブジェクト、ファイルシステム、サーバー全体のどこまで及ぶかを示す。posix_access_aclは現在のオブジェクトを制御し、posix_default_aclはディレクトリから将来の子へ渡す継承材料である。

実装条件は連動する。真の形式属性の片方を支援するなら両方が必要であり、POSIX ACL属性の片方を支援するファイルシステムは、両ACL、両真形式属性、modeとmode_umaskの挙動を備えなければならない。

しかしNFSv4.2接続だけでは足りない。クライアントが拡張を知らない場合も、exportが提供しない場合もある。ファイル単位の作用域なら、隣接する二ファイルが別モデルで動く。証跡にはサーバー、export、セッション、filehandle、属性ビットマップ、時刻が要る。

Maskを読まない権限表示は過大である

拡張POSIX ACLには、所有者、所有グループ、その他に加え、名前付きユーザー/グループとMaskがある。所有グループと名前付きグループでは、エントリとMaskの双方に同じビットがある時だけ権限が有効になる。

したがってグループエントリにwriteが見えても、Maskが落としていれば書けない。低位9ビットだけでも不十分で、拡張ACLのgroup modeはGroup_objではなくMaskを反映する。

判定の再現には、認証主体、名前解決、有効な補助グループ、所有者、該当ACE、Mask、要求操作が必要である。ACL配列が完全でも、主体が欠ければ答えは出ない。

デフォルトACLは親自身の許可ではない

アクセスACLは現在のオブジェクトを支配する。デフォルトACLはディレクトリだけに存在し、将来作られる子のACLを構成する。親ディレクトリへの現在のアクセスを許可するものではない。

子の作成時には、継承権限と指定modeの低位9ビットを交差させる。そのためmode_umaskが必要となる。OPENやCREATEではmodeを与え、継承し、その後に明示POSIX ACLを適用する。

後日監査するには、作成時点の親デフォルトACL、要求mode/umask、適用順、子の最終読戻しを保存しなければならない。今日の親ACLから昨日の子を復元することはできない。

原子的読取りは一時点の証明である

同一SETATTRでmodeとPOSIX ACLを指定する場合、modeが先である。NFSv4 acl/daclとPOSIX属性を同じビットマップに混ぜればNFS4ERR_INVALとなる。読取りでは、並行SETATTRに対してmode、真の形式、ACLを原子的に取得することが推奨される。

この仕組みは複数時点の値を混ぜない。しかし読取り直後の変更は防がない。クラスタ内の別ノードが違う本人性マッピングを使う可能性もある。原子スナップショットはepoch付き証跡であり、永続的許可ではない。

空配列は「制限なし」を意味しない

ファイル単位のPOSIX真形式で、長さゼロのposix_access_aclを書けば、ACLを削除してACL_MODEL_NONEへ戻せる。他方、真の形式がNFSv4なら、POSIX属性の読取りも空配列を返す。

acl_trueformがなければ両者は同じに見える。一方はmodeビット支配、他方はNFSv4 ACL支配かもしれない。空を自動的に「自由」と解釈することは、未知を許可へ変換する危険な正規化である。

実装欄は限定された実行証拠

草案は実験的なFreeBSD実装とLinuxパッチを記録し、getfacl/setfaclや多数ACEの試験が動作したとする。ただし情報は貢献者提供で独立検証されておらず、IETFの承認や製品一覧ではないと明記する。

これは実現可能性の証拠である。リリース採用、既定有効化、全モデル移行、全本人性ケース、実アクセス判定の正しさまで拡張してはならない。

八つの受領証でアクセスを語る

必要なのは、正確な拡張機能、対象の真の形式と作用域、順序どおり受理された書込み、原子的読戻し、主体と有効グループ、ACE/Mask/mode/継承計算、具体的操作の許否、そしてファイルとアプリケーションに現れた結果である。

新属性は前半四段を強くする。後半四段を代行しないからこそ、運用上の価値がある。

出典