Проблема с правами доступа к файлам на OS X El Capitan и SMB

После обновления до OSX El Capitan мы столкнулись с некоторыми странными ошибками прав доступа к файлу на нашем SMB-сервере.

У нас есть сервер с Ubuntu, на котором наши рабочие файлы размещаются в общей папке SMB на каждой из наших рабочих станций Mac. Мы используем Git поверх SMB с SourceTree для создания наших веб-сайтов (удобно использовать одну и ту же базу данных и файлы), так как мы обновили до OS X El Capitan права доступа к файлам не одинаковые, и Git помечает все файлы, измененные при изменении их разрешений с 0664 на 0775 (или от 0644 до 0755).

Например, вот ls -la вывод с использованием SSH на нашем сервере разработчиков

➜  CashierTheme git:(develop) ls -la
total 72
drwxrwsr-x  9 nestorwww nestorwww  4096 oct.  12 23:42 .
drwxrwsr-x  6 nestorwww nestorwww  4096 avril 14 17:33 ..
-rw-rw-r--  1 nestorwww nestorwww 12261 oct.  12 23:42 CashierThemeApp.php
-rw-rw-r--  1 nestorwww nestorwww    56 oct.  12 23:42 composer.json
-rw-rw-r--  1 nestorwww nestorwww   352 oct.  12 23:42 config.yml
drwxrwsr-x  2 nestorwww nestorwww  4096 oct.  12 23:42 Controllers
-rw-rw-r--  1 nestorwww nestorwww   170 oct.  12 23:42 .editorconfig
drwxrwsr-x  2 nestorwww nestorwww  4096 oct.  12 23:42 Entities
drwxrwsr-x  4 nestorwww nestorwww  4096 oct.  12 23:42 Forms
drwxrwsr-x  8 nestorwww nestorwww  4096 oct.  12 23:42 .git
-rw-rw-r--  1 nestorwww nestorwww    35 oct.  12 23:42 .gitignore
-rw-rw-r--  1 nestorwww nestorwww  1060 oct.  12 23:42 LICENSE.md
-rw-rw-r--  1 nestorwww nestorwww  1819 oct.  12 23:42 README.md
drwxr-sr-x  2 nestorwww nestorwww  4096 oct.  12 23:42 Repositories
drwxrwsr-x  6 nestorwww nestorwww  4096 oct.  12 23:42 Resources
drwxrwsr-x 10 nestorwww nestorwww  4096 oct.  12 23:42 static

Права доступа к файлам в порядке. Тогда вот ls -la из нашей общей папки SMB (с моего Mac):

➜  CashierTheme git:(develop) ✗ ls -la
total 328
drwx------  1 ambroisemaupate  staff  16384 12 oct 23:42 .
drwx------  1 ambroisemaupate  staff  16384 14 avr 17:33 ..
-rwx------  1 ambroisemaupate  staff    170 12 oct 23:42 .editorconfig
drwx------  1 ambroisemaupate  staff  16384 12 oct 23:43 .git
-rwx------  1 ambroisemaupate  staff     35 12 oct 23:42 .gitignore
-rwx------  1 ambroisemaupate  staff  12261 12 oct 23:42 CashierThemeApp.php
drwx------  1 ambroisemaupate  staff  16384 12 oct 23:42 Controllers
drwx------  1 ambroisemaupate  staff  16384 12 oct 23:42 Entities
drwx------  1 ambroisemaupate  staff  16384 12 oct 23:42 Forms
-rwx------  1 ambroisemaupate  staff   1060 12 oct 23:42 LICENSE.md
-rwx------  1 ambroisemaupate  staff   1819 12 oct 23:42 README.md
drwx------  1 ambroisemaupate  staff  16384 12 oct 23:42 Repositories
drwx------  1 ambroisemaupate  staff  16384 12 oct 23:42 Resources
-rwx------  1 ambroisemaupate  staff     56 12 oct 23:42 composer.json
-rwx------  1 ambroisemaupate  staff    352 12 oct 23:42 config.yml
drwx------  1 ambroisemaupate  staff  16384 12 oct 23:42 static

Поэтому, когда я вхожу в git status команда на сервере dev, все ок:

➜  CashierTheme git:(develop) git status
Sur la branche develop
Votre branche est à jour avec 'origin/develop'.

rien à valider, la copie de travail est propre

И... вот git status выход из доли SMB:

