我有一个问题,当从Windows机器访问samba共享(在Ubuntu 12.10上)时,目录显示为文件。
linuxbox文件夹中的ls -ll的输出如下:
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
/ 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
当我在Windows上直接从NAS访问共享时,没有问题。
Samba的版本是3.6.6,但我无法find任何看起来相关的更新日志。
我试着用不同的权限,用户和组来安装它,但是我还没有取得任何进展
由于我在serverfault(主要是stackoverflow用户)声誉低,我无法发布一个截图,显示目录显示为文件。
如果我在资源pipe理器中键入完整的path,目录列表工作的很好,除了任何子目录,然后显示为文件。
任何攻击载体的这个问题将不胜感激。
如果我提供的资料不足,请告诉我。
编辑:从OS X访问相同的共享,完美的列出作为目录的目录。 最好的祝福!
我终于解决了这个问题。
我会尽量在有空的时候写出这个答案。
该问题与重新共享cifs文件系统相关,然后从Windows7计算机访问。
桑巴的错误在这里: https : //bugzilla.samba.org/show_bug.cgi? id = 9346
这显然源于信息在cif的inode上设置的方式。
在这里看到bug: https : //bugzilla.kernel.org/show_bug.cgi?id = 52791
所以Samba告诉的方式决定(对于Windows客户端)是通过计算硬链接的数量,而不是testing属性。 由于cifs(出于一些不明的原因)总是将其设置为零,其中一个目录总是至less有两个,目录将显示为Windows客户端的文件。
所以要“修复”这个,我安装了我当前的内核头文件和linux源代码:
sudo apt-get install linux-headers-$(uname -r) linux-source
然后我去了/usr/src/linux-source-3.5.0并提取了那里的档案。
查找文件夹/usr/src/linux-source-3.5.0/linux-source-3.5.0/fs/cifs我在文件inode.c (第135行)中更改以下内容:
set_nlink(inode, fattr->cf_nlink);
至:
if(fattr->cf_cifsattrs & ATTR_DIRECTORY) set_nlink(inode, 2); else set_nlink(inode, fattr->cf_nlink);
然后我创build了一个makefile来简化编译(并避免了insmod错误): Makefile2 :
obm-m := cifs.o KDIR := /lib/modules/$(shell uname -r)/build PWD := $(shell pwd) default: $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules
这允许我们做(在相同的文件夹中): sudo make -f Makefile2
这给了我们一个名为cifs.ko的文件。
所以现在我们可以停止Samba,卸载我们拥有的任何股份,删除当前的CIF,并安装我们重新编译的。
sudo service smbd stop sudo umount /path/to/share sudo rmmod cifs sudo insmod cifs.ko sudo mount -a sudo service smbd start
对我来说,这个伎俩,如果你重新启动盒子,这个改变将不会持续下去。 当我find一个好方法来做这件事的时候,我会join这个post。
请抛出任何问题或澄清你需要我的方式,我可能会从中学习:)
还要感谢freenode的#samba中的kukks,我在那里学到了很多东西,尽pipe我最终走向另一个方向。