Samba共有権限により、ファイルの書き込みが拒否されましたが、引き続き表示されます


12

非常に奇妙な問題...

リモートのSamba共有:

[javaerpm]
    path = /u/abas/erpm/java
    force user = erpm
    guest ok = yes
    read only = no
    writeable = yes

rootを使用してローカルにマウントコマンド:

root@crunchbang:/mnt/abas# mount -t cifs -o username=guest,rw,exec,auto //10.0.0.2/javaerpm ./javaerpm

ルートは問題なく読み取り/書き込み/ CDを実行できます。

root@crunchbang:/mnt/abas# cd javaerpm
root@crunchbang:/mnt/abas/javaerpm# touch test
root@crunchbang:/mnt/abas/javaerpm# ll
total 1
-rw-r--r--  1  501 users   0 Sep 24 09:55 test
root@crunchbang:/mnt/abas/javaerpm# rm test

しかし、通常のユーザーに切り替えて同じことをすると、次のようになります。

shawn@crunchbang:/mnt/abas/javaerpm$ touch test
touch: cannot touch `test': Permission denied

私ができるllと私はそれがとにかくファイルを書いたことがわかります。

shawn@crunchbang:/mnt/abas/javaerpm$ ll
total 1
-rw-r--r--  1  501 users   0 Sep 24 09:55 test

私もrm問題ありません:

shawn@crunchbang:/mnt/abas/javaerpm$ rm test
shawn@crunchbang:/mnt/abas/javaerpm$

さまざまなマウントオプションを試しました。uid=501何も変更しません。試してみましたnounixが、それでもまったく機能しません。rootまたはshawnユーザーを使用して何も表示されません。


このQは、ほぼ同じ問題であるように見えます:unix.stackexchange.com/questions/71896/…
slm

まったく同じ問題ではありません。
エビワゴン

私はほぼ8)と言った。そのコメントは、一般的なスレッド化されたQとAを将来の訪問者のために一緒にリンクすることを私に向けたものですが、あなたはそれをチェックするかもしれません。
slm

回答:


7

注:私が推測しているのは、サンバの第一人者ではないということです。

Samba / CIFSは、少なくともここでの使用方法では、サーバーとクライアント間の資格情報を再現しません。force userサーバー上のディレクティブのため、すべての操作はerpmサーバー上のユーザーとして実行されます。ただし、クライアントとサーバーの両方がUNIXシステムを実行しているため、CIFS POSIX拡張機能は自動的にネゴシエートされました。これにより、UNIXのアクセス許可はある程度までは機能しているように見えますが、サーバーが許可する限りにおいて、UNIXのアクセス許可が要求するものとサーバーが許可するものとが異なる場合があります。

すべてのファイルがユーザーID 501として表示されていることに気づくでしょう。それがサーバー上のuidです。

ファイルを作成または削除しようとすると、ディレクトリに対する書き込み権限が必要になります。すべてのアクセスはサーバー上の単一のユーザーにマッピングされるため、書き込み権限はerpm、サーバー上のそのディレクトリへの書き込みが許可されているかどうかにまで及びます。答えはイエスです。

を実行touchすると、ファイルが作成され、変更時刻が変更されます。ファイルの変更時刻を変更するには所有権が必要であり、これはクライアント側の汎用ファイルシステムコードによってテストされます。

を実行するとstrace touch testopen呼び出し(ファイルを作成する)が成功し、utimes呼び出し(Linuxではutimensatシステムコール)が時刻の設定に失敗することに気付くでしょう。

これは、実際に少し奇妙であるutimes 必要があることから、成功touch(「現在の時刻にタイムスタンプを設定する」という意味)NULL引数を指定して呼び出し、それを、これをファイルに書き込むことがすべての呼び出し元に許可されることになっている、とだけでなく、任意のタイムスタンプを設定するような所有者に。それutimensatは実際に権限ベースのチェックを行っており、ファイルシステムが実際の権限に関係なく書き込み操作を許可している場合でも、そのファイルへの書き込みは許可されていないと判断していると思います。

非rootユーザーの権限でサーバー側を実行している場合のCIFS POSIX拡張の主な利点は、実行可能ビットを引き継ぐことであり、場合によってはグループの所有権を引き継ぐことです。forceuidマウントオプションを使用して、ユーザーの所有権を単一のクライアント側ユーザーにマッピングすると、混乱が少なくなる場合があります。


3
徹底したご対応ありがとうございました。私は最終的に試みましたusername=guest,defaults,noperm、そしてそれは問題を完全に修正しました。username=guest,defaults,nopermおそらくこれが最良の答えではないので、これでどの答えを受け入れるかわかりません。あなたの答えを試す時間がないだけです。ありがとうございました!
エビワゴン2013

@shrimpwagon更新ありがとうございます。これで問題が解決しました...マウント時にデフォルトとnopermをパイプする必要があることをずっと忘れていました。
マシュー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.