➜  CashierTheme git:(develop) ✗ git status
On branch develop
Your branch is up-to-date with 'origin/develop'.
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

    modified:   .editorconfig
    modified:   .gitignore
    modified:   CashierThemeApp.php
    modified:   Controllers/ContactController.php
    modified:   Controllers/InvoiceController.php
    modified:   Controllers/PaymentController.php
    modified:   Controllers/PostingController.php
    modified:   Controllers/QuoteController.php
    modified:   Entities/BankOperationTrait.php
    modified:   Entities/Contact.php
    modified:   Entities/Invoice.php
    modified:   Entities/Letter.php
    modified:   Entities/PayableInterface.php
    modified:   Entities/Payment.php
    modified:   Entities/Posting.php
    modified:   Entities/PostingObject.php
    modified:   Entities/Quote.php
    modified:   Forms/ContactSelectorType.php
    modified:   Forms/ContactType.php
    modified:   Forms/DataTransformer/ContactToNumberTransformer.php
    modified:   Forms/Filters/ContactFilterType.php
    modified:   Forms/Filters/PostingFilterType.php
    modified:   Forms/Filters/QuoteFilterType.php
    modified:   Forms/InvoiceStatusType.php
    modified:   Forms/InvoiceType.php
    modified:   Forms/PaymentType.php
    modified:   Forms/PostingObjectType.php
    modified:   Forms/PostingObjectUnitType.php
    modified:   Forms/PostingType.php
    modified:   Forms/QuoteStatusType.php
    modified:   Forms/QuoteType.php
    modified:   LICENSE.md
    modified:   README.md
    modified:   Repositories/PostingRepository.php
    modified:   Resources/config/.gitignore
    modified:   Resources/config/fonts.default.xml
    modified:   Resources/config/pdf_stylesheet.default.xml
    modified:   Resources/firewalled-routes.yml
    modified:   Resources/imports/roles.rzt
    modified:   Resources/imports/settings.rzt
    modified:   Resources/routes.yml
    modified:   Resources/translations/messages.en.xlf
    modified:   Resources/translations/messages.fr.xlf
    modified:   Resources/views/404.html.twig
    modified:   Resources/views/admin/test.html.twig
    modified:   Resources/views/base.html.twig
    modified:   Resources/views/baseAnonymous.html.twig
    modified:   Resources/views/blocks/filters.html.twig
    modified:   Resources/views/blocks/paidtotals.html.twig
    modified:   Resources/views/blocks/totals.html.twig
    modified:   Resources/views/blocks/totals.xml.twig
    modified:   Resources/views/blocks/waitingtotals.html.twig
    modified:   Resources/views/contacts/edit.html.twig
    modified:   Resources/views/contacts/list.html.twig
    modified:   Resources/views/dashboard/list.html.twig
    modified:   Resources/views/forms.html.twig
    modified:   Resources/views/invoices/edit.html.twig
    modified:   Resources/views/invoices/list.html.twig
    modified:   Resources/views/invoices/view.xml.twig
    modified:   Resources/views/modules/navigation-elements.html.twig
    modified:   Resources/views/modules/navigation.html.twig
    modified:   Resources/views/payments/edit.html.twig
    modified:   Resources/views/payments/list.html.twig
    modified:   Resources/views/pdfbase.xml.twig
    modified:   Resources/views/quotes/edit.html.twig
    modified:   Resources/views/quotes/list.html.twig
    modified:   Resources/views/quotes/view.xml.twig
    modified:   Resources/views/tabledforms.html.twig
    modified:   composer.json
    modified:   config.yml
    modified:   static/Gruntfile.js
    modified:   static/bower.json
    modified:   static/css/main.less
    modified:   static/css/normalize.less
    modified:   static/css/postings/commons.less
    modified:   static/css/style.less
    modified:   static/css/style.min.css
    modified:   static/css/vars.less
    modified:   static/css/vendor.less
    modified:   static/css/vendor.min.css
    typechange: static/css/widgets/debugpanel.less
    modified:   static/css/widgets/nav.less
    modified:   static/fonts/fontawesome-webfont.woff2
    modified:   static/js/main.js
    modified:   static/js/vendor/jquery-2.1.3.min.js
    modified:   static/js/vendor/uikit.min.js
    modified:   static/package.json
    modified:   static/public/cashier-theme.08d1e458.min.js
    modified:   static/public/config/assets.config.php
    modified:   static/public/style.7474e8a1.css
    modified:   static/public/vendor-cashier-theme.1a8458ff.min.js
    modified:   static/public/vendor.03b81695.css

