Разрешение на запись при монтировании общих ресурсов Windows из Ubuntu
Я думаю, что я близок к тому, чтобы моя среда разработки была настроена именно так, как я хочу, но остается одна заключительная ошибка. Я использую VirtualBox на хосте Windows 7 x64 с моей средой разработки в гостевой системе Ubuntu 12.04. Я хочу сохранить файлы для своих проектов в файловой системе хоста - отчасти, чтобы я мог получить к ним доступ, когда гостевой Ubuntu не запущен, но также и для того, чтобы я мог использовать Tortoise и другие инструменты на основе Windows (кашель Photoshop), и это также облегчает мой Схема резервного копирования несколько.
Итак, у меня на диске NTFS есть папка "Rails", которой я поделился с хоста пользователем, специально созданным для гостя Ubuntu. Точка монтирования была настроена, и запись добавлена в fstab (cifs) с использованием файла учетных данных и параметров iocharset=utf8,file_mode=0777,dir_mode=0777
Это прекрасно работает, и у моего пользователя Ubuntu есть права на чтение и запись содержимого, но когда я пытаюсь запустить приложение Rails, я получаю ошибки прав доступа к любым файлам, в которые приложение должно записать (например, к файлу журнала). Что дает?
1 ответ
Оказывается, я просто искал не в том месте - я забыл, что для учетной записи на хосте Windows должны быть установлены правильные права доступа к общей папке; это было только Read & execute
, Write
а также List folder contents
, Doh! Добавление Modify
исправил проблему. Так что ничего, кроме глупой ошибки - но я также узнал немного больше о синтаксисе cifs и fstab
и выяснил, как монтировать как скромный пользователь, позволяя точкам монтирования быть в моем /home/user
папка. Последняя строка монтирования в моем fstab выглядит следующим образом (мои значения заменены на [tokens]):
//[server]/[share] /home/[user]/[folder] cifs credentials=/home/[user]/.config/samba/.[server],uid=[user],gid=[group] 0 0
Так что вам нужно только установить uid
а также gid
пользователю и группе, которым вы хотите владеть файлами на общем ресурсе после монтирования - больше ничего не нужно. Я также поместил необходимые учетные данные пользователя Windows в отдельный файл под моим каталогом.config и сделал chmod 400
чтобы другие не читали его.
Потребовалось на удивление много времени, чтобы разобраться во всем этом, поскольку есть миллион аргументов для использования с cifs, и многие, кажется, неправильно их поняли - так много людей рекомендуют использовать file_mode
/dir_mode
777 (что звучит как очень плохая идея для меня), и перец с ненужными аргументами, такими как nounix
, noperm
, rw
, iocharset
а также noacl
- ничего из этого не нужно, чтобы сделать эту работу. Так что, хотя моя проблема была вызвана простой ошибкой, я оставлю вопрос (и этот ответ) здесь; надеюсь, кто-то найдет это полезным!
Изменить: Из- за ошибки в реализации CIFS в Samba, необходимо добавить nobrl
также, если вы собираетесь запускать базы данных SQLite на общем ресурсе. По сути, текущий клиент Samba cifs Linux не может обработать способ, которым SQLite блокирует файл базы данных. Не очень удачное решение и почти наверняка плохая идея в многопользовательской среде, но так как в моем случае это однопользовательский ресурс, размещенный на той же машине, что и клиент (что практически исключает задержки в сети), я собираюсь катись с этим.
nobrl
Не отправляйте запросы блокировки байтового диапазона на сервер. Это необходимо для некоторых приложений, которые нарушают обязательную блокировку диапазона байтов в стиле cifs (и большинство серверов cifs еще не поддерживают запрашивающие консультативные блокировки диапазона байтов).
Запись fstab теперь выглядит так:
//[server]/[share] /home/[user]/[folder] cifs nobrl,credentials=/home/[user]/.config/samba/.[server],uid=[user],gid=[group] 0 0