Masalah yang sangat aneh ...
Samba berbagi di remote:
[javaerpm]
path = /u/abas/erpm/java
force user = erpm
guest ok = yes
read only = no
writeable = yes
Mount command pada local menggunakan root:
root@crunchbang:/mnt/abas# mount -t cifs -o username=guest,rw,exec,auto //10.0.0.2/javaerpm ./javaerpm
Root dapat membaca / menulis / cd tidak ada masalah sama sekali:
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
Tetapi jika saya beralih ke pengguna biasa dan melakukan hal yang sama saya mendapatkan ini:
shawn@crunchbang:/mnt/abas/javaerpm$ touch test
touch: cannot touch `test': Permission denied
Saya dapat ll
dan saya dapat melihat bahwa ia menulis file:
shawn@crunchbang:/mnt/abas/javaerpm$ ll
total 1
-rw-r--r-- 1 501 users 0 Sep 24 09:55 test
Aku bahkan rm
tidak masalah:
shawn@crunchbang:/mnt/abas/javaerpm$ rm test
shawn@crunchbang:/mnt/abas/javaerpm$
Saya sudah mencoba berbagai opsi pemasangan. uid=501
tidak mengubah apa pun. nounix
Sudah dicoba tetapi tidak berfungsi sama sekali dan saya tidak melihat apa-apa menggunakan pengguna root atau shawn.
Jawaban:
Catatan: Saya hanya menebak-nebak di sini, saya bukan guru samba.
Samba / CIFS, setidaknya cara Anda menggunakannya di sini, tidak mereproduksi kredensial antara server dan klien. Karena
force user
arahan di server, semua operasi dilakukan sebagai penggunaerpm
di server. Namun, karena klien dan server menjalankan sistem unix, mereka secara otomatis menonaktifkan ekstensi CIFS POSIX . Hal ini membuat izin unix tampak berfungsi hingga titik tertentu, tetapi hanya sejauh yang diizinkan server, dan Anda telah mengalami kasus di mana klaim izin unix dan apa yang diizinkan server berbeda.Anda akan melihat bahwa semua file muncul sebagai ID pengguna 501. Itu milik mereka di server.
Ketika Anda mencoba membuat atau menghapus file, ini memerlukan izin tulis pada direktori. Semua akses dipetakan ke satu pengguna di server, jadi izin menulis bermuara pada apakah
erpm
diizinkan untuk menulis ke direktori itu di server. Jawabannya iya.Ketika Anda menjalankan
touch
, itu membuat file dan kemudian mengubah waktu modifikasinya. Mengubah waktu modifikasi file memerlukan kepemilikan, dan ini diuji oleh kode sistem file generik, di sisi klien.Jika Anda menjalankan
strace touch test
, Anda akan melihat bahwaopen
panggilan (yang membuat file) berhasil, makautimes
panggilan (atau lebih tepatnya di Linuxutimensat
panggilan sistem) gagal untuk mengatur waktu.Ini sebenarnya agak aneh karena
utimes
harus berhasil, karenatouch
menyebutnya dengan argumen NULL (berarti "mengatur stempel waktu ke waktu saat ini"), dan ini seharusnya diizinkan untuk setiap penelepon yang dapat menulis ke file, dan tidak hanya untuk pemilik seperti mengatur cap waktu sewenang-wenang. Saya menduga bahwautimensat
sebenarnya melakukan pemeriksaan berbasis izin, dan menentukan bahwa izin mengatakan Anda tidak dapat menulis ke file itu, meskipun sistem file akan memungkinkan operasi penulisan terlepas dari izin yang sebenarnya.Keuntungan utama dari ekstensi CIFS POSIX ketika sisi server berjalan dengan izin dari pengguna non-root adalah untuk meneruskan bit yang dapat dieksekusi, dan mungkin kepemilikan grup. Mungkin kurang membingungkan jika Anda memetakan kepemilikan pengguna untuk satu pengguna sisi klien dengan
forceuid
opsi pemasangan.sumber
username=guest,defaults,noperm
dan itu benar-benar memperbaiki masalah. Saya tidak tahu jawaban apa yang harus diterima untuk hal ini karenausername=guest,defaults,noperm
mungkin bukan jawaban terbaik dan saya hanya tidak punya waktu untuk mencoba jawaban Anda. Terima kasih lagi!