it-swarm.com.de

Kann ich den Besitz eines freigegebenen Ordners in Vagrant ändern?

Ich benutze vagrant und chef , um einen eigenen Blog in einer virtuellen Maschine zu entwickeln. Um einfachen Zugriff auf den WordPress-Ordner zu haben, habe ich einen freigegebenen Ordner erstellt.

Der Wordpress-Ordner befindet sich grundsätzlich auf meinem Host und wird als shared folder in/var/www/wordpress in der VM angehängt. Die Konfiguration ist ähnlich wie:

config.vm.share_folder "foo", "/guest/path", "/Host/path"

Mein Problem ist, dass das Eigentum an meinem VM immer vagrant:vagrant ist, selbst wenn ich es an meinem Host ändere. Eigentumsänderungen in der VM werden ignoriert.

Ich kann nicht chown verwenden, um den Besitz des Upload-Verzeichnisses auf www-data:www-data zu setzen.

Es ist möglich, chmod zu verwenden und die Zugriffsbeschränkungen in 777 zu ändern. Dies ist jedoch ein wirklich hässlicher Hack.

Hier ist was ich eigentlich will. Ist das möglich?:

  • Entwicklung: Zugriff auf den freigegebenen Ordner von meinem Host aus.
  • Zugriffsbeschränkung: Auf der VM sollten alle Dateien und Ordner über ordnungsgemäße und sichere Eigentümer- und Zugriffsbeschränkungen verfügen.
33
ayckoster

Wie @StephenKing vorschlägt, können Sie die Optionen des gesamten Verzeichnisses ändern.

Die relevante Funktion ist nicht dokumentiert, aber die Quelle sagt uns:

# File 'lib/vagrant/config/vm.rb', line 53

def share_folder(name, guestpath, hostpath, opts=nil)
  @shared_folders[name] = {
    :guestpath => guestpath.to_s,
    :hostpath => hostpath.to_s,
    :create => false,
    :owner => nil,
    :group => nil,
    :nfs   => false,
    :transient => false,
    :extra => nil
  }.merge(opts || {})
end 

Grundsätzlich können Sie group, owner und acl für den gesamten Ordner festlegen. Ich habe keine Methode gefunden, um den Besitz eines verschachtelten Verzeichnisses zu ändern.

Hier ist ein Quickfix:

config.vm.share_folder "v-wordpress", "/var/www/wordpress", "/Host/path", :owner => "www-data", :group => "www-data"
36
ayckoster

@ john-syrinek

in 1.2+ 

config.vm.synced_folder "src/", "/srv/website",
  owner: "root", group: "root"

http://docs.vagrantup.com/v2/synced-folders/basic_usage.html

12
Sean Burlington

Sie können das Ändern des Besitzes im Gast zulassen

config.vm.share_folder "foo", "/guest/path", "/Host/path", {:extra => 'dmode=777,fmode=777'}
8
StephenKing

Nach den tollen Tipps von @StephenKing und @aycokoster hatte ich einen Use-Case für das Mounten eines anderen Verzeichnisses mit Lesezugriff.

Ich fügte hinzu 

config.vm.share_folder "foo", "/guest/path", "/Host/path", :extra => 'ro'

und 

# discard exit status because chown `id -u vagrant`:`id -g vagrant` /Host/path is okay

vagrant up || true 
2
Barry

Wie aus den anderen Antworten hervorgeht, sollten Sie wahrscheinlich den richtigen Besitzer und die richtige Gruppe mit den Konfigurationsoptionen owner und group einstellen.

Manchmal funktioniert dies jedoch nicht (z. B. wenn der Zielbenutzer erst später während der Bereitstellung erstellt wird). In diesen Fällen können Sie die Freigabe erneut bereitstellen:

Sudo mount -t vboxsf -o uid=`id -u www-data`,gid=`id -g www-data` /path/to/share /path/to/share
0
Florian Brucker