web-dev-qa-db-ja.com

OS X El CapitanおよびSMB共有でのファイル権限の問題

OSX El Capitanにアップグレードしてから、SMBサーバーでいくつかの奇妙なファイル許可エラーが発生しました。

SMB各Macワークステーションへの共有フォルダーで作業ファイルをホストしているubuntuサーバーマシンがあります。SMBでGitを使用しますwithSourceTreeを使用してWebサイトを構築します(同じデータベースとファイルを共有するのに便利です)。これは、OS X El Capitanにファイル権限をアップグレードしたためです。同じではなく、パーミションが0664から0775(または0644から0755)に切り替わると、Gitはすべてのファイルを変更済みとしてマークします。

たとえば、開発サーバーでSSHを使用したls -la出力は次のとおりです

➜  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

ファイルの権限はOKです。次に、SMB共有フォルダ(Macから)からのls -laを示します。

➜  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コマンドを入力すると、すべて問題ありません。

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

rien à valider, la copie de travail est propre

そして…SMBシェアからのgit status出力:

➜  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共有構成に何かを忘れましたか?

なぜSMBよりもGitを使用するのか不思議に思う人にとって、それは私たちが同時に多くの人々と協力してWebサイトを構築しているためです。ワークステーションのそれぞれにコピーがあると、データベースとドキュメントファイルを同期するのが難しくなります。

お読みいただきありがとうございます。

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
2

この問題は、OS X 10.11.1にアップグレードした後も引き続き発生します。

部分的な回避策として、SMBの代わりにSSHFSを使用してファイルを共有できます。 SSHFSは権限を保持しますが、いくつかの欠点があります。

  • 複数のユーザーが同じファイルを書き込むときの問題。
  • ネイティブ拡張属性、ACLなどはサポートされません。
  • SMBより遅い。

Appleサポートコミュニティ: https://discussions.Apple.com/message/29104711

1
Elad

また、SMB2をサポートする最新バージョン(4.2以降)のSambaを使用して、共有で vfs_fruit を有効にすることもできます。これにより、SMB2用のAppleのAAPL拡張機能のサポートが追加されます。これは、SMB1/CIFS用のUnix拡張機能よりもうまく機能するはずです。

1
Elad

TL; DRバージョン:

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

ロングバージョン:

私はこのスレッドが古いことを知っていますが、これは依然として関連する問題です。私の場合、CIFSではなくgitを使用して、仮想Linuxインスタンス上のリモートの作業ツリーを操作しています。 gitリポジトリは実際にはホストシステムに存在しますが、リモートシステムにチェックアウトしています。これは、VMを使用してmacOSでLinux固有のアプリケーションを開発できるようにするためですが、ホストにgitリポジトリを保持します。

とにかく、OPと同じ問題が発生していました。共有ドライバーはデフォルトで実行権限を持つ通常のファイルを作成したため、Gitはファイルモードで変更を検出し、実行ビットでファイルをコミットしようとしました。これを回避するために、mount_smbfsコマンドを使用して共有を手動でマウントする方法を見つけました。重要なオプションは、ファイルモードおよびディレクトリモードの場合、それぞれ-fおよび-dです。

参考までに、macOS 10.11.6「El capitan」を使用しています。

1
Roger Gee

Ubuntuのsmb.confファイルで次のステートメントを使用して、UNIX拡張機能を無効にしてみてください。

unix extensions = no

次に、Sambaを再起動して、問題が解決するかどうかを確認します。

0
shodanshok