web-dev-qa-db-fra.com

Impossible de modifier les autorisations des dossiers au sein du dossier d'accueil vagrant

Lorsque je communique avec ma machine virtuelle vagabonde, je peux modifier les autorisations des fichiers et des dossiers situés au-dessus et à l'extérieur du dossier d'utilisateur vagabond, ainsi que des fichiers situés dans le dossier d'utilisateur vagabond. Mais vous ne pouvez pas modifier les autorisations pour les dossiers situés sous le dossier d'utilisateur vagabond. J'ai le même problème si connecté en tant que l'utilisateur vagabond et racine.

Existe-t-il une restriction sur la modification des autorisations dans le dossier de l'utilisateur vagrant? Le dossier d'utilisateur vagant n'est pas partagé avec le système d'exploitation hôte, mais le dossier de déploiement capistrano et le dossier docRoot. 

L'invité est CentOS 6, l'hôte est OS X 10.7. Le vagabond est 1.0.5. Virtualbox est 4.2.1.

51
kayaker243

Le format des dossiers partagés change d'une version à l'autre de Vagrant. Voir la réponse de Fabio https://serverfault.com/questions/398414/vagrant-set-default-share-permissions

Vagrant version 1.3.1 et antérieure

config.vm.share_folder "v-data", "/export", "/export", :owner => 'vagrant', :group => 'httpd', :extra => 'dmode=775,fmode=775'

Version vagabonde 1.3.1, 1.3.2

Dans Vagrant 1.3.1 et versions ultérieures, l'option extra a été remplacée par mount_options qui attend un tableau. 

config.vm.share_folder "v-data", "/export", "/export", :owner => 'vagrant', :group => 'httpd', :mount_options => ['dmode=775', 'fmode=775']

Version vagabonde> = 1.3.3

Dans vagrant 1.3.3, config.vm.share_folder a été remplacé par config.vm.synced_folder

config.vm.synced_folder "v-data", "/export", "/export", :owner => 'vagrant', :group => 'httpd', :mount_options => ['dmode=775', 'fmode=775']

86
Greg Elin

Mon problème pourrait être lié au vôtre.

J'ai un centos vm dans vagabond en tant qu'invité et win7 en tant qu'hôte.

Je ne peux pas réellement modifier les autorisations dans la VM des dossiers partagés avec l'hôte.

je ferai un rapport si je découvre quelque chose d’utile . Discutez sur le groupe Google ici:

https://groups.google.com/forum/?fromgroups=#!topic/vagrant-up/2JvcoZTuWRI

UPDATE 1: J'ai aussi lu qu'il était impossible de créer des liens symboliques dans des dossiers partagés.

UPDATE 2: Il semble que je ne puisse pas modifier les autorisations de la boîte virtuelle après sa création. Cependant, dans VagrantFile, vous pouvez définir les autorisations sur les dossiers partagés comme suit: I.E. 

config.vm.share_folder "v-data", "/export", "/export", :owner=> 'vagrant', :group=>'httpd', :extra => 'dmode=775,fmode=775'

ici, j'ai défini le propriétaire, le groupe et les autorisations qui fonctionnent pour nous.

J'espère que ça aide.

17
Jamie.Good

Dans Vagrant 1.2.7, version 2, on utilise Vagrantfiles, la syntaxe est donc légèrement différente de celle des réponses précédentes . C'est ce qui me convient le mieux avec CentOS 6.2. Je trouve que l'utilisation d'un chemin relatif comme source fonctionne mieux dans ma situation. Il pointe vers le dossier partagé.

config.vm.synced_folder "./", "/vagrant", owner: 'vagrant', group: 'Apache', extra: 'dmode=775,fmode=775'

Comme indiqué par Jamie, il est toujours nécessaire de le configurer avant création, utilisez donc un vagrant reload après avoir modifié votre Vagrantfile écrasant.

9
David Spreekmeester

VirtualBox n'autorise pas la modification du propriétaire/des autorisations pour les dossiers synchronisés.

Vous pouvez le changer dans le fichier Vagrant (selon les réponses des autres).
Envisagez de changer le propriétaire au lieu du groupe.
Considérez également que - s’il est fait pour que votre serveur puisse écrire dans des fichiers - votre serveur s’appellera probablement www-data au lieu de httpd. Utilisez ps aux | grep nginx [ou Apache/lighthttpd] pour vérifier.

Il y a d'autres options:

  • Changez le propriétaire du programme qui accède aux fichiers partagés au lieu du dossier synchronisé.
    Par exemple, si PHP doit écrire dans un fichier, modifiez le serveur et PHP pour qu'il s'exécute comme un vagabond. [Dans Apache, cela se fait dans httpd.conf. L'utilisateur de NGINX est défini dans nginx.conf, l'utilisateur de php-fpm est dans php-fpm.conf ou l'un des fichiers qu'il contient.
    Vous devez modifier les autorisations sur le fichier websocket Apache (/ var/lock/Apache2) ou PHP (/var/run/php5-fpm.sock)] et le serveur Web. 
  • Utilisez un VM différent (HyperV, VMware) au lieu de VirtualBox. Les autres VM ne semblent pas avoir cette restriction.
  • Utilisez RSyn pour synchroniser les fichiers au lieu d'utiliser la synchronisation par défaut.
    config.vm.synced_folder "/var/www/", type: "rsync"
  • Définissez toutes les autorisations sur 777. Normalement, cela serait désastreux et même pas une suggestion. C'est toujours une mauvaise idée, mais sur un VM est probablement faisable. Réfléchissez bien avant de donner un accès partagé.
    config.vm.synced_folder "/var/www/", mount_options: ["dmode=777", "fmode=666"] 

Ces réponses sont mieux décrites par Ryan Sechreset et Jeremy Kendall

6
SamGoody

Modifiez les autorisations de l'hôte et non de l'invité. VirtualBox interdit de modifier les autorisations sur les fichiers partagés à partir d'un OS invité.

TLDR; Le problème n’est pas que les utilisateurs de votre invité n’ont pas les autorisations nécessaires pour accéder à vos fichiers hôte. Le problème est que l'utilisateur qui exécute le processus virtaul box sur votre hôte n'a pas le droit d'écrire les fichiers dans l'hôte. Il existe deux ensembles d'autorisations. Les autorisations d'invité doivent être définies comme n'importe quel autre système d'exploitation. Vous devez également vous assurer que le processus de la boîte virtuelle sur lequel votre système d'exploitation invité est en cours dispose des autorisations pour ce dossier. Si ce processus ne dispose que d'un accès en lecture, tout utilisateur invité sera en mesure de lire au maximum.

4
Stewart

Je ne peux pas commenter pour l'instant, mais pour prolonger la réponse de MDeSilva à Vagrant 1.7.2:

Cela peut sembler évident pour certains, mais le groupe et le propriétaire doivent être entre guillemets.

group: "sync_group", owner: "sync_owner", mount_options: ['dmode=755, fmode=644']
2
orediggerco

Pour Vagrant 1.7.2 Éditez le fichier Vagrant comme ceci,

group: sync_group, owner: sync_owner, mount_options: ['dmode=777', 'fmode=776']
0
Shaolin