Directory visualizzate come file quando si condivide un'unità cifs montata


8

Ho un problema in cui una directory viene mostrata come file quando si accede a una condivisione samba (su Ubuntu 12.10) da una macchina Windows.

L'output di ls -ll nella cartella su linuxbox è il seguente:

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

La voce in / 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 accedo alla condivisione direttamente dal NAS sulla mia finestra di Windows, non ci sono problemi.

La versione di Samba è la 3.6.6, ma non ho trovato nulla nei log delle modifiche che sembra rilevante.

Ho provato a montarlo in posizioni diverse con autorizzazioni, utenti e gruppi diversi, ma non ho fatto alcun progresso

A causa della mia scarsa reputazione su serverfault (principalmente utente stackoverflow) non riesco a pubblicare uno screenshot che mostri che le directory sono mostrate come file.

Se digito il percorso completo in Explorer, l'elenco delle directory funziona in modo eccellente, ad eccezione di tutte le sottodirectory che vengono quindi visualizzate come file.

Qualsiasi vettore di attacco per questo problema sarebbe molto apprezzato.

Per favore fatemi sapere se ho fornito dettagli insufficienti.

Modifica: la stessa condivisione quando vi si accede da un OS X, funziona perfettamente elencando le directory come directory. I migliori saluti!

Risposte:


7

Ho finalmente risolto il problema.

Proverò a scrivere di più questa risposta quando avrò tempo.

Il problema è connesso alla ricondivisione di un filesystem cifs e quindi all'accesso da un computer Windows7.

Il bug samba è qui: https://bugzilla.samba.org/show_bug.cgi?id=9346

Ciò sembra derivare dal modo in cui le informazioni sono impostate sull'inode in cifs.

Vedi bug qui: https://bugzilla.kernel.org/show_bug.cgi?id=52791

Quindi il modo in cui Samba dice determina (per i suoi client Windows) è contando il numero di hardlink, piuttosto che testare l'attributo. Poiché cifs (per qualche oscura ragione) imposta sempre questo su zero, dove una directory ne avrà sempre almeno due, la directory apparirà come un file per i client Windows.

Quindi per "risolvere" questo ho installato le mie attuali intestazioni del kernel e il codice sorgente di Linux:

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

Sono quindi andato a /usr/src/linux-source-3.5.0ed ho estratto l'archivio lì.

Individuando la cartella, /usr/src/linux-source-3.5.0/linux-source-3.5.0/fs/cifs nel file inode.c(riga 135) cambio quanto segue :

set_nlink(inode, fattr->cf_nlink);

per:

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

Ho quindi creato un makefile per facilitare la compilazione (ed evitare fastidiosi errori di insmod) Makefile2::

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

Questo ci permette di fare (nella stessa cartella): sudo make -f Makefile2

Questo ci dà un file chiamato cifs.ko.

Quindi ora possiamo fermare Samba, smontare tutte le condivisioni che abbiamo, rimuovere l'attuale cifs e installare il nostro ricompilato.

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

Per me questo ha funzionato, se riavvii la scatola, questa modifica non persisterà. Aggiungerò a questo post quando avrò capito un buon modo per farlo.

Per favore, lancia tutte le domande o i chiarimenti che desideri a modo mio, probabilmente imparerò da esso :)

Anche grazie a Kukks in #samba su freenode, ho imparato molte cose lì, anche se ho finito per muovermi in un'altra direzione.


3
Wow, questo è il tipo di bug che mi fa chiedere "che diamine stavano pensando quando l'hanno scritto?" Se si desidera rilevare un attributo, interrogare l'attributo, non guardare un correlato allentato. È come scrivere un metodo: bool isPirate () {return pegLegs == 1;}. Avrai ragione la maggior parte delle volte, ma ci sono alcuni momenti significativi in ​​cui non lo farai.
Kennet Belenky,

1
Grazie, la patch ha funzionato per me correre Ubuntu 12.04 kernel 3.11e samba 3.6.3. Ho riscontrato solo un paio di problemi: 1) Ho dovuto correre apt-get source linux-image-$(uname -r)per ottenere le fonti appropriate. 2) Per essere in grado di eseguire con successo ho copiato la fs/cifscartella dei sorgenti nella cartella de headers con lo stesso sottotraccia e compilata dalla radice delle intestazioni con make M=fs/cifs, come spiegato qui: http://www.debian-administration.org/article/640 / Rebuilding_a_single_kernel_module
drodsou,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.