阿福的软件测试指南

SMB协议

SMB(Server Message Block,服务信息块)协议可以看作是局域网上的共享文件/打印机的一种协议,它可以为网络内部的其它Windows和Linux机器提供文件系统、打印服务或是其他一些信息。

SMB的工作原理是让NetBIOS(Win95网络邻居通信协议)与SMB这两种协议运行在TCP/IP的通信协议上,且使用NetBIOS nameserver让用户的Linux机器可以在Windows的网络邻居里被看到,所以就可以和Win95/NT主机在网络上相互沟通,共享文件与服务了。

目前Microsoft正在开发一种新的文件和打印共享协议--CIFS(Common Internet Files System,通用网络文件协议),该协议支持TCP/IP和DNS等协议,能在www上支持文件和打印共享。在CIFS下服务器实际上是DNS名,由主机名和域名组成。这种变化是从NetBIOS命令结构中分离出来的。目前CIFS还没有得到广泛的应用。现在在Linux和Win95/NT之间的文件共享注意还是 SMB和NFS。

什么是samba?

Samba是用来实现SMB的一种软件,由澳大利亚的Andew Tridgell开发,是一种在Linux(Unix)环境下运行的免费软件。   通过使用Samba,Linux系统可以实现如下功能:   文件服务和打印服务(在Linux和Win95/NT之间系统之间提供打印机和磁盘的共享)   登陆服务器,使用Windows客户能注册到网络上   作为主要域控制器和域中成员的功能   WINS服务器以及浏览功能   支持SSL(Secure Socket Layer)   支持SWAT (Samba Web Administration Tool )   Samba除了支持Linux(Unix)和Win95/NT之外,还支持DOS、IBM OS/2、Macintosh 等操作系统。 查看RHEL(默认没有安装)是否安装Samba服务以及安装了何种版本 命令如下:

 
[root@localhost ~]# rpm -qa | grep samba
samba-common-3.0.10-1.4E
samba-3.0.10-1.4E                                        #samba服务端组件
system-config-samba-1.2.21-1                        #samba图形配置工具
samba-client-3.0.10-1.4E                               #samba客户端组件
在进行配置工作前,需要开启服务的相应端口(netbios,即windows 网上邻居的 通信协议)。
[root@localhost ~]# cat /etc/services | grep netbios
netbios-ns            137/tcp            # NETBIOS Name Service
netbios-ns            137/udp
netbios-dgm         138/tcp             # NETBIOS Datagram Service
netbios-dgm         138/udp
netbios-ssn         139/tcp              # NETBIOS session service

Samba服务相关文件

  • 1)samba服务密码文件

samba服务安装完成后,这个文件默认下是不存在的。 我们可以通过smbpasswd 来创建相应的用户名和密码 smbpasswd -a linux用户名(访问权限设定) PS:samba服务与linux使用不同的密码文件。因此,无法用linux服务下的帐号来登录到samba服务。 通过以下命令可以查看到samba密码文件

 
[root@localhost ~]# cat /etc/samba/smbpasswd
redhat:500:570CE399DA1412ABAAD3B435B51404EE:B9D2D4955B330B
503CC792EB6A55BB1F:[U                    ]:LCT-4911A2AD:
user1:501:570CE399DA1412ABAAD3B435B51404EE:B9D2D4955B330B5
03CC792EB6A55BB1F:[U                      ]:LCT-4911B0D4:
  • 2)/etc/samba/smbusers

该文件是记录用户映射关系的

  • 3)samba服务日志文件

samba服务的日志文件默认安装在/var/log/samba/目录中。 因此,可以根据日志文件来查看服务的运行状态以及用户的访问情况Samba服务主要配置

