web-dev-qa-db-fra.com

Le dossier partagé indique différentes autorisations entre l'hôte Windows et l'invité Ubuntu lors de l'utilisation de VirtualBox.

J'ai rencontré un problème étrange d'autorisations;

Un dossier partagé affiche un ensemble d'autorisations sous Windows et totalement différentes lors de l'accès à Linux via VirtualBox.

Le dossier partagé est mon répertoire XAMPP htdocs /, car je souhaite pouvoir travailler sur les mêmes référentiels/sites à partir de 2 environnements différents. Par conséquent, je ne peux pas déplacer le dossier.

Ma configuration actuelle

  • Windows 7 (hôte), avec Ubuntu s'exécutant dans VirtualBox (invité)
  • J'ai configuré le dossier en tant qu'emplacement partagé et je peux y accéder via le terminal d'Ubuntu sous /media/sf_<myfolder>.
  • Le dossier partagé est défini sur montage automatique et doit être permanent dans les paramètres de VirtualBox.
  • Mon utilisateur fait partie du groupe d'utilisateurs vboxsf et je l'ai confirmé en vérifiant /etc/group.
  • J'ai installé vitrualbox-guest-additions-iso. Les presse-papiers partagés fonctionnent bien.
  • J'utilise cygwin pour mon terminal Windows

Comment les autorisations apparaissent

Windows (du terminal cygwin), en utilisant $ ls -alF

me@my-server /cygdrive/c/xampp/htdocs/my-website$ ls -alF
total 61313
drwxrwxr-x+ 1 me Domain Users        0 Sep  6 12:12 ./
drwxrwx---+ 1 me Domain Users        0 Sep  8 16:22 ../
drwxrwxr-x+ 1 me Domain Users        0 Sep  8 15:57 .git/
drwxrwxr-x+ 1 me Domain Users        0 Sep  6 12:06 bal/
-rw-rw-r--+ 1 me Domain Users     1065 Sep  6 12:06 .csslintrc
-rw-rw-r--+ 1 me Domain Users      367 Sep  6 12:06 .editorconfig

Terminal Ubuntu (VirtualBox), en utilisant $ ls -alF

me@my-server:/media/sf_htdocs/my-website$ ls -alF
total 61256
drwxrwx--- 1 root vboxsf    12288 Sep  6 12:12 ./
drwxrwx--- 1 root vboxsf     4096 Sep  8 16:22 ../
drwxrwx--- 1 root vboxsf     4096 Sep  8 15:57 .git/
drwxrwx--- 1 root vboxsf        0 Sep  6 12:06 bal/
-rwxrwx--- 1 root vboxsf     1065 Sep  6 12:06 .csslintrc*
-rwxrwx--- 1 root vboxsf      367 Sep  6 12:06 .editorconfig*

Windows, en utilisant $ stat

me@my-server /cygdrive/c/xampp/htdocs/my-website$ stat .csslintrc
  File: .csslintrc
  Size: 1065            Blocks: 4          IO Block: 65536  regular file
Device: bcd2ece6h/3167939814d   Inode: 4222124651673917  Links: 1
Access: (0664/-rw-rw-r--)  Uid: (1051198/me)   Gid: (1049089/Domain Users)
Access: 2017-09-06 12:06:15.578083600 +1000
Modify: 2017-09-06 12:06:15.578583700 +1000
Change: 2017-09-06 12:06:15.578583700 +1000
 Birth: 2017-09-06 12:06:15.578083600 +1000

Ubuntu, en utilisant $ stat

me@my-server:/media/sf_htdocs/my-website$ stat .csslintrc 
  File: '.csslintrc'
  Size: 1065        Blocks: 3          IO Block: 4096   regular file
Device: 29h/41d Inode: 14          Links: 1
Access: (0770/-rwxrwx---)  Uid: (    0/    root)   Gid: (  999/  vboxsf)
Access: 2017-09-06 12:06:15.578083600 +1000
Modify: 2017-09-06 12:06:15.578583700 +1000
Change: 2017-09-06 12:06:15.578583700 +1000
 Birth: -

J'ai également créé un fichier à partir des deux systèmes, afin d'inspecter les autorisations par défaut. J'ai fait la même chose avec les répertoires de test, et les deux fichiers + dossiers affichent exactement les mêmes autorisations.

Windows

-rwxrwxr-x+ 1 Administrators Domain Users        0 Sep 11 08:52 .test-from-linux-vm*
-rw-rw-r--+ 1 me      Domain Users        0 Sep 11 08:52 .test-from-windows

