it-swarm.com.de

Berechtigungen von Ordnern in vagrant-Ausgangsordnern können nicht geändert werden

Wenn ich in meine vagrant vm ein ssh einführe, kann ich die Berechtigungen für Dateien und Ordner oberhalb und außerhalb des vagrant-Benutzerordners sowie für Dateien innerhalb des vagrant-Benutzerordners ändern. Es können jedoch keine Berechtigungen für Ordner im Vagrant-Benutzerordner geändert werden. Ich habe das gleiche Problem, ob ich als Vagrant-Benutzer und als root angemeldet bin.

Gibt es eine Art Einschränkung beim Ändern von Berechtigungen im Ordner des Vagrant-Benutzers? Der Vagrant-Benutzerordner wird nicht für das Host-Betriebssystem freigegeben, der Capistrano-Bereitstellungsordner und der docRoot-Ordner jedoch. 

Gast ist CentOS 6, Host ist OS X 10.7. Vagrant ist 1.0.5. Virtualbox ist 4.2.1.

51
kayaker243

Das Format für freigegebene Ordner ändert sich in verschiedenen Versionen von Vagrant. Siehe Fabios Antwort https://serverfault.com/questions/398414/vagrant-set-default-share-permissions

Vagrant Version 1.3.1 und früher

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

Vagrant Version 1.3.1, 1.3.2

In Vagrant 1.3.1 und höher wurde die Option extra durch mount_options ersetzt, die ein Array erwartet. 

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

Vagrant-Version> = 1.3.3

In vagrant 1.3.3 scheint config.vm.share_folder durch config.vm.synced_folder ersetzt worden zu sein. 

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

86
Greg Elin

Mein Problem könnte mit Ihrem zusammenhängen.

Ich habe einen Centos vm in vagrant als Gast und win7 als Host.

Ich kann die Berechtigungen in VM von Ordnern, die mit dem Host gemeinsam genutzt werden, nicht wirklich ändern.

ich melde mich zurück, wenn ich etwas Nützliches entdecke Auf Google-Gruppe hier diskutieren:

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

UPDATE 1: Ich habe auch gelesen, dass Sie in freigegebenen Ordnern keine Symlinks erstellen können.

UPDATE 2: Es scheint, dass ich die Berechtigungen in der virtuellen Box nach dem Erstellen nicht ändern kann. Sie können jedoch in der VagrantFile die Berechtigungen für die freigegebenen Ordner auf etwas festlegen, das den folgenden Kriterien entspricht: I.E. 

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

hier habe ich den Besitzer, die Gruppe und die Berechtigungen festgelegt, die für uns funktionieren.

Ich hoffe das hilft.

17
Jamie.Good

In Vagrant 1.2.7 werden Vagrantfiles der Version 2 verwendet, daher ist die Syntax etwas anders als in den vorherigen Antworten . Darunter liegt der Trick für mich mit CentOS 6.2. Ich finde, dass die Verwendung eines relativen Pfads als Quelle in meiner Situation am besten funktioniert. Es zeigt auf den freigegebenen Ordner.

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

Wie von Jamie angegeben, ist es noch immer erforderlich, dass Sie ihn vor der Erstellung konfigurieren. Verwenden Sie also einen vagrant reload, nachdem Sie Ihre überschreibende Vagrantfile bearbeitet haben.

9

VirtualBox erlaubt nicht das Ändern des Besitzers/der Berechtigungen für synchronisierte Ordner.

Sie können es in der Vagrant-Datei ändern (wie von anderen beantwortet).
Erwägen Sie, den Besitzer anstelle der Gruppe zu ändern.
Bedenken Sie auch, dass Ihr Server, wenn er so ausgeführt wird, dass er in Dateien schreiben kann, wahrscheinlich www-data anstelle von httpd heißt. Verwenden Sie zur Überprüfung ps aux | grep nginx [oder Apache/lighthttpd].

Es gibt einige andere Optionen:

  • Ändern Sie den Besitzer des Programms, das statt des synchronisierten Ordners auf die freigegebenen Dateien zugreift.
    Wenn zum Beispiel PHP in eine Datei geschrieben werden muss, ändern Sie den Server und PHP, um als Vagrant auszuführen. [In Apache erfolgt dies in httpd.conf. Der Benutzer von NGINX ist in der Datei nginx.conf festgelegt, der Benutzer von php-fpm befindet sich in php-fpm.conf oder in einer der darin enthaltenen Dateien.
    Sie müssen die Berechtigungen für die Apache-Sperrdatei (/ var/lock/Apache2) oder PHP Websocket-Datei (/var/run/php5-fpm.sock)] und den Webserver ändern. 
  • Verwenden Sie anstelle von VirtualBox ein anderes VM (HyperV, VMware). Andere VMs scheinen diese Einschränkung nicht zu haben.
  • Verwenden Sie RSyn, um Dateien zu synchronisieren, anstatt die Standardsynchronisierung zu verwenden.
    config.vm.synced_folder "/var/www/", type: "rsync"
  • Setzen Sie alle Berechtigungen auf 777. Normalerweise wäre dies katastrophal und nicht einmal ein Vorschlag. Es ist immer noch eine schlechte Idee, aber auf einer VM ist möglicherweise machbar. Überlegen Sie noch einmal, bevor Sie einen gemeinsamen Zugriff gewähren.
    config.vm.synced_folder "/var/www/", mount_options: ["dmode=777", "fmode=666"] 

Diese Antworten werden von Ryan Sechreset und Jeremy Kendall besser beschrieben. 

6
SamGoody

Ändern Sie die Berechtigungen vom Host, nicht vom Gast. VirtualBox verbietet das Ändern von Berechtigungen für gemeinsam genutzte Dateien aus einem Gastsystem.

TLDR; Das Problem besteht nicht darin, dass die Benutzer Ihres Gasts keine Zugriffsrechte auf Ihre Host-Dateien haben. Das Problem ist, dass der ausführende Benutzer des virtuellen Boxprozesses auf Ihrem Host keine Berechtigungen zum Schreiben der Dateien in den Host hat. Es gibt zwei Berechtigungssätze. Die Gastberechtigungen müssen wie jedes andere Betriebssystem festgelegt werden. Sie müssen auch sicherstellen, dass der virtuelle Prozess, in dem Ihr Gastsystem ausgeführt wird, über Berechtigungen für diesen Ordner verfügt. Wenn dieser Prozess nur über Lesezugriff verfügt, können die meisten Gastbenutzer nur lesen.

4
Stewart

Kann noch nicht kommentieren, aber um MDeSilvas Antwort auf Vagrant 1.7.2 zu erweitern:

Für manche ist das offensichtlich, aber die Gruppe und der Besitzer sollten in Anführungszeichen stehen.

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

Für Vagrant 1.7.2 Bearbeiten Sie die Vagrant-Datei wie folgt:

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