因为,samba配置选项很多,我选出一些常用配置来说明

 
[root@localhost ~]# cat /etc/samba/smb.conf
#== Global Settings(全局设置)======
[global]
workgroup = MSHOME                        #群组名称彧者工作组域名 
server string = Samba Server              #Samba服务的简要说明
hosts allow = 192.168.0. 192.168.2. 127.    
#访问权限设定(允许192.168.0.0/24,192.168.2.0/24,127.0.0.0/8,中间需要用空格彧者逗号隔开)
printcap name = /etc/printcap                    #打印机的配置文挡
load printers = yes                                   #是否加载打印机设备
;    guest account = pcguest
#在这里可以设置guest帐号名,而设置的帐号名能够在/etc/passwd文件找得到(在此建用户名),如果未指定,使用“nobody”来处理。默认是不使用的
log file = /var/log/samba/%m.log                #日志存挡文件
security = user

#安全级别有5种.
1)share 这种安全级别是最低的,不需要用户名和密码来访问samba服务 
2)user(默认) 在访问samba服务,需要帐号来验证 
3) server 这个也需要帐号来登录,但密码是别外一台服务器 
4)domain 
5)ads

;     password server = 
interfaces = 192.168.0.253          #有多网卡时,需要设置监听的网卡
;interfaces = eth1(网卡参数彧者IP地址)
WINS Server
;     wins support = yes
;     wins server = w.x.y.z
;     wins proxy = yes
#==== Share Definitions (共享目录)======
     idmap uid = 16777216-33554431
     idmap gid = 16777216-33554431
     template shell = /bin/false
     winbind use default domain = no
[homes]                                                #用户的主目录
     comment = Home Directories                #注释说明
     browseable = no                                #是否允许浏览别人主目录
     writable = yes                                   #是否执行写操作
[share]                                                 #测试目录
     comment = Samba Share
     browseable = yes
     writable = no
     path = /samba/share                         #共享路径

[printers]
     comment = All Printers
     path = /var/spool/samba
     browseable = no
# Set public = yes to allow user 'guest account' to print
     guest ok = no
     writable = no
     printable = yes

当配置完成后,需要重新启用samba服务

 
[root@localhost ~]# /etc/init.d/smb restart       #重新启动Samba服务
[root@localhost ~]# service smb  start             #启动Samba服务
[root@localhost ~]# /etc/init.d/smb stop          #停止Samba服务

我们在Windows客户端(192.168.0.100)下测试。linux:IP 192.168.0.1 因为,我配置的时候,开启了验证功能 哈哈,可以在windows下查看linux共享资源 如果,要在Linux下查看windows下共享资源。首先,要安装samba-client客户端组件。查看是否被安装

 
[root@localhost ~]# rpm -q samba-client        
samba-client-3.0.10-1.4E                                #客户端组件

查看查看windows(192.168.0.100)下共享资源列表

 
[root@localhost ~]# smbclient -L //192.168.0.100 -U anonymous
WARNING: no network interfaces found
Password:
Domain=[ZHOUZHIWEI] OS=[Windows 5.1] Server=[Windows 2000 LAN Manager]
                Sharename             Type            Comment
                ---------             ----            -------
                share                     Disk
session request to 192.168.0.100 failed (Called name not present)
session request to 192 failed (Called name not present)
Domain=[ZHOUZHIWEI] OS=[Windows 5.1] Server=[Windows 2000 LAN Manager]
                Server                             Comment
                ---------                        -------
                Workgroup                        Master
                ---------                        -------

查看共享文挡,显示如下 Samba的记录文件

  Samba为smbd、nmbd和访问Samba的客户提供了下列记录文件,分别记录有关smbd、nmbd运行信息和每个客户的访问信息: 记录smbd 信息 /var/log/samba/log.smb 记录nmbd信息 /var/log/samba/log.nmb 记录客户访问信息 /var/log/samba/log.%m

为什么使用samba

原因是Samba最先在Linux和Windows两个平台之间架起了一座桥梁。 Samba的出现,我们可以在Linux系统和Windows系统之间互相通信,比如拷贝文件、实现不同操作系统之间的资源共享等等。 我们可以将其架设成一个功能非常强大的文件服务器,也可以将其架设成打印服务器提供本地和远程联机打印。 甚至我们可以使用samba Server完全取代windows中的域控制器,做域管理工作,使用也非常方便。

