您所在的位置:读书频道 > 操作系统 > Linux > 20.3.3 没有密码的smb.conf设置

20.3.3 没有密码的smb.conf设置

2007-12-07 09:19 鸟哥 机械工业出版社华章公司 字号:T | T
一键收藏,随时查看,分享好友!

《鸟哥的Linux私房菜——服务器架设篇》(第二版)第20章的主要介绍的是在不同的平台上利用同样的协议进行文件传输的操作。本文说的是没有密码的smb.conf设置。

AD:

20.3.3  没有密码的smb.conf设置

是否不需要密码就能够使用SAMBA主机所提供的目录资源?答案:可以。不过,因为不需要密码其他人就能够登录,如果您不小心将重要数据放置到共享的目录中,岂不危险?所以尽量不要这样设置。不过,我们还是介绍一下。先说明一下设置需求。

1. 主机预计设置的参数

主机预计设置的参数如下:

· 在LAN内所有的网上邻居主机工作组(Workgroup)为vbirdhouse。

· 这台Linux主机(SAMBA服务)的NetBIOS名称为vbirdServer。

· 用户登录等级设置为share。

· 仅分享/tmp这个目录而已,且取名为temp。

· Linux主机的编码格式假设为万国码(Unicode,即utf8)。

· 客户端为中文Windows,在客户端的软件也使用big5的编码。

下面就开始依序进行SAMBA的设置。

2. 设置lmhosts文件内容(optional)

前面谈到NetBIOS名称可以由广播的方式自动取得,而NetBIOS也可以通过局域网内一台主控计算机管理,此外,您也可以利用自己主机中的lmhosts配置文件来进行NetBIOS与IP的对应,让NetBIOS与TCP/IP可以对应上关系。一般来说,这个文件是不必设置的,它可以经由广播的方式取得对应。不过,某些时刻确实可以设置一下,从而免除一些额外的搜索时间。例如我的局域网中计算机名称与IP是这样的:

[root@linux ~]# vi /etc/samba/lmhosts
127.0.0.1       localhost
192.168.1.254   vbirdServer
192.168.1.21    vbirdcpu2
192.168.1.11    vbirdcpu1
# 这个文件的内容很简单,与/etc/hosts很类似,左边是IP右边是主机名称
# 主机名称必须符合NetBIOS Name的标准
# 主机名称不要超过15个字符,不要含有特殊字符
# 可使用man lmhosts来查阅

鸟哥局域网内常用的有三台主机,除了Linux这台机器外,还有两台个人计算机,现将这几台计算机的NetBIOS Name写到这个文件中,可以不用SAMBA去搜索了。再次强调,这个名称是NetBIOS Name,而非Host Name。

3. 检查语言资料

在进行SAMBA的设置时,最容易发生错误的地方就是在使用中文文件名,绝大部分的朋友只要使用了中文名,常常会发生一些问题,无法顺利的上传下载,或者是原先的中文文件名上传后,却变成奇怪的乱码。

为了解决这个问题,您需要了解以下几点内容:

· 源文件(您要共享的文件)编码的格式是什么?一般来说,中文Windows的编码默认为Big5。

· 这个文件放置在Linux中,则这台Linux的默认语言编码是什么?这与 /etc/sysconfig/i18n有关。

· SAMBA的显示编码是什么?一般来说与上述的Linux默认编码相同即可。

· 在客户端连接到SAMBA主机的软件语言编码是什么?如果是中文Windows操作系统,默认为Big5。

语言数据需要在上面这几个环境中进行转换,因此如果客户端连上SAMBA的软件编码为Big5,SAMBA使用的语言也是Big5,但是Linux主机却默认仅支持utf8的编码、smb.conf又没有设置好时,数据传输将会发生错误,因此就会出现很多文件名乱码的情况了。

所以,至少要知道Linux语言编码是什么?在Red Hat系统(含CentOS)可以查阅/etc/sysconfig/i18n文件,如下所示为鸟哥的i18n:

