Проблема с правами доступа к файлам на 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.