Sambaの共有権限はユーザー書き込みファイルを拒否しましたが、まだ表示されます。

Sambaの共有権限はユーザー書き込みファイルを拒否しましたが、まだ表示されます。

非常に奇妙な質問です...

リモート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ユーザーを使用すると何も表示されません。

ベストアンサー1

注:私はただ推測です。私はサンバマスターではありません。

少なくともここで使用する方法では、Samba / CIFSはサーバーとクライアント間で資格情報をコピーしません。ディレクティブforce userがサーバー上にあるため、すべての操作はerpmサーバーのユーザーとして実行されます。ただし、クライアントとサーバーの両方がUnixシステムを実行しているため、自動的にネゴシエートします。CIFS POSIX拡張。これはUNIX権限がある程度機能しているように見えますが、サーバーが許可する範囲内でのみ機能し、UNIX権限がサーバーが許可するものと異なるものを宣言する状況に直面します。

すべてのファイルがユーザーID 501で表示されることを確認できます。これはサーバーのuidです。

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

実行するとtouchファイルが生成され、変更時間が変更されます。ファイルの変更時間を変更するには所有権が必要で、これはクライアントの通常のファイルシステムコードでテストされます。

実行すると、呼び出し(ファイルの作成)が成功したstrace touch testことがわかります。openutimes電話(またはLinuxではutimensatシステムコール)は時間を設定できません。

実際、これはちょっと変です。utimes しなければならないtouchNULL引数(「タイムスタンプを現在時刻に設定」を意味)を使用して呼び出され、任意のタイムスタンプ設定などの所有者だけでなく、ファイルに書き込むことができるすべての呼び出し元を許可する必要があるため、成功します。私はこれがutimensat実際に権限ベースのチェックを実行し、ファイルシステムが実際の権限に関係なく書き込みを許可しても、権限がファイルに書き込めないことを示すと判断していると思います。

CIFS POSIX拡張の主な利点は、サーバー側がrootではなくユーザーの権限で実行されたときに実行可能ビットとグループ所有権を継承することです。forceuidマウントオプションを使用してユーザーの所有権を個々のクライアントユーザーにマッピングすると、混乱が少なくなる可能性があります。

おすすめ記事