[root@linux ~]# cat /etc/sysconfig/i18n
LANG="en_US.UTF-8"                  <==这是您需要注意的地方
SUPPORTED="zh_HK.UTF-8:zh_HK:zh:zh_CN.UTF-8:zh_CN:zh:zh_SG.UTF-8:
zh_SG:zh:zh_TW.UTF-8:zh_TW:zh:en_US.UTF-8:en_US:en"
SYSFONT="latarcyrheb-sun16"

由上述代码可以看出,鸟哥默认的语言编码为en_US.UTF-8,不过尚有支持zh_TW这样的中文编码。先假设鸟哥的编码为万国码(Unicode),之后就能够开始处理smb.conf了。

4. 设置smb.conf配置文件

在这个例子中我们仅分享/tmp这个目录而已,而且假设这个分享出来的目录是可擦写的,另外,并没有分享打印机。而在smb.conf中的批注符号可以是“#”也可以是“;”。

[root@linux~]#cd /etc/samba
[root@linux samba]#cp smb.conf smb.conf.raw  <==先备份
[root@linux samba]#vi smb.conf
# 设置好主机方面的参数
[global]
     # 与主机名称有关的设置信息
     workgroup= vbirdhouse
     netbios name=vbirdServer
     Server string=This is vbird's samba Server

     # 与语言有关的设置信息,为何如此设置请参考前面的说明
     unix charset=utf8
     display charset=utf8
     dos charset=cp950

     # 与日志文件有关的设置信息
     log file=/var/log/samba/%m.log
     max log size=50

     # 与密码有关的设置信息
     security=share

     # 其他默认存在的信息
     socket options=TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
     dns proxy=no
     template shell=/bin/false
     winbind use default domain=no

# 下面是针对/tmp的设置
[temp]
     comment=Temporary file space
     path=/tmp
     read only=no
     public=yes

在原本的smb.conf上已经有很多默认值了,如果不知道这些默认值的用途,尽量保留默认值即可,也可以使用man smb.conf去查询该默认值。例如,CentOS 4.x的smb.conf有针对Server/Client的数据包传递项目默认设置值socket options,也有针对Windows NT及Unix系统的账号对应idmap uid之类的设置值,这些设置值在大型的局域网架构时会使用到,在我们仅有一、两台Linux SAMBA服务器的环境下可以不考虑。

5. 通过testparm查阅smb.conf语法设置的正确性

在启动SAMBA之前,务必要了解到smb.conf语法是否正确,检验的方法是使用testparm指令。测试方式如下:

[root@linux ~]# testparm
参数-v:查阅完整的参数设置,连同默认值也会显示出来

[root@linux ~]# testparm
Load smb config files from /etc/samba/smb.conf
Processing section "[temp]"   <==这个地方需要仔细看,如果有问题会在这边显示
Loaded services file OK.
Server role: ROLE_STANDALONE
Press enter to see a dump of your service definitions <==请按Enter键

# Global parameters
[global]
     dos charset=cp950
     display charset=utf8
     workgroup=VBIRDHOUSE
     netbios name=VBIRDSERVER
     Server string=This is vbird's samba Server
     security=SHARE
     log file=/var/log/samba/%m.log
     max log size=50
     socket options=TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
     dns proxy=No

[temp]
     comment=Temporary file space
     path=/tmp
     read only=No
     guest ok=Yes

以上是语法验证和各个项目的列出,如果执行testparm后出现如下信息,则说明有问题:

Unknown parameter encountered: "linux charset" <==错误的设置
Ignoring unknown parameter "linux charset"
Processing section "[temp]"
Loaded services file OK.
Server role: ROLE_STANDALONE
Press enter to see a dump of your service definitions

如果出现上述错误,则表示smb.conf有个linux charset的设置参数,但是smb.conf其实是不支持这个参数的。可能的问题是SAMBA 2.x与SAMBA 3.x有一些项目的支持已经不存在了,所以旧版的2.x配置文件在3.x上面执行时,就会出现问题。此外,“打字错误”也是很常见的一个问题。先测试一下语法,然后根据smb.conf的项目进行修改。