UbuntuVM

-rwxrwx--- 1 root vboxsf        0 Sep 11 08:52 .test-from-linux-vm*
-rwxrwx--- 1 root vboxsf        0 Sep 11 08:52 .test-from-windows*

Ce que j'ai remarqué

  • Je ne peux pas modifier les autorisations de fichiers/dossiers dans Ubuntu, même avec Sudo chmod <permissions> <file>
  • Bien que je puisse modifier les autorisations dans Windows, ces modifications ne sont pas reflétées dans Ubuntu:

Windows ; mise à jour de web.config de 664 à 755

-rwxr-xr-x+ 1 me      Domain Users     4555 Sep  6 12:06 web.config*

Ubuntu

-rwxrwx--- 1 root vboxsf     4555 Sep  6 12:06 web.config*

J'ai déjà essayé ...

  • Redémarrage de la VM (plusieurs fois; D)
  • Confirmez que le répertoire partagé est identique sous Windows et Linux, en créant des fichiers de test dans l’un et en vérifiant qu’ils apparaissent dans l’autre.
  • Les suggestions suggestions dans cette question

Mes questions:

  • Pourquoi les ensembles d'autorisations diffèrent-ils entre les systèmes?
  • Sont-ils affectés au niveau du système d'exploitation, pas au niveau du fichier?

Toute aide serait géniale!

1
Timmah

Réponse courte : Vous utilisez des environnements et des logiciels incompatibles. Windows, Cygwin et VirtualBox implémentent tous des implémentations non compatibles avec la version antérieure de normes POSIX , d'où la raison pour laquelle les modifications apportées dans l'une ne sont pas reflétées dans les autres.

En général : stocker un groupe et un utilisateur d'un fichier sous forme de chaîne serait une perte de temps considérable. Non seulement cela prendrait beaucoup d'espace disque supplémentaire, mais il faudrait aussi O (n) du temps de traitement dans le pire des cas pour vérifier si vous avez les permissions pour un seul fichier!

Au lieu de cela, ces attributs sont stockés sous forme de nombre, ce qui nécessiterait toujours simplement O (1) pour vérifier les autorisations. Vous pouvez les voir en utilisant, par exemple, stat commande:

$ stat r600_state_common.c 
  File: r600_state_common.c
  Size: 90718           Blocks: 184        IO Block: 4096   regular file
Device: 26h/38d Inode: 70588       Links: 1
Access: (0644/-rw-r--r--)  Uid: ( 1000/constantine)   Gid: ( 1000/constantine)
Access: 2017-09-08 00:18:26.243828226 +0300
Modify: 2017-09-07 10:52:33.387136858 +0300
Change: 2017-09-07 10:52:33.387136858 +0300
 Birth: -

Ainsi, dans votre système, l'UID du fichier correspond à l'utilisateur root. Dans l'autre système, il s'agit de Domain.

En cas de travail transversal avec les systèmes Windows , il y a plus que cela. Malgré le fait que le standard POSIX n’ait pas subi de changements vraiment fondamentaux, les programmeurs Microsoft ont toujours eu du mal à l’utiliser. Au cours de Windows NT à Windows 10, il y a il y a eu trois réécritures de la mise en oeuvre non compatibles avec la version antérieure . Ainsi, pour des raisons de compatibilité, Cygwin utilise sa propre implémentation pour mapper les descripteurs de sécurité Windows sur les autorisations POSIX.

En plus de cela, vous essayez d'accéder à un système de fichiers Windows via VirtualBox. Bien sûr, VirtualBox a également implémenté son propre mappage, et ce mappage ne fonctionne pas très bien (comme vous pouvez le constater en modifiant les autorisations via chmod et en ne voyant pas les modifications reflétées).

Donc, maintenant, vous avez 3 implémentations sur votre système, incompatibles les unes avec les autres. C'est la raison pour laquelle vous voyez les problèmes.

FTR: VirtualBox est une source ouverte. Si vous y tenez vraiment, vous pourrez le réécrire pour qu'il soit compatible avec Cygwin (car leur implémentation est la seule implémentation POSIX rétro-compatible sous Windows pour autant que je sache)].

NB: utiliser un système en tant que racine est une très mauvaise pratique! Surtout si vous êtes développeur. Pensez à utiliser un utilisateur habituel à la place.

1
Hi-Angel