2012-03-09
Gluster3.2.5のWindows NFSクライアントに関するパッチ
Gluster3.2.5 + Windows Server 2008 R2(NFS Client)の環境でファイル/フォルダが削除できないという問題に遭遇したので、ワークアラウンドのパッチを書きました。
[root@piyodesk glusterfs-3.2.5]# diff -uprN xlators/nfs/server/src/nfs3-helpers.c.orig xlators/nfs/server/src/nfs3-helpers.c
--- xlators/nfs/server/src/nfs3-helpers.c.orig 2012-03-09 07:27:02.979568607 +0900
+++ xlators/nfs/server/src/nfs3-helpers.c 2012-03-09 07:28:01.889112681 +0900
@@ -578,7 +578,7 @@ nfs3_accessbits (int32_t accbits)
accresult |= ACCESS3_READ;
if (accbits & POSIX_WRITE)
- accresult |= (ACCESS3_MODIFY | ACCESS3_EXTEND);
+ accresult |= (ACCESS3_MODIFY | ACCESS3_EXTEND | ACCESS3_DELETE);
/* lookup on directory allowed only in case of execute permission */
if (accbits & POSIX_EXEC)
@@ -595,7 +595,7 @@ nfs3_request_to_accessbits (int32_t accb
if (accbits & ACCESS3_READ)
acc_request |= POSIX_READ;
- if (accbits & (ACCESS3_MODIFY | ACCESS3_EXTEND))
+ if (accbits & (ACCESS3_MODIFY | ACCESS3_EXTEND | ACCESS3_DELETE))
acc_request |= POSIX_WRITE;
説明
本パッチ適用前は、ファイル/フォルダを削除しようとすると、こんな感じのエラーが出ます。
NFSv3では、クライアントがファイルアクセスを行う前に、アクセス権限の確認をサーバに対して行います。ここで必要な権限が得られないと、クライアントは上記のようなエラーを返して実際のアクセス処理は行いません。無事に権限が得られると、実際にアクセス処理を行います。
この時、最初に行われるアクセス権限確認は、実際のNFSサーバ上でのUnix/Linuxとしてのアクセス権限の有無とは独立して行われます。ローカルのUnix/Linuxとしてはアクセス権限があってもNFS経由ではアクセスさせたくない、などのアクセス制御を行うことが目的です。
一般にUnix/LinuxのNFSクライアントでは、ファイル/ディレクトリの削除については、NFSサーバから「ACCESS3_MODIFY」というフラグが返ると、権限があるものと認識します。ところが、WindowsのNFSクライアントでは、「ACCESS3_DELETE」というフラグでファイル/ディレクトリの削除権限の確認を行なうようです。(どちらの実装もNFSv3のRFCとは微妙にずれているので、どちらが正解と言えるものでもなさそうですが。。。)
Gluster3.2.5のNFSサーバは、「ACCESS3_DELETE」フラグを返していないのが前述のエラーの原因のようでしたので、「ACCESS3_MODIFY」とあわせて「ACCESS3_DELETE」も返すようにしたのが上記のパッチです。
Gluster3.2.1あたりは、xlators/nfs/server/src/nfs3-helpers.cの実装が若干違うので、上記のパッチをそのまま適用することはできませんが、本質的には同じ問題ですので、「ACCESS3_DELETE」フラグを返すように修正すればOKなはずです。。。
注意
前掲のパッチは、本ブログの筆者が独自に書いたものですので、ご利用にあたっては自己責任でお願いします。(某社が開発中のGlusterFS関連製品とは、一切関係ありません。同じ問題に対するパッチは入るとおもいますが、これと同じパッチかどうかは分かりません。。。。)
追記(2012/03/31)
Upstreamには同じパッチが入りました。http://review.gluster.com/#change,2872
- 47 http://t.co/cVnI2HX5
- 16 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cts=1331251735161&ved=0CDcQFjAA&url=http://d.hatena.ne.jp/enakai00/20111004/1317718773&ctbs=qdr:y&ei=HkpZT-3FNYShiAei29TPDQ&usg=AFQjCNGZWsCuolAsDbQC0wwNJTbJ0CWVoQ
- 14 http://tkoshima.net/wp/archives/1471
- 8 http://b.hatena.ne.jp/t/rhel6
- 6 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=4&cts=1331254180056&ved=0CEgQFjAD&url=http://d.hatena.ne.jp/enakai00/20110915/1316069537&ei=alNZT9z0BtCWiQfGnKDODQ&usg=AFQjCNEZ94td5GLJsRA_a9oK6Rky0IgBtw
- 6 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=5&cts=1331255477561&ved=0CD8QFjAE&url=http://d.hatena.ne.jp/enakai00/20111023/1319358259&ei=r1hZT_TuEa2emQX0_8GvDw&usg=AFQjCNEPZ7YCl_atmG3wNiMQE0wuY9xJ1w
- 5 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=2&cts=1331261588959&ved=0CDMQFjAB&url=http://d.hatena.ne.jp/enakai00/?of=10&ei=ZXBZT-icE-zPmAWdoOjLDw&usg=AFQjCNHXE88DShVJQbz70o6Qo6i5Wf3btw&sig2=MhWXcOIs0w6gSK1mcHyeCA
- 5 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=3&cts=1331255936551&sqi=2&ved=0CDUQFjAC&url=http://d.hatena.ne.jp/enakai00/20100702/1278648805&ei=TlpZT5P0AubFmQW45_mcDw&usg=AFQjCNELOPubFssdxWzSDJ-cjIQ8qa0qAw&sig2=4gBDH3mR1iSY1nl
- 4 http://t.co/4TIkjCuU
- 4 http://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=4&cts=1331081563636&ved=0CEYQFjAD&url=http://d.hatena.ne.jp/enakai00/20111225/1324799889&ei=PbFWT6qnN-iWiALlgc3iBw&usg=AFQjCNFibro6IRqC_ONzYwFV6aj9ylWzHw
