CyraxZ
15-11-2016, 01:26
В WinXP поставил VirtualBox и в качестве гостевой ОС установил Debian 8 (для разработки/отладки сайта)
Средствами VirtualBox корневую директорию сайта расшарил между гостевой ОС (Debian) и хост-машиной (WinXP). Т.е. физически все файлы сайта хранятся на хост-машине, а в гостевой ОС (Debian) эту директорию смонтировал в папку, которая является корнем сайта. Монтирование выполняется через виртуальную файловую систему vboxsf, согласно инструкции к VirtualBox:
sudo mount -t vboxsf -o uid=user,gid=user,dmode=755,fmode=644 site /home/user/www/site.ru
Монтирование выполняется нормально. Все изменения в этой директории, выполненные в гостевой машине, видны из хост-машины, и наоборот (двусторонний "шаринг"). nginx и php-процессы запускаются от пользователя user.
Проблема в том, что при запуске любой страницы, любого скрипта или любой html-ки из этой самой смонтированной директории получаем ошибку от nginx:
[crit] 467#467: *1 openat() "/home/user/www/site.ru." failed (1: Operation not permitted)
При этом в браузере страница продолжает ожидать ответа от веб-сервера (т.е. nginx после этой ошибки никакого ответа клиенту-браузеру не отдаёт) минуты 2-3, после чего в браузере отображается пустая страница, а в логах nginx никаких ошибок (например, по таймауту) не появляется. Ключевой проблемой здесь является ошибка openat() - Operation not permitted.
Проверил следующее:
1. Если из браузера запустить скрипт phpmyadmin, который физически расположен не в смонтированной директории, а в /usr/share/phpmyadmin/, то скрипт работает нормально, без каких-либо ошибок
2. Если корневую директорию сайта не монтировать, а просто создать в гостевой ОС директорию с файлами сайта, то тоже никаких проблем не наблюдается
3. Если запускать nginx от root и запрашивать статичный html-файл, возникает та же самая ошибка
4. Если выполнять монтирование с максимальными правами (указанные права выставляются на папки и файлы корректно - проверил), проблема сохраняется:
sudo mount -t vboxsf -o uid=user,gid=user,dmode=7777,fmode=7777 site /home/user/www/site.ru
sudo mount -t vboxsf -o uid=root,gid=root,dmode=7777,fmode=7777 site /home/user/www/site.ru
5. Если в гостевой ОС (Debian) попробовать изменять, удалять, корректировать файлы из смонтированной директории пользователем user, то никаких проблем с правами не наблюдается
Вопрос. Кто здесь виноват ?
Очевидно, что проблема связана с монтированием в директорию гостевой ОС директории хост-машины (виртуальная файловая система vboxsf). Но ведь для гостевой ОС эта директория для всяких-разных (или не для всех ?) операций должна выглядеть как обычная родная директория. Или не так ?
Средствами VirtualBox корневую директорию сайта расшарил между гостевой ОС (Debian) и хост-машиной (WinXP). Т.е. физически все файлы сайта хранятся на хост-машине, а в гостевой ОС (Debian) эту директорию смонтировал в папку, которая является корнем сайта. Монтирование выполняется через виртуальную файловую систему vboxsf, согласно инструкции к VirtualBox:
sudo mount -t vboxsf -o uid=user,gid=user,dmode=755,fmode=644 site /home/user/www/site.ru
Монтирование выполняется нормально. Все изменения в этой директории, выполненные в гостевой машине, видны из хост-машины, и наоборот (двусторонний "шаринг"). nginx и php-процессы запускаются от пользователя user.
Проблема в том, что при запуске любой страницы, любого скрипта или любой html-ки из этой самой смонтированной директории получаем ошибку от nginx:
[crit] 467#467: *1 openat() "/home/user/www/site.ru." failed (1: Operation not permitted)
При этом в браузере страница продолжает ожидать ответа от веб-сервера (т.е. nginx после этой ошибки никакого ответа клиенту-браузеру не отдаёт) минуты 2-3, после чего в браузере отображается пустая страница, а в логах nginx никаких ошибок (например, по таймауту) не появляется. Ключевой проблемой здесь является ошибка openat() - Operation not permitted.
Проверил следующее:
1. Если из браузера запустить скрипт phpmyadmin, который физически расположен не в смонтированной директории, а в /usr/share/phpmyadmin/, то скрипт работает нормально, без каких-либо ошибок
2. Если корневую директорию сайта не монтировать, а просто создать в гостевой ОС директорию с файлами сайта, то тоже никаких проблем не наблюдается
3. Если запускать nginx от root и запрашивать статичный html-файл, возникает та же самая ошибка
4. Если выполнять монтирование с максимальными правами (указанные права выставляются на папки и файлы корректно - проверил), проблема сохраняется:
sudo mount -t vboxsf -o uid=user,gid=user,dmode=7777,fmode=7777 site /home/user/www/site.ru
sudo mount -t vboxsf -o uid=root,gid=root,dmode=7777,fmode=7777 site /home/user/www/site.ru
5. Если в гостевой ОС (Debian) попробовать изменять, удалять, корректировать файлы из смонтированной директории пользователем user, то никаких проблем с правами не наблюдается
Вопрос. Кто здесь виноват ?
Очевидно, что проблема связана с монтированием в директорию гостевой ОС директории хост-машины (виртуальная файловая система vboxsf). Но ведь для гостевой ОС эта директория для всяких-разных (или не для всех ?) операций должна выглядеть как обычная родная директория. Или не так ?