Tại sao các tệp trong chia sẻ gắn kết smbfs được tạo với tập bit thực thi?


14

Tôi đã gắn một chia sẻ samba bằng lệnh smbmount:

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

Khi tôi tạo các tệp mới, chúng được tạo với tập bit thực thi cho chủ sở hữu, nhóm và thế giới. Ví dụ

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

Cùng một tệp khi được tạo trên chia sẻ được gắn NFS sẽ thiết lập quyền chính xác mà không cần bất kỳ tập bit thực thi nào.

Tại sao chuyện này đang xảy ra? Làm thế nào nó có thể được cố định?

Câu trả lời:


10

NFS đã được phát minh trong thế giới Unix và do đó hiểu được các quyền Unix truyền thống. (ACL của các hệ thống unix hiện đại là một vấn đề khác, nhưng việc triển khai NFS gần đây sẽ đối phó với chúng.)

Samba được phát minh trong thế giới PC / Microsoft PC, để trao đổi các tệp với các hệ thống không có quyền vượt quá chỉ đọc / đọc-ghi. Nó bây giờ có nguồn gốc từ Windows. Theo mặc định, Samba không truyền quyền Unix. Tùy thuộc vào cấu hình, tất cả các tệp được đánh dấu thực thi (gây khó chịu) hoặc tất cả các tệp (ngoại trừ thư mục) được đánh dấu là không thể thực thi (gây khó chịu).

Có nhiều phần mở rộng cho giao thức Samba / CIFS làm cho nó phù hợp hơn với việc sử dụng Unix. Hãy thử bật tiện ích mở rộng Unix trong cấu hình máy chủ:

[global]
unix extensions = yes

Thật không may trong mạng nội bộ của công ty tôi, tôi không có quyền truy cập để định cấu hình máy chủ. Có lẽ, tốt nhất là chỉ nên sử dụng NFS trên máy khách Linux. Vấn đề lớn hơn là ở máy khách Windows, trong đó việc cấu hình NFS là một vấn đề khó khăn.
vivekian2

@ vivekian2 Thật vậy, nếu bạn có sự lựa chọn, tôi chắc chắn khuyên bạn nên sử dụng NFS trên máy khách Linux và SMB trên máy khách Windows.
Gilles 'SO- ngừng trở nên xấu xa'

10

Điều này có vẻ giống như vấn đề của bạn, có tiêu đề: Các tệp được sao chép đạt được bit thực thi trên Samba / CIFS .

đoạn trích

Sau khi sao chép tệp có rw-r ----- trên ổ đĩa được gắn CIFS, bản sao sẽ được rwxr -----. Vì vậy, nó đạt được bit thực thi:

Tiếp tục xuống trang, cài đặt map archive = notrong /etc/samba/smb.conf:

đoạn trích

  [Global]
  <snip>
  map archive = no
  <snip>

Điều này chắc chắn giải quyết vấn đề các tệp được lưu từ Windows có được cờ thực thi. Cảm ơn! Một mặc định điên rồ khác, có ai đã sử dụng cờ lưu trữ trong 2 thập kỷ qua không? :)
Rennex

4

Bạn có thể thử: mount -t cifs

Google "mount cifs" để sử dụng, không khó hiểu, nhưng bạn sẽ muốn đặt tùy chọn bằng cờ -o:

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

Người dùng và nhóm là id, như trong số không phải là bí danh văn bản. Các tùy chọn này sẽ đảm bảo rằng bạn có quyền truy cập r / w, quyền được kiểm soát bởi mount không có máy chủ và đặc biệt file_mask=0664sẽ đảm bảo rằng các tệp của bạn không thể thực thi được. Trên hết, bạn sẽ có thể làm việc với các chia sẻ samba của mình dưới dạng các thư mục địa phương.


Trong phiên bản gần đây của samba người ta có thể phải sử dụngfile_mode=0644,dir_mode=0755
Jokester

CẢNH BÁO: Tùy chọn gắn kết CIFS 'dmask' không được chấp nhận. Sử dụng 'dir_mode' thay thế. CẢNH BÁO: Tùy chọn gắn kết CIFS 'fmask' không được chấp nhận. Sử dụng 'file_mode' thay thế.
Hubbitus

4

Bạn có thể tìm hiểu lý do tại sao điều này xảy ra từ phần giải thích sau trên trang web Samba trong phần Quyền và thuộc tính tệp trên phần MS-DOS và Unix :

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

Nó phải thực hiện với việc ánh xạ các bit System, Hidden và Archive cho hệ thống tập tin MS-DOS.

Hệ thống tệp MS-DOS không sử dụng các bit thực thi, do đó ba bit thực thi trên hệ thống tệp Unix được sử dụng lại để biểu diễn các bit Hệ thống, Ẩn và Lưu trữ cho hệ thống tệp MS-DOS.

Vì vậy, khi bạn xem các quyền của tệp bằng ls -lUnix, bạn đang xem các quyền của tệp phù hợp với MS-DOS (hoặc Windows), hãy nhớ rằng ba bit thực thi trong Unix đại diện cho các bit System, Hidden và Archive cho MS-DOS.

Trong smb.conf, tuy nhiên, bạn có thể biến bản đồ này ra cho một chia sẻ với:

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

và buộc chế độ tạo tập tin với:

force create mode = 0660

Hóa ra nó rất đơn giản ... Cảm ơn bạn đã giải thích!
anton_rh

1

Tôi sử dụng QNAP TS439 - và đã gặp sự cố này với các tệp được thực thi.

Mặc dù tôi đã phải sử dụng những điều sau đây trong /etc/fstabtập tin của mình

//192.168.0.1/audio /media/audio cifs credentials=/home/cheese/.smbcredentials,uid=1000,file_mode=0664,iocharset=utf8  0  0 
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.