非常に奇妙な質問です...
リモート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
ことがわかります。open
utimes
電話(またはLinuxではutimensat
システムコール)は時間を設定できません。
実際、これはちょっと変です。utimes
しなければならないtouch
NULL引数(「タイムスタンプを現在時刻に設定」を意味)を使用して呼び出され、任意のタイムスタンプ設定などの所有者だけでなく、ファイルに書き込むことができるすべての呼び出し元を許可する必要があるため、成功します。私はこれがutimensat
実際に権限ベースのチェックを実行し、ファイルシステムが実際の権限に関係なく書き込みを許可しても、権限がファイルに書き込めないことを示すと判断していると思います。
CIFS POSIX拡張の主な利点は、サーバー側がrootではなくユーザーの権限で実行されたときに実行可能ビットとグループ所有権を継承することです。forceuid
マウントオプションを使用してユーザーの所有権を個々のクライアントユーザーにマッピングすると、混乱が少なくなる可能性があります。