许多问题都可以导致Samba在Windows和Linux系统之间正确建立双向网络连接时失败。你可以通过学习对两个普通问题的解决方法来避免在处理具体问题时花费过多的时间:Windows口令冲突和主机gotcha。
这篇文章假设以下的事实:你已经正确地安装了Samba并配置了Smb.conf文件,你可以从Windows的网络邻居对话框看到Linux系统, 但从Linux版本的网络邻居中(例如LinNeighborhood或smbclient)只能看到你的Linux 。这是出了什么问题?这里有两种最有可能的原因。
解决由Windows口令引起的Samba问题
当利用Windows共享处理Samba网络冲突时,Windows口令应该首次出现在你的列表当中。检查这两个潜在的Windows口令问题:
# Windows网络协议需要在两个系统中使用相同的用户名。如果你以"mike"登录,除非Windows也建立了一个名为"mike"的目录并且这个目录必须是联机的,否则你就连接不到Windows。
# 如果Windows PC运行的是较新的Windows版本(安装Win98和Service Pack 2,或是更新的版本,包括Windows 2000),你需要停止Windows中的口令加密功能。在Samba文件目录下(在Red Hat系统中,这个Samba文件目录位于/usr/share/doc中)查找包含你将修改的Windows版本注册关键字(reg key)的文件。在Windows系统中,点击Start,选择Run,键入regedit,然后点击OK;当注册表编辑器打开后,查找正确的位置并根据 Samba文件中的说明来改变缺省值。
还是有问题?请继续往下读。
如果上面的方法没有解决你的Samba冲突,可能的原因是你遇到了有名的主机gotcha问题。
也许你在/etc/hosts文件中列出了所在网络中所有计算机的名称,如果所有的连接失败,这个文件将提供需要的IP地址。并且,为了保证安全, Samba将检查这个文件。实际上,Samba检查的是gethostbyname()函数。但在某些版本中,特别是Red Hat,这个函数只是返回目前主机的名称,而不是/etc/hosts文件的内容。
为了能看到网络中的其他计算机,你需要编辑Samba的配置文件并将名称排列顺序中默认的host lmhost broadcast win改为lmhost broadcast win,这样就可以改变gethostbyname()函数的返回值。
在对Samba配置文件做了必要的修改之后,按照下列步骤:在一个终端视窗,打开超级用户对话。键入su,点击[Enter],键入你的超级用户口令。打开一个文本编辑器并打开/etc/smb.conf文件。注意:在某些系统中,这个文件位于/etc/samba/smb.conf。查找以下面的文本开头的部分:#All NetBIOS names must be resolved to IP addresses。删除";name resolve order =..."这行中开头的分号。在同一行中,删除单词"host"。确信这行包括"lmhosts"。保存/etc/smb.conf(或者,如果文件位于/etc/samba目录,将文件保存为/etc/samba/smb.conf)。打开同目录下名为lmhosts的文件。如果不存在这个文件,创建一个新的文本文件。在lmhosts文件中,谨慎地键入所在网络中每个计算机的IP地址,域名和别名。这里是一个例子: 127.0.0.1 localhost.localdomain localhost 192.168.1.44 lothlorien.middle-earth.org lothlorien 192.168.1.45 bag-end.middle-earth.org bag-end 192.168.1.46 moria.middle-earth.org moria 192.168.1.47 mordor.middle-earth.org mordor 将lmhosts保存在包含Smb.conf的目录下。退出文本编辑器。在终端视窗中,保持超级用户模式。键入/etc/rc.d/init.d/smb restart,然后按[Enter]。