Чому файли в змонтованому спільному доступі smbfs створюються з виконаним бітом?


14

Я змонтував частку 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-спільному ресурсі встановлює правильні дозволи без будь-якого виконуваного біта.

Чому це відбувається? Як це можна виправити?

Відповіді:


11

NFS був винайдений у світі Unix і тому розуміє традиційні дозволи Unix поза коробкою. (ACL сучасних систем Unix - інша справа, але останні впровадження NFS має впоратися з ними.)

Samba був винайдений у ПК ПК IBM / Microsoft для обміну файлами із системами, які не мали дозволів, які не перевищують читання / читання-запис. Зараз він є рідним для Windows. За замовчуванням Samba не передає дозволи Unix. Залежно від конфігурації, або всі файли позначаються виконуваними (що дратує), або всі файли (крім каталогів) позначаються невиконаними (що дратує).

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

[global]
unix extensions = yes

На жаль, в інтранеті моєї компанії я не маю доступу до налаштування сервера. Можливо, було б найкраще монтувати просто за допомогою NFS на клієнті Linux. Більша проблема полягає у клієнті Windows, де налаштування NFS - це біль у шиї.
vivekian2

@ vivekian2 Дійсно, якщо у вас є вибір, я обов'язково рекомендую використовувати NFS на клієнтах Linux та SMB на клієнті Windows.
Жил "ТАК - перестань бути злим"

10

Це звучить як ваша проблема під назвою: Скопійовані файли отримують біт виконання на Samba / CIFS .

витяг

Після копіювання файлу з rw-r ----- на томі, встановленому CIFS, копія отримує rwxr -----. Отже, він набирає біт виконання:

Далі вниз сторінки, встановивши map archive = noв /etc/samba/smb.conf:

витяг

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

Це, безумовно, вирішує проблему файлів, збережених з Windows, які набувають прапор виконання. Дякую! Ще один шалений дефолт, чи використовував хтось архівні прапори за останні 2 десятиліття? :)
Rennex

4

Ви можете спробувати: mount -t cifs

Google "монтує cifs" для використання, це не важко зрозуміти, але ви хочете встановити параметри за допомогою прапора -o:

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

Користувач і група - це ідентифікатори, як у числовому, не текстовому псевдонімі. Ці параметри гарантують, що у вас є доступ з виводу на робочий стіл, дозволи контролюються за допомогою монтування не на сервері, а конкретно file_mask=0664забезпечуватимуться, щоб ваші файли не виконувались. Крім цього, ви зможете працювати з своїми ділами самби як місцеві каталоги.


В останній версії самби, можливо, доведеться скористатисяfile_mode=0644,dir_mode=0755
Jokester

ПОПЕРЕДЖЕННЯ: Параметр монтажу CIFS 'маска' застарілий. Використовуйте замість 'dir_mode'. ПОПЕРЕДЖЕННЯ: Параметр монтажу CIFS 'fmask' застарілий. Використовуйте замість цього "file_mode".
Губбіт

4

Дізнатися, чому це відбувається, можна дізнатися з наступного пояснення на веб-сайті Samba в розділі Файли дозволів та атрибутів у MS-DOS та Unix :

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

Це пов'язано з відображенням бітів системи, прихованих та архівних файлів для файлової системи MS-DOS.

Файлова система MS-DOS не використовує виконувані біти, тому три виконуваних біта файлової системи Unix повторно використовуються для подання бітів системи, прихованих та архівних файлів для файлової системи MS-DOS.

Таким чином, коли ви переглядаєте дозволи файлів за допомогою ls -lUnix, ви переглядаєте файлові дозволи, придатні для MS-DOS (або Windows), маючи на увазі, що три виконуваних біта в Unix являють собою системні, приховані та архівні біти для MS-DOS.

В smb.conf, проте, ви можете перетворити це відображення від за акцію з:

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

і змусити режим створення файлів за допомогою:

force create mode = 0660

Вийшло так просто ... Дякую за пояснення!
anton_rh

1

Я використовую 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 
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.