web-dev-qa-db-ja.com

NFS v4ACL継承の問題-「i」フラグは設定されていますが不要です

私がしようとしているのは、ディレクトリ、子と孫、ひ孫などのディレクトリとファイルがLinuxで削除(「D」)フラグを継承できるようにするNFS v4ACLを追加することです。サーバーの基盤となるファイルシステムはxfsとです。

私も特に詳しくはありません。

サーバーはCentos6.3、クライアントはCentos6.4です。

私がmanページを読んだことによると、「i」フラグは、このACLを子ファイル/ディレクトリに設定することを意味しますが、現在のディレクトリには適用しないでください。親(/var/www/tauweb)に 'i'フラグを設定していませんが、作成されたすべての子dirに設定されているようです。

Dir /vaw/www/tauwebでnfs4_getfaclを使用して次のACEを書き込むと、どうなりますか。

A::OWNER@:rwaDxtTcCy
A::GROUP@:rwaDxtcy
A::EVERYONE@:rxtcy
A:fdi:OWNER@:rwaDxtTcCy
A:fdi:GROUP@:rxtcy
A:dg:[email protected]:rwaDxtcy
A:fdi:EVERYONE@:rxtcy

システムが実際にこれを書き込むということです:

[root@tau www]# nfs4_getfacl tauweb/
A::OWNER@:rwaDxtTcCy
A::GROUP@:rwaDxtcy
A:g:[email protected]:rwaDxtcy
A::EVERYONE@:rxtcy
A:fdi:OWNER@:rwaDxtTcCy
A:fdi:GROUP@:rxtcy
A:fdig:[email protected]:rwaDxtcy
A:fdi:EVERYONE@:rxtcy

最後から2番目のユーザーtauエントリの「i」に注意してください。 ACEを編集したときには設定されていませんでしたが、すぐに表示されました。システムによって追加されたようです。

私が見つけたすべてのドキュメントを読むと、ACEの最上位セットの最初のコロンの後の「dg」によってACLが子dirに継承されるはずです(私が理解しているように、「g」はプリンシパルがグループであり、ユーザー)。

ここで、「i」フラグは明らかに、このACEを継承させることを意味しますが、実際のパーマチェックでは考慮しません。

次に、子dir /var/www/tauweb/d2が作成されると、次のものが取得されます。

[kkassahn@tau tauweb]$ nfs4_getfacl d2/
A::OWNER@:rwaDxtTcCy
A::GROUP@:rxtcy
A:g:[email protected]:rxtcy
A::EVERYONE@:rxtcy
A:fdi:OWNER@:rwaDxtTcCy
A:fdi:GROUP@:rxtcy
A:fdig:[email protected]:rwaDxtcy
A:fdi:EVERYONE@:rxtcy

そして孫/var/www/tauweb/d2/d3はこれらを取得します:

[kkassahn@tau tauweb]$ nfs4_getfacl d2/d3/
A::OWNER@:rwaDxtTcCy
A::GROUP@:rxtcy
A:g:[email protected]:rxtcy
A::EVERYONE@:rxtcy
A:fdi:OWNER@:rwaDxtTcCy
A:fdi:GROUP@:rxtcy
A:fdig:[email protected]:rwaDxtcy
A:fdi:EVERYONE@:rxtcy

これで、d2は削除可能になります-親/ var/www/tauweb hasであるため

A:g:[email protected]:rwaDxtcyACE。ただし、そのACEは継承されません。

A:g:[email protected]:rxtcyのみがd2とd3に適用されますが、継承しますが、参照はしません
A:fdig:[email protected]:rwaDxtcyは、子供、孫などに継承されます。

どんな助けや提案も大歓迎です、ありがとう。

4
Jason Tan

この問題の原因を見つけました。 NFS v4 ACLは、ユーザーのumaskを適用しているようです。私のユーザーは002のumaskを持っていたので、他のユーザーへの書き込みがないために、「w」「a」「d」および「D」フラグが削除されていました。

私の知る限り、この動作はPOSIXACLとは異なります。

いずれにせよ、私にとっての解決策は、ユーザーのumaskを0に設定することでした。

私の場合、ユーザーの1人がApacheだったので、umask 000/etc/init.d/httpに設定しました。

他のユーザーはすべてchrootされたSFTPユーザーであり、ssh pamconfigでpam_umaskを使用してumask000を設定しました。

私の友人はここで問題のいくつかの議論を見つけました: http://www.spinics.net/lists/linux-nfs/msg27799.html

4
Jason Tan