软体 samba( 三 )

当然啰,您可以自行在 smb.conf 里面设定密码放置的地方及密码档案名称,不过,我们这里都以预设的状态来说明)。比较需要注意的是,这个档案因为包含了使用者的密码,所以,当然许可权方面要较为注意啦!这个档案的拥有者需要是root,且许可权设定为 600 才行 。执行档案SAMBA 的执行档案一般来说,做为 SAMBA Server 的执行档有 testparm,smbd, nmbd, smbpasswd,至于做为 SAMBA Client 的执行档主要则是:smbmount,smbclient 。smbd 与nmbd:这两个执行档是那两个主要的 daemons,每次启动 SAMBA 都会使用到的两个执行档 。testparm:当设定完成了smb.conf 这个主要设定档之后,而想要查看一下 SAMBA 的所有设定参数与 smb.conf的设定项目是否正确时,就需要使用这个 testparm 来查看( test parameters 的简写!)!所以,每次在修改完 smb.conf之后,请务必要使用 testparm 查看看是否有设定错误 。smbpasswd:如果SAMBA 设定的较为严格,需要规定使用者的账号与密码,那幺那个密码档案的建立就需要使用smbpasswd 来建置才可以,所以这个指令与建立 SAMBA 的密码有关 。smbclient:当Linux 主机想要藉由『网路上的芳邻』的功能来查看别台计算机所分享出来的目录与装置时,就可以使用smbclient 来查看啦!这个指令也可以使用在 SAMBA 主机上面,用来查看是否设定成功 。smbmount:在Windows 上面可以设定『网路磁碟驱动器』来连线到主机上面,同样,在Linux 上面,可以透过 smbmount 来将远程主机分享的档案与目录挂载到Linux 主机上面 。不过,其实也可以直接使用 mount 这个指令来进行同样的功能就是了 。相关目录这部份需要较为注意的应该算是 SAMBA的『登录档』 。因为最近以来,利用『网路上的芳邻』来进行破坏的病毒是越来越多!也有越来越多的搞怪者会以网路上的芳邻的相关漏洞进行入侵的伎俩,所以,了解一下登录档放置的地点,并且加以分析,可以得到不小的监测 。/usr/share/doc/samba:包含SAMBA 的所有相关的技术手册 。也就是说,当安装好 SAMBA 之后,系统就已经含有相当丰富而完整的SAMBA 使用手册 。/var/log/samba:SAMBA 预设的登录档案放置目录 。如果 SAMBA 老是设定不起来,又或者怀疑被人家以port 137~139 入侵的话,就到这里来观察 。/usr/share/samba/codepages:放置各个语言的支持格式 。举例来说,想让SAMBA 支持中文,那幺就需要 codepage.950 这个档案的支持 。在smb.conf 里面设定即可 。套用功能由上面说明的 SAMBA 发展缘由,可以看出,SAMBA 最初发展的主要目就是要用来沟通Windows 与 Unix Like 这两个不同的作业平台 。最大的好处就是不必让同样的一份数据放置在不同的地方,搞到后来都不晓得哪一份资料是最新的!而且也可以透过这样的一个档案系统让Linux 与 Windows 的档案传输变得更为简单!也就是说,可以透过『网路上的芳邻』来进行Linux 与 Windows 档案的传输 。那幺 SAMBA 可以进行哪些动作呢?①分享档案与印表机服务;②提供使用者登入 SAMBA 主机时的身份认证,以提供不同身份者的个别数据;③进行 Windows 网路上的主机名称解析 (NetBIOS name)④进行装置的分享 ( 例如 Zip, CDROM... )主要部分两个守护程式:smbd 和 nmbd(对客户端提供NetBIOS名服务)配置档案:/etc/smb.conf使用工具:smbclient,smbstatus,smbmount,smbumount,smbprint,smbprint.sysv,smbrunsamba的启动脚本在/etc/rc.d/init.d/smbBTW,不要把smb与smp(对称多处理器)搞混了,更不要把NetBIOS名与DNS里的主机名搞混淆了! samba预设 是把主机名设定成NetBIOS名,这样通常会超出NetBIOS名的长度限制(16个字元). SMB方法当登入的使用者尝试连线远端的电脑网路分享,例如 \\server\myshare,Windows 用户端会在向使用者取得任何使用者名称或密码前,自动传送登入使用者的登入资料至SMB 伺服器,在这步骤,如果认证失败,Windows 会弹出一个视窗,询问使用者名称和密码 。一般来说,SMB 对话以下列次序建立:"TCP Connection" – 建立 3-way handshake (连线) 至 port 139/tcp 或 445/tcp 。"NetBIOS Session Request" – 使用下列 "Calling Names":本机的 NetBIOS name加上第十六个字元 16th character 0×00:伺服器的 NetBIOS name 加上第十六个字元 0×20"SMB Negotiate Protocol" – 决定使用的协定方言,会是以下其中一项:PC Network Program 1.0(Core) – 只是分享层级保全模式;Microsoft Networks 1.03 (Core Plus) – 只是分享层级保全模式;Lanman1.0(LAN Manager 1.0) – 使用 Challenge/Response Authentication;Lanman2.1 (LANManager 2.1) – 使用 Challenge/Response Authentication; NT LM 0.12 (NT LM 0.12)- 使用 Challenge/Response AuthenticationSMB 对话启动,密码会按以下其中一种方法加密 (或不加密): Null (没有加密);Cleartext (没有加密); LM和 NTLM;NTLM;NTLMv2 。接着密码会弄乱并传送给要求对话的电脑 (讽刺地,这步骤会在要求密码前做) 。SMB Tree Connect:连线分享的名称 (例如: \\servername\share);连线至一种服务类型 (例如: IPC$named pipe)网路邻居在win95的网路邻居里面看不到Linux box注意/etc/smb.conf档案里以下几项的设定:guest account = pcguest(不要照着写,添实际的名字,你要去创建一个pcguest帐号)null password = yes (这一点很重要!)browseable = yespublic = yes另外把security改为share试试.仔细读一读"man smb.conf".再说Win95那个破东西,网上邻居运行一百遍才可能会出来你想要的.用这个方法试一试:先用smbmount Win95的一个已分享资料夹,用"网路监视器"查看一下,然后再用网上邻居看. 怎幺用不能用man smbmount看看吗? 大致是:smbmount //win95-name/share-dir /mount-point [-I ip地址或主机名] [-c 本机客户名][]表示可选项,本机客户名可以随便取.Samuel Leo补充道:标準的smbmount使用格式是smbmount //server/share -c "mount /mnt -u uid -g gid" (注:好像不对吧)我编译了一个修改版的smbmount,使用格式为smbmount //server/share /mnt [passwd] [-Uusername] [-9]ftp://202.103.190.5/incoming/smbmount.gz (binary)如果你用redhat,也可以试试最新出的smbwrapperftp://202.103.190.5/incoming/smbwrapper.so.gz设定一下环境变数LD_PRELOAD=/anywhere/SMBW_USER=usernameSMBW_PASSWORD=passswordSMBW_WORKGROUP=workgroup #optionalSMBW_DEBUG=4 #optionalSMBW_LOGFILE=smbw.log #optional,default to stderrSMBW_PREFIX=/smb #optional,default to /smbexport PWD SMBW_USER SMBW_PASSWORD SMBW_WORKGROUPexport SMBW_DEBUG SMBW_LOGFILE SMBW_PREFIX然后你就可以"ls /smb"看到同组的所有机器名."ls /smb/server"看该机的共享清单.缺点就是太慢,10.10版对execle,execve,…等指定envp的exec仍有bug不能下执行/smb下的档案,不能mmap /smb下的档案.> 先谢谢各位!> 我的Pwin95现在可以看到linux了,我保证什幺也未修改过 。> 现在,我从linux上执行:> smbclient //sjj2/nes(pwin95机器),可看到档案并显示:> smb:\>> smbclient -L sjj2,可看到sjj0(linux)和sjj2(pwin95) 。> 但是我不能从pwin95上访问linux(sjj0),双击总显示:> 找不到机器名或共享名,请确认输入正确,然后重试 。> 我对smbmount不会用,也找不到能看明白的帮助,因为 > 我不理解mount-point的含义,请指导;linux上的> smbd和nmbd当然是运行的 。> 再谢各位!请继续帮忙 。smb.conf在前面的贴子中 。Win95的网上邻居问题太多,别说跟Linux过不去,就是几台Win95之间连个小网,只要没有NT伺服器,他们就经常互相找不到 。所以,一定要把samba的WINS伺服器功能打开,(wins support = yes),然后把95的WINS伺服器指向他 。也许还要加入:name resolv order = wins hosts bcast这样做的话最好让Linux先于Win95启动起来!密码问题>;我在RedHat 5.1里可以共享Win98的服务,在Win98的网上邻居里>;可以看到LINUX的机子,但提示\\linux\IPC$ 需要口令,输入口令总>;不正确,不知该如何设定?此问题好像不只Linux有,NT也有,原因是连线时没有用户名的信息,不要直接点击图示,用磁碟映射:\\linux\username的格式.Win98使用加密的口令认证,而RedHat的SMB预设使用明文认证,所以口令总是不正确 。可以在smb.conf中加入encrypt passwords = yes并使用smbpasswd 维护用户口令Win98 上选 开始 -> 注销,用 Linux 机器上的用户名和口令登录,然后不用输入口令就可以访问 Linux 的资源了 。这和 NT 上是一样的 。或者 Linux 机器上的 /etc/smb.conf 里改成 security = share,guest account = username (username 改成你机器上的一个用户帐号) 。这样如果 Win98 不是用 Linux 系统上的用户帐号登录的,也可以直接访问 Linux,其许可权等于 guest account 指定的用户的许可权 。Linux作出改动后要重启 。注:完全不必重新启动,可以到/etc/rc.d/init.d下去执行smbd stop,然后再smbd start就可以了(这是在Redhat中).在Linux下要学会儘量不重启的基本技巧!传送明文密码如果你用Win98或打过很多补丁的Win95. 如果Samba不提供口令加密是不能登录的.1. 执行Win95_PlainPassword.reg允许Win95传送明文口令运行REGEDIT,添加:[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\VxD\VNETSUP]"EnablePlainTextPassword"=dword:000000012. 升级到最新的Samba,打开口令加密开关.> BTW:哪一版Samba可设加密校验,如何设?我的 Samba 1.9.18p10 就已经可以了. 在 smb.conf 里面找到# You may wish to use password encryption. Please read# ENCRYPTION.txt,Win95.txt and WinNT.txt in the Samba documentation.# Do not enable this option unless you have read those documentsencrypt passwords = yessmb passwd file = /usr/private/smbpasswd这一段就可以了.相关smbclient \\NetBIOS-name\share-dir 不对?这是shell的原因,应该用smbclient \\\\name\\share-dir或者是smbclient '\\name\share-dir'shell不处理两个单引号之间的内容.如果你熟悉C语言,应该很清楚为什幺了!或者使用smbclient //NetBios-name/share-dir 就不存在这个问题 。> 我在我的Linux机器上设好了smb.conf如下(删去了所有注释),为什幺NT不认Samba?把 security = user改成:security = serverSamba 1.9.18以前的版本还不完全支持NT的所谓"域",2.0.0版正在开发中,对此有不小的进步.> 多谢姚飞大侠上回的指点 。但我在安装时还是碰到了问题 。我选择了shadow,no pam,> 还选了disk quota,结果出现> quotas.c:38:sys/quota.h:No such file or director> 这以后再不能编译了 。我把选择该为 shadow no pam,no quota,有编译,出现:> cc:internal compoler error:program cc1 got fatal signal 6> make :*** [smbpass.o] Error!> 我再把shadow,pam quota 等选项选来选去,总是这个错误都不变化了 。好像以前编译> 通过的就不编了只编译后面的 。我怎样才能让它重新编译?> slackware 3.4 kernel 2.0.30> Thanks!如果你用的是Slackware 3.4的话,应该是shadow,no pam,no quota大概从1.9.18p4开始就无法正常编译了,到了smbpass.o必定出这个错.解决方法有几个:1. 直接下载编译好的档案2. 升级GCC到2.8.1,或者 egcs-1.0.23. 升级到Slackware 3.5 > 本人单位财务部门需要装一台档案伺服器,我安装了Redhat 5.1,用 Samba> 作为档案伺服器,客户端使用的是Win95,现在Win95已可以在网上邻居中找到> 伺服器,我将已分享资料夹映射为F:盘,经过试验,大幅度地拷贝档案都没问题.> 但是,因为财务软体是dos方式下的,当我执行F:\下的帐务程式时,一次、两次、> 甚至数次都没问题,但是若干次后每个客户端都出现当机现象 。我将Samba> stop一下,再start就可以了,请问这是怎幺一回事?以前用NT做伺服器并没有> 这样的现象 。俺原来用RH 4.2,kernel 2.0.30+ samba 1.9.16p11也有同样的问题update后就ok了,现在俺用的是kernel 2.0.35 + samba 1.9.18p8版本2012年12月04日,Samba 4.0 RC6 发布 。