Проблема - проблемы с разрешениями в vbox / ubuntu для доступа к общему диску OSX
joe_public@joe_public-ubuntu-VirtualBox:/$ ls /media/sf_shared
ls: cannot open directory /media/sf_shared: Permission denied
Цель - простой способ обмена каталогами между средами Mac и Ubuntu. К сожалению, примеры, которые я видел до сих пор, кажутся немного более сложными, чем они должны быть на самом деле, и на самом деле не объясняют, какова реальная проблема, которую необходимо решить. Я буду пытаться обрабатывать оба этих вопросов здесь.
Среда здесь - Mac с OSX 10.9.5, с Virtual Box 4.3.16, исполняющим Ubuntu-14.04.1 с установленными гостевыми расширениями. Сентябрь 2014 материал.
Я думаю , что вся проблема здесь состоит в том , что UID из каталогов на Mac, так и в Ubuntu должно совпадать - по умолчанию GID ДЕТСКИЙ назначена для пользователей и групп различаются между OSX и Ubuntu, и вот где беда.
Чтобы получить доступ к файлу, нужно либо иметь его, или быть членом группы, которая владеет. И поскольку доступ фактически основан на номере группы, а не на имени группы, все, что необходимо, это создать общий номер группы с обеих сторон, к которым принадлежат пользователи.
Это именно то, что делает ниже решение. Не вводите в заблуждение длиной написанного, это на самом деле очень просто. Есть только много и много примеров того, что происходит.
Я собираюсь листать между OSX и VBOX консолей здесь (макинтош и виртуальный ящик / убунту) в этом док - убедитесь , что вы понимаете , какое окно вашего в.
Последнее замечание: решение, показанное ниже, основано на установлении общего идентификатора группы между средами OSX и Ubuntu, чтобы разрешения для файлов работали. Там могут быть и другие, более современные решения. Это одна очень проста и понятна, и работает на голые кости основных неукрашенными установок.
OSX: —————
Обратите внимание, что это было сделано на свежем из коробки 10.9.5 Mac, ни с чем на нем, не подключен к корпоративной сети, ничего не фантазии, работающие на нем, кроме акций программного обеспечения. Это так просто, как только может.
Когда я делал установку по умолчанию на Mac, joe_public был администратором, и его uid был установлен на 501 .
Joes-MacBook-Pro:/ joe_public$ id
uid=501(joe_public) gid=20(staff) groups=20(staff),999(vboxsf),401(com.apple.sharepoint.group.1),12(everyone),61(localaccounts),79(_appserverusr),80(admin),81(_appserveradm),98(_lpadmin),501(access_bpf),33(_appstore),100(_lpoperator),204(_developer),398(com.apple.access_screensharing),399(com.apple.access_ssh)
Обратите внимание , что UID является 501 - это по умолчанию первый идентификатор аккаунта на OSX - ничего особенного
Я создал несколько каталогов, которыми хочу поделиться на стороне Mac. Обратите внимание, что я не помещал их в свой каталог пользователя по причинам резервного копирования.
Joes-MacBook-Pro:/ joe_public$ mkdir /vdisk
Joes-MacBook-Pro:/ joe_public$ mkdir /vdisk/shared
Joes-MacBook-Pro:/ joe_public$ mkdir /vdisk/public
Joes-MacBook-Pro:/ joe_public$ mkdir /vdisk/images
Joes-MacBook-Pro:vdisk joe_public$ ls -al
total 0
drwxr-xr-x 5 joe_public admin 170 Oct 8 01:08 .
drwxrwxr-t 36 root admin 1292 Oct 6 02:26 ..
drwxrwxrwx 2 joe_public admin 68 Oct 6 01:08 images
drwxr-xr-x 3 joe_public admin 102 Oct 8 01:07 public
drwxrwxrwx 4 joe_public admin 136 Oct 8 00:45 shared
VBOX: ------
Простой виртуальный ящик по умолчанию и установка Ubuntu - опять же, joe_public - это администратор по умолчанию, созданный, когда я установил Ubuntu.
Обратите внимание еще раз, что пространство имен между OSX и Ubuntu совершенно другое. Там нет абсолютно никакой связи между этими двумя именами здесь.
joe_public@joe_public-ubuntu-VirtualBox:/media/sf_shared$ id
uid=1000(joe_public) gid=1000(joe_public) groups=1000(joe_public),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),108(lpadmin),124(sambashare)
Создано три точки монтирования, используя Virtual Box в Настройки -> Общие папки с графическим интерфейсом.
Name Path Auto-mount Access
images /vdisk/images Yes Full
public /vdisk/pubic Yes Read-only
shared /vdisk/shared Yes Full
Примечание: Я на самом деле пришлось перезагружать сеанс для всех этих точек монтирования придумать.
joe_public@joe_public-ubuntu-VirtualBox:~$ mount | grep vboxsf
shared on /media/sf_shared type vboxsf (gid=999,rw)
public on /media/sf_public type vboxsf (gid=999,rw)
images on /media/sf_images type vboxsf (gid=999,rw)
Обратите внимание , что GID для них 999 - это vboxsf группа.
joe_public@joe_public-ubuntu-VirtualBox:~$ grep 999 /etc/group
vboxsf:x:999
Это был назначен automagicly на Virtual Box версии 4.3.16 для нас. Документация vbox показывает, как это изменить, если вы смонтируете путь вручную через командную строку, но кто помнит об этом - просто примите значения по умолчанию, которые нам навязывает графический интерфейс.
Но это не работает (ожидаемый на данный момент - это то, что мы пытаемся решить)
joe_public@joe_public-ubuntu-VirtualBox:/$ ls /media/sf_shared
ls: cannot open directory /media/sf_shared: Permission denied
Обратите внимание, что на данный момент joe_public не является членом этой группы vboxsf - и это будет проблемой, пока мы не исправим это. К вашему сведению: это группы по умолчанию, назначенные учетной записи при ее создании.
joe_public@joe_public-ubuntu-VirtualBox:/media$ grep joe_public /etc/group
adm:x:4:syslog,joe_public
cdrom:x:24:joe_public
sudo:x:27:joe_public
dip:x:30:joe_public
plugdev:x:46:joe_public
lpadmin:x:108:joe_public
joe_public:x:1000:
sambashare:x:124:joe_public
Итак, что мы имеем на данный момент (мы еще ничего не сделали, чтобы это исправить)
• On mac, joe_public gid is 501
• On linux, joe_public gid is 1000
• On linux, vboxfs gid is 999
• On mac, vboxsf does not exist
Мы не хотим , чтобы изменить GID пользовательского joe_public с обеих сторон, так как это боль в заднице на уже установленных систем, а не решает это для других пользователей. Самое простое решение , чтобы сделать соответствующий идентификатор группы - vboxsf - на стороне макинтош, и убедитесь , что joe_public является членом его с обеих сторон.
Так, до сих пор на VBox / убунту, сделать joe_public членом 999 vboxsf группы
joe_public@joe_public-ubuntu-VirtualBox:/$ sudo usermod -a -G vboxsf joe_public
joe_public@joe_public-ubuntu-VirtualBox:/$ grep 999 /etc/group
vboxsf:x:999:joe_public
Я думаю, что я вышел из моего счета и обратно снова здесь после того, как я сделал это.
OSX: —————
Теперь нам нужно создать группу vboxsf на Mac. Я сомневаюсь , что имя действительно имеет значение здесь - это 999 идентификатор группы , что очень важно. Пожалуйста , помните , что имя системы каталогов пространство (а также имена пользователей) отличается между хостом и операционных систем VM. Но только , чтобы сделать жизнь в здравом уме, все мы называем это vboxsf на макинтош. То же рассуждение , почему joe_public используется имя пользователя с обеих сторон.
OSX не имеет простую команду добавить группу, как Linux делает - так что используйте команду DSCL, чтобы сделать это в несколько этапов. Пожалуйста, обратитесь к документации Mac OS для более подробной информации об этом. Обратите внимание, что мы создаем группу vboxsf и добавить joe_public к этой группе здесь.
sudo dscl . -create /Groups/vboxsf
sudo dscl . -create /Groups/vboxsf name vboxsf
sudo dscl . -create /Groups/vboxsf passwd "*”
sudo dscl . -create /Groups/vboxsf gid 999
sudo dscl . -create /Groups/vboxsf GroupMembership joe_public
Итак, на данный момент, мы должны иметь
• On mac, joe_public gid is 501
• On linux, joe_public gid is 1000
• On linux, vboxfs gid is 999
• On mac, vboxsf gid is 999
• On linux, joe_public is member of vboxsf
• On mac, joe_public is member of vboxsf
Доказательство здесь, если это работает - так что это следующий шаг
VBOX: ------
Перейдите в наш каталог и коснитесь файла
joe_public@joe_public-ubuntu-VirtualBox:/$ cd /media/sf_shared
joe_public@joe_public-ubuntu-VirtualBox:/media/sf_shared$ touch foo
Убедитесь, что мы успешно создали файл.
joe_public@joe_public-ubuntu-VirtualBox:/media/sf_shared$ ls -al
total 4
drwxrwx--- 1 root vboxsf 102 Oct 8 00:44 .
drwxr-xr-x 5 root root 4096 Oct 8 00:30 ..
-rwxrwx--- 1 root vboxsf 0 Oct 8 00:44 foo
OSX: —————
Joes-MacBook-Pro:shared joe_public$ cd /vdisk/shared
Joes-MacBook-Pro:shared joe_public$ ls -al
total 0
drwxrwxrwx 3 joe_public vboxsf 102 Oct 8 00:44 .
drwxr-xr-x 6 joe_public admin 204 Oct 8 00:17 ..
-rw-r--r-- 1 joe_public vboxsf 0 Oct 8 00:44 foo
Joes-MacBook-Pro:shared joe_public$ touch bar
Joes-MacBook-Pro:shared joe_public$ ls -al
total 0
drwxrwxrwx 4 joe_public vboxsf 136 Oct 8 00:45 .
drwxr-xr-x 6 joe_public admin 204 Oct 8 00:17 ..
-rw-r--r-- 1 joe_public vboxsf 0 Oct 8 00:45 bar
VBOX: ------
joe_public@joe_public-ubuntu-VirtualBox:/media/sf_shared$ ls -al
total 4
drwxrwx--- 1 root vboxsf 136 Oct 8 00:45 .
drwxr-xr-x 5 root root 4096 Oct 8 00:30 ..
-rwxrwx--- 1 root vboxsf 0 Oct 8 00:45 bar
-rwxrwx--- 1 root vboxsf 0 Oct 8 00:44 foo
Кажется, все работает
VBOX ------ ЗАВЕРШЕНИЕ ПРОВЕРКИ
То , что мы проверяем здесь является то , что вся эта вещь зависит от пользователя joe_public будучи членом vboxsf группы - и самый простой способ это просто удаление joe_public из группы
Удаление пользователя joe_public из группы vboxsf
joe_public@joe_public-ubuntu-VirtualBox:~$ sudo gpasswd -d joe_public vboxsf
log out/in ubuntu
Видя, если мы можем получить доступ к этому нашему каталогу - и мы не можем, и это доказывает, что проблема разрешения группы
joe_public@joe_public-ubuntu-VirtualBox:/$ ls /media/sf_shared
ls: cannot open directory /media/sf_shared: Permission denied
Добавить пользователя обратно в vboxsf
joe_public@joe_public-ubuntu-VirtualBox:/$ sudo usermod -a -G vboxsf joe_public
log out/in ubuntu
Он снова работает!
joe_public@joe_public-ubuntu-VirtualBox:~$ ls -al /media/sf_shared
total 4
drwxrwx--- 1 root vboxsf 170 Oct 8 01:48 .
drwxr-xr-x 6 root root 4096 Oct 8 01:25 ..
-rwxrwx--- 1 root vboxsf 0 Oct 8 00:45 bar
-rwxrwx--- 1 root vboxsf 0 Oct 8 00:44 foo
VBOX: - ОДНА ПРОБЛЕМА - символические ссылки в VBox -------
Если вы идете в / СМИ / sf_shared , вы обнаружите , что символические ссылки в общих каталогах просто не работают. Это действительно большая проблема , если вы пытаетесь создать полную среду разработки Linux на общий диск.
joe_public@joe_public-ubuntu-VirtualBox:/media$ cd sf_images
joe_public@joe_public-ubuntu-VirtualBox:/media/sf_images$ ls
joe_public@joe_public-ubuntu-VirtualBox:/media/sf_images$ mkdir test
joe_public@joe_public-ubuntu-VirtualBox:/media/sf_images$ ln -s test test2
ln: failed to create symbolic link ‘test2’: Read-only file system
По умолчанию символические ссылки не поддерживаются в виртуальных общих папках. Смотрите объяснения ниже. В принципе, насколько я понимаю, символические ссылки представляют собой дыру в безопасности, которая была «исправлена» в Virtual Box путем отключения их поддержки в период 4.1.8 (2011 г.). Я бегу 4.3.16 здесь ...
https://www.virtualbox.org/ticket/10085
http://ahtik.com/blog/fixing-your-virtualbox-shared-folder-symlink-error/
К счастью, есть задняя дверь для его повторного включения через команду Host VBoxManage . Как всегда, пожалуйста, поймите дыры в безопасности, которые вы можете открыть. Я на машине для разработки автономных, так что это не представляется проблемой.
OSX: ------------
Joes-MacBook-Pro:shared pbradstr$ VBoxManage setextradata Ubuntu VBoxInternal2/SharedFoldersEnableSymlinksCreate/shared 1
Примечание: Ubuntu этого имя моей виртуальной машины, и общее это общее имя каталога.
Вы можете получить имя VM следующим образом:
Joes-MacBook-Pro:shared pbradstr$ VBoxManage list vms
"Ubuntu" {8461045a-1cee-4d44-8148-05920a47cee0}
Joes-MacBook-Pro:shared pbradstr$
И имя общих папок, либо через графический интерфейс Virtual Box, либо
Joes-MacBook-Pro:shared pbradstr$ VBoxManage showvminfo Ubuntu | grep -A 5 "Shared folders"
Shared folders:
Name: 'shared', Host path: '/vdisk/shared' (machine mapping), writable
Name: 'public', Host path: '/vdisk/public' (machine mapping), readonly
Name: 'images', Host path: '/vdisk/images' (machine mapping), writable
Я перезагрузил всю систему виртуальной коробки здесь, я не выяснить требование минимальной для того, чтобы принять.
В любом случае, чтобы проверить это, вернитесь в окно vbox.
VBOX: ---------
joe_public@joe_public-ubuntu-VirtualBox:/media/sf_images$ ln -s test test2
Нет ошибки - и проверить
joe_public@joe_public-ubuntu-VirtualBox:/media/sf_shared$ ls -ald test*
drwxrwx--- 1 root vboxsf 102 Oct 8 11:33 test
lrwxrwx--- 1 root vboxsf 4 Oct 8 13:10 test2 -> test
OSX: ----------
И вернемся к Mac - просто чтобы доказать, что все работает
Joes-MacBook-Pro:shared pbradstr$ ln -s test test3
Joes-MacBook-Pro:shared pbradstr$ ls -ald test*
drwxr-xr-x 4 joe_public admin 136 Oct 8 13:20 test
lrwxr-xr-x 1 joe_public admin 4 Oct 8 13:10 test2 -> test
lrwxr-xr-x 1 joe_public admin 4 Oct 8 13:21 test3 -> test
Обратите внимание, я проверял это только на хосте OSX и клиенте виртуальной коробки Ubuntu. Ссылки, которые я перечислил выше, похоже, указывают на то, что может быть проблема с хостом на базе Windows.
Упражнение осталось для студента ———————
Преимущество метода, указанного выше, заключается в том, что он может работать на автономной машине без доступа к сети. Но если подумать об этом, проблема name-verses-id должна стать общей проблемой для любых разнородных вычислительных сред.
Какие другие решения доступны там, где доступны решения этой проблемы? - Такие вещи, как Active Directory (продукт Microsoft) и тому подобное, могут решить эту проблему. Было бы интересно получить коллекцию этих решений и сравнить там различные особенности и компромиссы.
sudo mount.vboxsf -o umask=002,gid=1000,uid=1000 src /media/sf_src
, где Umask является значениеumask
пользователя, UID и GID взяты изid <user>
,src
это имя доли VBox, и/meida/sf_src
является искомой точкой монтирования.