Samba应用环境

(1)文件和打印机共享: 文件和打印机共享是Samba的主要功能,SMB进程实现资源共享,将文件和打印机发布到网络之中,以供用户可以访问。

(2)身份验证和权限设置: smbd服务支持user mode和domain mode等身份验证和权限设置模式,通过加密方式可以保护共享的文件和打印机。

(3)名称解析: Samba通过nmbd服务可以搭建NBNS(NetBIOS Name Service)服务器,提供名称解析,将计算机的NetBIOS名解析为IP地址。

(4)浏览服务: 局域网中,Samba服务器可以成为本地主浏览服务器(LMB),保存可用资源列表,当使用客户端访问Windows网上邻居时,会提供浏览列表,显示共享目录、打印机等资源。

samba工作原理

Samba 服务功能强大,SMB不仅提供目录和打印机共享,还支持认证、权限设置。在早期哈,SMB运行于NBT协议(NetBIOS over TCP/IP)上,使用UDP协议的137、138及TCP协议的139端口,后期SMB经过开发,可以直接运行于TCP/IP协议上,没有额外的NBT 层,使用TCP协议的445端口。

Samba工作流程

 

              ---------(1)--------->          ----------(2)---->smb.conf主配置文件
[客户端]                               [Samba服务器]
              -------- (4)---------->             ----------(3)---------->日志文件
(1)客户端请求访问Samba服务器上的Share共享目录。
(2) Samba服务器接收到请求后,会查询主配置文件smb.conf,查看是否共享Share目录,如果共享了这个目录则查看客户端是否有权限访问。
(3)Samba服务器会将本次访问信息记录在日志文件之中,日志文件的名称和路径都是需要我们设置。
(4)如果客户端满足访问权限设置,则允许客户端进行访问

samba配置

主配置文件:/etc/samba/smb.conf

 
该配置文件288行。分为三个部分:
1、samba配置简介,主要讲解samba实现的功能
2:selinux 配置:关于linux的设置
可以根据你的需求对于selinux做不同的设置:
3、Global Settings:全局设置
(1)workgroup = WORKGROUP #workgroup名字
   #server string = Samba Server Version %v #描述字段
   interfaces = lo0 eth0 eth1 #侦听在那些接口上,可配置为ip,网段,接口等各种格式
    hosts allow = 127. 192.168.12. 192.168.13.#访问控制
(2)五种安全级别模式:
share安全级别模式
客户端登录samba服务器,不需要输入用户名和密码就可以浏览samba服务器的资源,适用于公共的共享资源,安全性差,需要配合其他权限设置,保证samba服务器的安全性。
user安全级别模式
客户端登录samba服务器,需要提交合法帐号和密码,经过服务器验证才可以访问共享资源,服务器默认为此级别模式。
server安全级别模式
客户端需要将用户名和密码,提交到指定的一台samba服务器上进行验证,如果验证出现错误,客户端会用user级别访问。
domain安全级别模式
如果samba服务器加入windows域环境中,验证工作服将由windows域控制器负责,domain级别的samba服务器只是成为域的成员客户端,并不具备服务器的特性,samba早期的版本就是使用此级别登录windows域滴。
ads安全级别模式
当samba服务器使用ads安全级别加入到windows域环境中,其就具备了domain安全级别模式中所有的功能并可以具备域控制器的功能。
4:共享目录设置:用户共享目录设置
[test100]---设置共享名,随意命名
path = /test100 设置需要共享的路径
public = no   禁止匿名访问,如果允许则设置为yes
readonly = no  可以读写,如果只读则为yes
wirtable = yes 是否允许写操作,不允许为no
wirte list = redhat3001 redhat3002 redhat3003 可写用户列表
browsable = yes 是否允许浏览
设置匿名访问
public = yes     #允许匿名访问
public = no      #禁止匿名访问
设置访问用户
valid users = 用户名
valid users = @组名
设置目录只读
readonly = yes    #只读
readonly = no     #读写
设置目录可写
writable = yes      #读写
writable = no       #只读
write list格式:
write list = 用户名
write list = @组名
如果需要做更多的配置,可以参照smb.conf文件里的选项
(二):修改完文件后,为samba生成用户,密码数据库
[root@notexample ~]# smbpasswd -a user  添加用户并设置密码
[root@notexample ~]# smbpasswd user 修改用户密码
(三)重启samba服务
service smb restart
 (四):测试
