web-dev-qa-db-fra.com

Puis-je modifier la propriété d'un dossier partagé dans vagrant?

J'utilise vagrant et chef pour développer mon propre blog dans une machine virtuelle. Pour avoir un accès facile au dossier wordpress, j'ai créé un dossier partagé.

Fondamentalement, le dossier wordpress est sur mon hôte et est monté en tant que dossier partagé dans/var/www/wordpress dans la machine virtuelle. La configuration est similaire à:

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

Mon problème est que la propriété de ma VM est toujours vagrant:vagrant même si je la change sur mon hôte. Les modifications de propriété dans VM sont ignorées.

Je ne peux pas utiliser chown pour définir la propriété du répertoire de téléchargement sur www-data:www-data.

Il est possible d’utiliser chmod et de changer les restrictions d’accès en 777, mais c’est un hack vraiment moche.

Voici ce que je veux réellement. Est-ce possible?:

  • Développement: Accès au dossier partagé à partir de mon hôte.
  • Restriction d'accès: Sur la VM, tous les fichiers et dossiers doivent avoir des restrictions de propriété et d'accès appropriées et sécurisées.
33
ayckoster

Comme @StephenKing le suggère, vous pouvez modifier les options de tout le répertoire.

La fonction pertinente n'est pas documentée mais la source nous dit:

# 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 

En gros, vous pouvez définir group, owner et acl pour l’ensemble du dossier, ce qui est bien mieux que de tout définir en mode écriture sur l’hôte. Je n'ai trouvé aucune méthode pour changer la propriété d'un répertoire imbriqué.

Voici un correctif:

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

@ john-syrinek

dans 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

Vous pouvez autoriser la modification de la propriété à l'intérieur de l'invité:

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

Pour faire suite aux astuces géniales de @StephenKing et de @aycokoster, je disposais d'un cas d'utilisation pour monter un autre répertoire en lecture seule.

J'ai ajouté 

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

et 

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

vagrant up || true 
2
Barry

Comme indiqué dans les autres réponses, vous devez probablement définir le bon propriétaire et le bon groupe à l'aide des options de configuration owner et group.

Cependant, cela peut parfois ne pas fonctionner (par exemple, lorsque l'utilisateur cible est créé ultérieurement, uniquement lors de la mise en service). Dans ces cas, vous pouvez remonter le partage:

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