Puedo modificar la propiedad de una carpeta compartida en vagrant?


Utilizo vagranty chef para desarrollar mi propio blog en una máquina virtual. Para tener fácil acceso a la carpeta de Wordpress he creado una carpeta compartida.

Básicamente la carpeta de wordpress está en mi host y se monta como carpeta compartida en /var/www/wordpress en la máquina virtual. La configuración es similar a:

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

Mi problema es que la propiedad en mi VM siempre es vagrant:vagrant incluso si la cambio en mi host. Los cambios de propiedad en la máquina virtual se ignoran.

I no se puede usar chown para establecer la propiedad del directorio de carga en www-data:www-data.

Es posible usar chmod y cambiar las restricciones de acceso a 777, pero este es un truco realmente feo.

Esto es lo que realmente quiero. Es esto posible?:

  • Desarrollo: Acceso a la carpeta compartida desde mi host.
  • Restricción de acceso: En la máquina virtual, todos los archivos y carpetas deben tener restricciones de propiedad y acceso adecuadas y seguras.
Author: ayckoster, 2012-11-26

4 answers

Como @StephenKing sugiere, puede cambiar las opciones de todo el directorio.

La función relevante no está documentada pero la fuente nos dice:

# 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 

Básicamente puede establecer group, owner y acl para toda la carpeta, lo que es mucho mejor que establecer todo en world writable en el host. No he encontrado ningún método para cambiar la propiedad de un directorio anidado.

Aquí hay un quickfix:

config.vm.share_folder "v-wordpress", "/var/www/wordpress", "/host/path", :owner => "www-data", :group => "www-data"
 35
Author: ayckoster,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-04-14 13:02:24

@john-syrinek

En 1.2 +

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

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

 11
Author: Sean Burlington,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-10-31 12:16:40

Puede permitir cambiar la propiedad dentro del invitado:

config.vm.share_folder "foo", "/guest/path", "/host/path", {:extra => 'dmode=777,fmode=777'}
 7
Author: StephenKing,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-11-26 15:55:06

Siguiendo los consejos increíbles de @StephenKing y @aycokoster, tuve un caso de uso para montar otro directorio de solo lectura.

He añadido

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

Y

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

vagrant up || true 
 1
Author: Barry,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-03-05 17:23:07