如果想要了解SAMBA的所有设置(包括没有在smb.conf里设置的默认值),可以使用“testparm -v”来作详细的输出,数据相当丰富,通过这个还可以知道主机的环境设置。

6. 启动与观察

启动操作很简单,利用默认的CentOS启动方式来处理即可。

[root@linux ~]# /etc/init.d/smb start
[root@linux ~]# netstat -tlunp
Active Internet connections (only Servers)
Proto Recv-Q Send-Q Local Address      Foreign Address State PID/Program name
tcp   0       0      0.0.0.0:139        0.0.0.0:*        LISTEN     10338/smbd
tcp   0       0      0.0.0.0:445        0.0.0.0:*        LISTEN     10338/smbd
udp   0       0      192.168.1.254:137 0.0.0.0:*                    10343/nmbd
udp   0       0      0.0.0.0:137         0.0.0.0:*                   10343/nmbd
udp   0       0      192.168.1.254:138  0.0.0.0:*                   10343/nmbd
udp   0       0      0.0.0.0:138         0.0.0.0:*                   10343/nmbd

在SAMBA(网上邻居)中默认会启动多个端口,包括数据传输的TCP端口(139、445),以及进行NetBIOS名称解析之类的UDP端口(137、138),所以您才会看到很多数据。那么能否仅支持139这个必要的端口,关闭445呢?可以的。通过“testparm -v”的观察,可以发现“smb ports=445 139”这个设置值指定两个端口,因此您可以在smb.conf里增加这个设置值,并改为“smb ports=139”即可。不过,建议先保留默认值。

7. 客户端的观察

关于客户端的观察我们会在后续进行介绍。这里仅说明如何确定是否SAMBA设置与服务在顺利运行。我们可以在本机上通过smbClient程序来处理,它的基本语法如下:

[root@linux ~]# smbClient -L [//主机或IP] [-U 用户账号]
参数
-L,仅查阅后面接的主机所共享的目录资源
-U,通过后面接的账号来尝试取得该主机的使用资源

由于在这个范例中并没有规范用户的安全等级,所以需要使用“-U”这个参数。因此可以这样操作:

[root@linux ~]# smbClient -L //127.0.0.1 
Password:                                          <==这里按一下Enter
Domain=[VBIRDHOUSE] OS=[Unix] Server=[samba 3.0.10-1.4E.9]

    Sharename   Type  Comment
    ---------   ----  -------
    temp        Disk  Temporary file space
    IPC$        IPC   IPC Service (This is vbird's samba Server)
    ADMIN$      IPC   IPC Service (This is vbird's samba Server)

Domain=[VBIRDHOUSE] OS=[Unix] Server=[samba 3.0.10-1.4E.9]

    Server           Comment
    ---------        -------
    VBIRDSERVER      This is vbird's samba Server

    Workgroup        Master
    ---------        -------
    VBIRDHOUSE       VBIRDSERVER

以上信息中,分享的目录资源(Sharename)就是在smb.conf中设置的“[temp]”。因此,在这里的意思是:任何人都可以进入//127.0.0.1/temp这个目录中,而这个目录在Linux系统其实是/tmp目录。至于那个IPC$ 及ADMIN$ 则是为了要应对Windows环境所必须存在的项目。

到此为止,一个简单的不需要密码即可登录的SAMBA主机就设置好了。您可先将客户端软件功能的部分进行挂载测试。下面以需要密码才能够登录SAMBA的方式来设计范例。

【责任编辑:董书 TEL:(010)68476606】

回书目   上一节   下一节

分享到:

  1. Linux服务器配置全程实录
  2. 揭秘--优秀PPT这样制作

热点职位

更多>>

热点专题

更多>>

读书

设计模式:可复用面向对象软件的基础(双语版)
《设计模式:可复用面向对象软件的基础》(双语版)是引导读者走入软件设计迷宫的指路明灯,凝聚了软件开发界几十年的设计经验。

51CTO旗下网站

领先的IT技术网站 51CTO 中国首个CIO网站 CIOage 中国首家数字医疗网站 HC3i 51CTO学院 区块链第一聚合媒体 zhijiapro