Mengapa file dalam share yang dipasang di smbfs dibuat dengan bit yang dapat dieksekusi?

14

Saya memasang share samba menggunakan perintah smbmount:

$ sudo smbmount \\\\foo\\bar /mnt/bar -o user=tom

Ketika saya membuat file baru, mereka dibuat dengan bit yang dapat dieksekusi ditetapkan untuk pemilik, grup dan dunia. Untuk misalnya

$ touch hello.txt 
$ ls -la hello.txt
-rwxr-xr-x 1 root root 0 Dec  2 12:28 hello.txt

File yang sama ketika dibuat pada share yang dipasang NFS mengatur izin yang benar tanpa bit set yang dapat dieksekusi.

Mengapa ini terjadi? Bagaimana bisa diperbaiki?

vivekian2
sumber

Jawaban:

10

NFS ditemukan di dunia Unix dan begitu memahami izin tradisional Unix. (ACL sistem unix modern adalah masalah lain, tetapi implementasi NFS baru-baru ini harus mengatasinya.)

Samba ditemukan di dunia IBM / Microsoft PC, untuk bertukar file dengan sistem yang tidak memiliki izin selain read-only / read-write. Sekarang asli untuk Windows. Secara default, Samba tidak mengirimkan izin Unix. Bergantung pada konfigurasi, semua file ditandai dapat dieksekusi (yang menjengkelkan) atau semua file (kecuali direktori) ditandai tidak dapat dieksekusi (yang mengganggu).

Ada berbagai ekstensi untuk protokol Samba / CIFS yang membuatnya lebih cocok untuk penggunaan Unix. Coba aktifkan ekstensi Unix dalam konfigurasi server:

[global]
unix extensions = yes
Gilles 'SANGAT berhenti menjadi jahat'
sumber
Sayangnya di intranet perusahaan saya, saya tidak memiliki akses untuk mengkonfigurasi server. Mungkin, akan lebih baik untuk melakukan mount menggunakan NFS pada klien Linux. Masalah yang lebih besar adalah pada klien Windows, di mana mengkonfigurasi NFS adalah rasa sakit di leher.
vivekian2
@ vivekian2 Memang, jika Anda punya pilihan, saya pasti merekomendasikan menggunakan NFS pada klien Linux dan SMB pada klien Windows.
Gilles 'SO- berhenti bersikap jahat'
10

Ini terdengar seperti masalah Anda, berjudul: File yang disalin memperoleh bit eksekusi di Samba / CIFS .

kutipan

Setelah menyalin file dengan rw-r ----- pada volume yang dipasang di CIFS, salinannya mendapat rwxr -----. Jadi mendapatkan bit eksekusi:

Di bagian bawah halaman, pengaturan map archive = nodi /etc/samba/smb.conf:

kutipan

  [Global]
  <snip>
  map archive = no
  <snip>
slm
sumber
Ini tentu saja memecahkan masalah file yang disimpan dari Windows mendapatkan bendera eksekusi. Terima kasih! Default gila lainnya, adakah yang menggunakan bendera arsip dalam 2 dekade terakhir? :)
Rennex
4

Anda mungkin mencoba: mount -t cifs

Google "mount cifs" untuk penggunaan, tidak sulit untuk dimengerti, tetapi Anda ingin mengatur opsi menggunakan flag -o:

uid =, gid =, rw, noperm, dir_mask = 0775, file_mask = 0664

Pengguna dan grup adalah milik id, seperti dalam numerik bukan alias teks. Opsi-opsi ini akan memastikan bahwa Anda memiliki akses r / w, izin dikontrol oleh mount no server, dan secara khusus file_mask=0664akan memastikan bahwa file Anda tidak dapat dieksekusi. Yang paling penting, Anda dapat menggunakan saham samba sebagai direktori lokal.

MaKR
sumber
Dalam versi terbaru dari samba, seseorang mungkin harus menggunakanfile_mode=0644,dir_mode=0755
Jokester
PERINGATAN: Opsi pemasangan CIFS 'dmask' sudah tidak digunakan lagi. Gunakan 'dir_mode' sebagai gantinya. PERINGATAN: Opsi pemasangan CIFS 'fmask' sudah tidak digunakan lagi. Gunakan 'file_mode' sebagai gantinya.
Hubbitus
4

Anda dapat mengetahui mengapa hal ini terjadi dari penjelasan berikut di situs web Samba di bawah Izin File dan Atribut pada bagian MS-DOS dan Unix :

https://www.samba.org/samba/docs/using_samba/ch08.html

Ini ada hubungannya dengan memetakan bit System, Hidden dan Archive untuk sistem file MS-DOS.

Sistem file MS-DOS tidak menggunakan bit yang dapat dieksekusi sehingga tiga bit yang dapat dieksekusi pada sistem file Unix digunakan kembali untuk mewakili bit System, Hidden dan Archive untuk sistem file MS-DOS.

Jadi ketika Anda melihat izin file menggunakan ls -ldi Unix, Anda melihat izin file yang sesuai untuk MS-DOS (atau Windows) dengan mengingat bahwa tiga bit yang dapat dieksekusi di Unix mewakili bit System, Hidden dan Archive untuk MS-DOS.

Dalam smb.confNamun, Anda dapat mengubah pemetaan ini off untuk berbagi dengan:

map archive = no
map system = no
map hidden = no

dan memaksa mode pada pembuatan file dengan:

force create mode = 0660
Stacey Richards
sumber
Ternyata sangat sederhana ... Terima kasih atas penjelasannya!
anton_rh
1

Saya menggunakan QNAP TS439 - dan memiliki masalah ini dengan file yang dapat dieksekusi.

Meskipun saya harus menggunakan yang berikut ini di /etc/fstabfile saya

//192.168.0.1/audio /media/audio cifs credentials=/home/cheese/.smbcredentials,uid=1000,file_mode=0664,iocharset=utf8  0  0 
layolayo
sumber