非常に奇妙な問題...
リモートの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ユーザーを使用して何も表示されません。
注:私が推測しているのは、サンバの第一人者ではありません。
Samba/CIFSは、少なくともここでの使用方法では、サーバーとクライアント間の資格情報を再現しません。サーバー上のforce user
ディレクティブのため、すべての操作はサーバー上のユーザーerpm
として実行されます。ただし、クライアントとサーバーの両方がUNIXシステムを実行しているため、 CIFS POSIX extensions が自動的にネゴシエートされました。これにより、UNIXのアクセス許可はある程度までは機能しているように見えますが、サーバーが許可する範囲内に限られ、UNIXのアクセス許可が要求するものとサーバーが許可するものとが異なる場合があります。
すべてのファイルがユーザーID 501として表示されていることがわかります。これがサーバー上のユーザーのuidです。
ファイルを作成または削除しようとすると、ディレクトリに対する書き込み権限が必要になります。すべてのアクセスはサーバー上の1人のユーザーにマップされるため、書き込み権限は、erpm
がサーバー上のそのディレクトリへの書き込みを許可されているかどうかを示します。答えはイエスです。
touch
を実行すると、ファイルが作成され、変更時刻が変更されます。ファイルの変更時刻を変更するには所有権が必要であり、これはクライアント側の汎用ファイルシステムコードによってテストされます。
strace touch test
を実行すると、open
呼び出し(ファイルを作成する)が成功し、次に utimes
呼び出し(Linuxでは utimensat
システムコール)は時間の設定に失敗します。
utimes
はNULL引数を使用してそれを呼び出すため(「タイムスタンプを現在の時刻に設定する」)、touch
shouldが成功するため、これは実際には少し奇妙です。これは、任意のタイムスタンプを設定するような所有者だけでなく、ファイルに書き込む可能性のあるすべての呼び出し元に許可されることになっています。 utimensat
が実際に権限ベースのチェックを行っており、ファイルシステムが実際の権限に関係なく書き込み操作を許可している場合でも、そのファイルへの書き込みはできないと判断していると思います。
非rootユーザーの権限でサーバー側が実行されている場合のCIFS POSIX拡張の主な利点は、実行可能ビットを引き継ぐことであり、場合によってはグループの所有権も引き継がれます。 forceuid
マウントオプションを使用して、ユーザーの所有権を単一のクライアント側ユーザーにマッピングすると、混乱が少なくなる場合があります。