no changes added to commit (use "git add" and/or "git commit -a")

С git diff:

diff --git a/.editorconfig b/.editorconfig
old mode 100644
new mode 100755
diff --git a/.gitignore b/.gitignore
old mode 100644
new mode 100755
diff --git a/CashierThemeApp.php b/CashierThemeApp.php
old mode 100644
new mode 100755
diff --git a/Controllers/ContactController.php b/Controllers/ContactController.php
old mode 100644
new mode 100755

И т. Д.

И последний фрагмент, вот моя конфигурация общего ресурса SMB, где я явно советую использовать 0644 для файлов и 0755 для каталогов.

[DevWebServer]
   path = /var/www
   force group = myuser
   force user = myuser
   browsable = yes
   writeable = yes
   create mask = 0644
   directory mask = 0755
   force create mode = 0644
   force directory mode = 0755
   hide dot files = no
   guest ok = no
   public = no
   veto files = /._*/.DS_Store/.AppleDouble
   delete veto files = yes

У нас не было никаких проблем с OS X Yosemite.

  • Кто-нибудь сталкивался с этой проблемой с тех пор, как вы обновились до OS 10.11?
  • Кто-нибудь знает обходной путь, чтобы придерживаться тех же разрешений с сервера на общий ресурс SMB?
  • Я что-то забыл в своей конфигурации общего ресурса SMB?

Для тех, кто интересуется, почему мы используем Git вместо SMB, это потому, что мы работаем со многими людьми, одновременно создавая веб-сайты. Наличие копии на каждом из наших рабочих станций будет проблематично синхронизировать базы данных и файлы документов.

Спасибо за чтение и ваше время.

6 ответов

Это работа для меня

[Shared]
    comment = Folder Shared
    path = /path
    unix extensions = no
    force group = root
    force user = root
    browsable = yes
    writeable = yes
    create mask = 0644
    directory mask = 0755
    force create mode = 0644
    force directory mode = 0755
    hide dot files = no
    guest ok = no
    public = no
    valid users = @users

Эта проблема все еще сохраняется после обновления до OS X 10.11.1.

В качестве частичного обходного пути вы можете обмениваться файлами, используя SSHFS вместо SMB. SSHFS сохраняет разрешения, однако имеет несколько недостатков:

  • Проблемы, когда несколько пользователей пишут одни и те же файлы.
  • Нет поддержки расширенных атрибутов, ACL и т. Д.
  • Медленнее, чем SMB.

См. Также обсуждение сообществ поддержки Apple: https://discussions.apple.com/message/29104711

Вы также можете попробовать использовать последнюю версию (4.2 или более позднюю) Samba, поддерживающую SMB2 и включающую vfs_fruit на общем ресурсе. Это добавит поддержку расширения Apple AAPL для SMB2, которое должно работать лучше, чем расширения Unix для SMB1/CIFS.

TL; версия DR:

mount_smbfs -f 0644 -d 0755 //<user@host/share> <share>

Длинная версия:

Я знаю, что эта ветка старая, но это все еще актуальная проблема. В моем случае я использую git over CIFS для работы с удаленным рабочим деревом на виртуальном экземпляре Linux. Git-репозиторий фактически существует в моей хост-системе, но у меня есть проверка в удаленной системе. Это сделано для того, чтобы я мог разработать свое специальное приложение для Linux на macOS, используя виртуальную машину, но оставил репозиторий git на хосте.

Во всяком случае, я испытывал ту же проблему, что и ОП. Git обнаружил изменения в файловом режиме, желая зафиксировать файлы с битами выполнения, поскольку драйвер общего ресурса по умолчанию создает обычные файлы с разрешениями на выполнение. Чтобы обойти это, я выяснил, как смонтировать общий ресурс вручную, используя mount_smbfs команда. Ключевые варианты -f а также -d для режима файла и режима каталога соответственно.

Для записи я использую macOS 10.11.6 "El capitan".

Попробуйте отключить расширения Unix, используя следующую инструкцию в вашей Ubuntu smb.conf файл:

unix extensions = no

Затем перезапустите Samba и посмотрите, сохраняется ли проблема.

Измените пароль учетной записи пользователя на локальный пароль, если вы теперь переключились на использование своих учетных данных Apple ID. WINS и общий файловый ресурс не работают с вашими учетными данными для входа в iCloud.

Другие вопросы по тегам