Permissão de gravação ao montar compartilhamentos do Windows a partir do Ubuntu

2

Acho que estou perto de ter meu ambiente de desenvolvimento configurado exatamente do jeito que quero, mas um obstáculo final permanece. Estou executando o VirtualBox em um host Windows 7 x64, com meu ambiente de desenvolvimento dentro de um convidado do Ubuntu 12.04. Eu quero manter os arquivos para meus projetos no sistema de arquivos do host - parcialmente para que eu possa acessá-los quando o convidado do Ubuntu não estiver rodando, mas também para usar o Tortoise e outras ferramentas baseadas no Windows ( cough Photoshop ), e também facilita o meu esquema de backup.

Então eu tenho uma pasta "Rails" na minha unidade NTFS, que eu compartilhei do host com um usuário criado especificamente para o convidado do Ubuntu. O ponto de montagem foi configurado e uma entrada adicionada ao fstab (cifs), usando um arquivo de credenciais e as opções iocharset=utf8,file_mode=0777,dir_mode=07‌​77 Isso é ótimo e meu usuário do Ubuntu tem permissões de leitura e gravação no conteúdo, mas quando tento iniciar meu aplicativo Rails eu recebo erros de permissão em todos os arquivos que o aplicativo precisa gravar (por exemplo, o arquivo de log). O que da?

    
por Ola Tuvesson 09.09.2012 / 03:36

1 resposta

2

Acontece que eu estava simplesmente procurando no lugar errado - eu tinha esquecido que a conta no host do Windows precisava ter permissões de acesso corretas definidas na pasta compartilhada; só tinha Read & execute , Write e List folder contents . Doh! Adicionar Modify corrigiu o problema. Então, nada além de um erro bobo - mas eu também aprendi um pouco mais sobre o sintaxe cifs e fstab e descobri como montar como um usuário simples, permitindo que os pontos de montagem estejam na minha pasta /home/user . A string de montagem final no meu fstab se parece com isso (meus valores são substituídos por [tokens]):

//[server]/[share] /home/[user]/[folder] cifs credentials=/home/[user]/.config/samba/.[server],uid=[user],gid=[group] 0 0

Portanto, você só precisa definir uid e gid para o usuário e grupo que deseja possuir os arquivos no compartilhamento após a montagem - sem necessidade de mais nada. Eu também coloquei as credenciais de usuário do Windows necessárias em um arquivo separado sob o meu diretório .config e fiz chmod 400 para impedir que outras pessoas o lessem.

Levou um tempo surpreendentemente longo para descobrir tudo isso, pois há um milhão de argumentos para usar com cifs, e muitos parecem tê-los entendido mal - muitas pessoas recomendam usar file_mode / dir_mode 777 (que soa como uma idéia muito ruim para mim), e pimenta com argumentos desnecessários como nounix , noperm , rw , iocharset e noacl - nenhum deles é necessário para fazer este trabalho. Então, enquanto o meu problema foi causado por um simples erro, deixarei a pergunta (e esta resposta) aqui; espero que alguém ache útil!

Edit: Devido a um bug na implementação do cifs do Samba , é necessário adicionar o nobrl opção também se você pretende executar bancos de dados SQLite no compartilhamento. Basicamente, o atual cliente Samba cifs Linux não pode lidar com a maneira como o SQLite bloqueia o arquivo de banco de dados. Não é uma ótima solução, e quase certamente uma má idéia em um ambiente multiusuário, mas como no meu caso é um compartilhamento de usuário único, e hospedado na mesma máquina que o cliente (que deve eliminar a latência da rede), eu vou rola com ele.

nobrl

Do not send byte range lock requests to the server. This is necessary for certain applications that break with cifs style mandatory byte range locks (and most cifs servers do not yet support requesting advisory byte range locks).

A entrada fstab agora é assim:

//[server]/[share] /home/[user]/[folder] cifs nobrl,credentials=/home/[user]/.config/samba/.[server],uid=[user],gid=[group] 0 0
    
por 09.09.2012 / 09:59