smbclient -L HOSTNAME  查看samba共享的目录
smbclient //hostname/service -U user 在linux下登录samba服务器
example:smbclient //notexample/FTP -U redhat3001
         passwd:
mount -t cifs //notexample/FTP -o user=user,passwd=passwd 挂载samba共享的目录,可以利用autofs自动挂载

主配置文件:/etc/samba/smb.conf

 
该配置文件288行。分为三个部分:
1、samba配置简介,主要讲解samba实现的功能
2:selinux 配置:关于linux的设置
可以根据你的需求对于selinux做不同的设置:
3、Global Settings:全局设置
(1)workgroup = WORKGROUP #workgroup名字
   #server string = Samba Server Version %v #描述字段
   interfaces = lo0 eth0 eth1 #侦听在那些接口上,可配置为ip,网段,接口等各种格式
    hosts allow = 127. 192.168.12. 192.168.13.#访问控制
(2)五种安全级别模式:
share安全级别模式
客户端登录samba服务器,不需要输入用户名和密码就可以浏览samba服务器的资源,适用于公共的共享资源,安全性差,需要配合其他权限设置,保证samba服务器的安全性。
user安全级别模式
客户端登录samba服务器,需要提交合法帐号和密码,经过服务器验证才可以访问共享资源,服务器默认为此级别模式。
server安全级别模式
客户端需要将用户名和密码,提交到指定的一台samba服务器上进行验证,如果验证出现错误,客户端会用user级别访问。
domain安全级别模式
如果samba服务器加入windows域环境中,验证工作服将由windows域控制器负责,domain级别的samba服务器只是成为域的成员客户端,并不具备服务器的特性,samba早期的版本就是使用此级别登录windows域滴。
ads安全级别模式
当samba服务器使用ads安全级别加入到windows域环境中,其就具备了domain安全级别模式中所有的功能并可以具备域控制器的功能。
4:共享目录设置:用户共享目录设置
[test100]---设置共享名,随意命名
path = /test100 设置需要共享的路径
public = no   禁止匿名访问,如果允许则设置为yes
readonly = no  可以读写,如果只读则为yes
wirtable = yes 是否允许写操作,不允许为no
wirte list = redhat3001 redhat3002 redhat3003 可写用户列表
browsable = yes 是否允许浏览
设置匿名访问
public = yes     #允许匿名访问
public = no      #禁止匿名访问
设置访问用户
valid users = 用户名
valid users = @组名
设置目录只读
readonly = yes    #只读
readonly = no     #读写
设置目录可写
writable = yes      #读写
writable = no       #只读
write list格式:
write list = 用户名
write list = @组名
如果需要做更多的配置,可以参照smb.conf文件里的选项
(二):修改完文件后,为samba生成用户,密码数据库
[root@notexample ~]# smbpasswd -a user  添加用户并设置密码
[root@notexample ~]# smbpasswd user 修改用户密码
(三)重启samba服务
service smb restart
 (四):测试
smbclient -L HOSTNAME  查看samba共享的目录
smbclient //hostname/service -U user 在linux下登录samba服务器
example:smbclient //notexample/FTP -U redhat3001
         passwd:
mount -t cifs //notexample/FTP -o user=user,passwd=passwd 挂载samba共享的目录,可以利用autofs自动挂载。