Почему файлы на подключенном smbfs-ресурсе создаются с помощью исполняемого битового набора?

Я установил долю samba, используя команду smbmount:

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

Когда я создаю новые файлы, они создаются с исполняемым битом, установленным для владельца, группы и мира. Например, для

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

Тот же файл, созданный на подключенном к сети NFS, устанавливает правильные разрешения без установленного бита исполняемого бита.

Почему это происходит? Как это можно исправить?

NFS была изобретена в мире Unix и поэтому понимает традиционные разрешения Unix из коробки. (ACL современных систем unix – другое дело, но недавние реализации NFS должны справляться с ними.)

Samba был изобретен в мире IBM / Microsoft PC, чтобы обмениваться файлами с системами, у которых не было разрешений, выходящих за пределы только для чтения / чтения-записи. Он теперь является родным для Windows. По умолчанию Samba не передает разрешения Unix. В зависимости от конфигурации все файлы отмечены как исполняемые (что раздражает), или все файлы (кроме каталогов) отмечены как неисполнимые (что раздражает).

Существуют различные расширения протокола Samba / CIFS, которые делают его более подходящим для использования Unix. Попробуйте включить расширения Unix в конфигурации сервера:

 [global] unix extensions = yes 

Это звучит как ваша проблема, получившая название: Скопированные файлы получают бит выполнения Samba / CIFS .

выдержка

После копирования файла с rw-r —– на томе, установленном на CIFS, копия получает rwxr —–. Таким образом, он получает бит выполнения:

Далее вниз по странице, установив map archive = no в /etc/samba/smb.conf :

выдержка

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

Вы можете попробовать: mount -t cifs

Google «mount cifs» для использования, это не сложно понять, но вы хотите установить параметры с помощью флага -o:

UID =, = GID, RW, noperm, dir_mask = 0775, = 0664 маска_файлов

Пользователь и группа – это id, как в числовом, а не в псевдониме текста. Эти параметры гарантируют, что у вас есть доступ к r / w, разрешения контролируются монтированием без сервера, а в частности file_mask=0664 гарантирует, что ваши файлы не исполняются. Кроме того, вы сможете работать с вашими акциями samba в качестве локальных каталогов.

Я использую QNAP TS439 – и эта проблема была с исполняемыми файлами.

Хотя мне пришлось использовать следующее в /etc/fstab

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

Вы можете узнать, почему это происходит из следующего объяснения на веб-сайте Samba в разделе « Разрешения и атрибуты файлов» в разделе MS-DOS и Unix :

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

Это связано с отображением бит System, Hidden и Archive для файловой системы MS-DOS.

Файловая система MS-DOS не использует исполняемые биты, поэтому три исполняемых бита в файловой системе Unix повторно используются для представления бит System, Hidden и Archive для файловой системы MS-DOS.

Поэтому, когда вы просматриваете разрешения на файл с помощью ls -l в Unix, вы просматриваете разрешения для файлов, подходящие для MS-DOS (или Windows), имея в виду, что три исполняемых бита в Unix представляют бит System, Hidden и Archive для MS -DOS.

Однако в smb.conf вы можете отключить это сопоставление для общего ресурса с помощью:

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

и заставить режим создания файлов с:

 force create mode = 0660