Diretórios mostrados como arquivos, ao compartilhar uma unidade cifs montada

8

Eu tenho um problema em que um diretório é mostrado como um arquivo ao acessar um compartilhamento de samba (no Ubuntu 12.10) a partir de uma máquina Windows.

A saída de ls -ll na pasta no linuxbox é a seguinte:

chubby@chubby:/media/blackhole/_Arkiv$ ls -ll
total 0
drwxrwxrwx 0 jv users 0 Jun 18  2012 _20
drwxrwxrwx 0 jv users 0 Apr 17  2012 _2006
drwxrwxrwx 0 jv users 0 Apr 17  2012 _2007
drwxrwxrwx 0 jv users 0 May 12  2011 _2008
drwxrwxrwx 0 jv users 0 Feb 19 09:53 _2009
drwxrwxrwx 0 jv users 0 Dec 20  2011 _2010
drwxrwxrwx 0 jv users 0 May  8  2012 _2011
drwxrwxrwx 0 jv users 0 Mar  5 11:37 _2012
drwxrwxrwx 0 jv users 0 Feb 28 10:09 _2013
drwxrwxrwx 0 jv users 0 Feb 28 11:18 _Mailarkiv
drwxrwxrwx 0 jv users 0 Jan  3  2011 _Praktikanter

A entrada em / etc / fstab é:

# Mounting blackhole
//192.168.0.50/kunder/ /media/blackhole cifs uid=jv,gid=users,credentials=/home/chubby/.smbcredentials,iocharset=utf8,file_mode=0777,dir_mode=0777 0 0

Quando eu acesso o compartilhamento diretamente do NAS na minha caixa do Windows, não há problemas.

A versão do Samba é 3.6.6, mas não consegui encontrar nada nos changelogs que pareça relevante.

Eu tentei montá-lo em locais diferentes com diferentes permissões, usuários e grupos, mas não fiz nenhum progresso

Devido à minha baixa reputação no serverfault (na maioria das vezes usuário do stackoverflow), não consigo postar uma captura de tela que mostre que os diretórios são mostrados como arquivos.

Se eu digitar o caminho completo no explorer, a listagem de diretórios funciona de maneira excelente, exceto para os subdiretórios que são exibidos como arquivos.

Qualquer vetor de ataque para esse problema seria muito apreciado.

Por favor, deixe-me saber se forneci detalhes insuficientes.

Editar: O mesmo compartilhamento, quando acessado a partir de um OS X, funciona perfeitamente listando os diretórios como diretórios. Atenciosamente!

    
por Johan Sigfred Abildskov 26.03.2013 / 15:22

1 resposta

7

Eu finalmente resolvi o problema.

Vou tentar escrever essa resposta mais quando tiver tempo.

O problema está ligado a compartilhar novamente um sistema de arquivos cifs e depois acessá-lo de um computador Windows7.

O erro do samba está aqui: link

Isto aparentemente decorre da forma como as informações são definidas no inode em cifs.

Veja o bug aqui: link

Assim, o modo como o Samba determina (para seus clientes Windows) é contando o número de hardlinks, em vez de testar o atributo. Como cifs (por algum motivo obscuro) sempre define isso como zero, onde um diretório sempre terá pelo menos dois, o diretório aparecerá como um arquivo para clientes Windows.

Então, para "consertar" isso eu instalei meus cabeçalhos de kernel atuais e o código-fonte do Linux:

sudo apt-get install linux-headers-$(uname -r) linux-source

Eu fui então para /usr/src/linux-source-3.5.0 e extraí o arquivo lá.

Encontrando a pasta /usr/src/linux-source-3.5.0/linux-source-3.5.0/fs/cifs Eu mudo o seguinte no arquivo inode.c (linha 135):

set_nlink(inode, fattr->cf_nlink);

para:

if(fattr->cf_cifsattrs & ATTR_DIRECTORY)
          set_nlink(inode, 2);
        else
          set_nlink(inode, fattr->cf_nlink);

Eu então criei um makefile para facilitar a compilação (e evitar erros insmod irritantes): Makefile2 :

obm-m := cifs.o
KDIR := /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
default:
        $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules

Isso nos permite fazer (na mesma pasta): sudo make -f Makefile2

Isso nos dá um arquivo chamado cifs.ko .

Então, agora podemos parar o Samba, desmontar quaisquer compartilhamentos que tenhamos, remover os cifs atuais e instalar o nosso recompilado.

sudo service smbd stop
sudo umount /path/to/share
sudo rmmod cifs
sudo insmod cifs.ko
sudo mount -a
sudo service smbd start

Para mim, o truque é que, se você reiniciar a caixa, essa alteração não persistirá. Vou adicionar a este post quando descobri uma boa maneira de fazer isso.

Por favor, jogue todas as perguntas ou esclarecimentos que você precisar do meu jeito, eu provavelmente vou aprender com isso:)

Também graças ao kukks em #samba na freenode, eu aprendi muitas coisas lá, embora eu acabei indo em outra direção.

    
por 23.04.2013 / 16:08

Tags