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是用来实现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服务安装完成后,这个文件默认下是不存在的。 我们可以通过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:
该文件是记录用户映射关系的
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最先在Linux和Windows两个平台之间架起了一座桥梁。 Samba的出现,我们可以在Linux系统和Windows系统之间互相通信,比如拷贝文件、实现不同操作系统之间的资源共享等等。 我们可以将其架设成一个功能非常强大的文件服务器,也可以将其架设成打印服务器提供本地和远程联机打印。 甚至我们可以使用samba Server完全取代windows中的域控制器,做域管理工作,使用也非常方便。
(1)文件和打印机共享: 文件和打印机共享是Samba的主要功能,SMB进程实现资源共享,将文件和打印机发布到网络之中,以供用户可以访问。
(2)身份验证和权限设置: smbd服务支持user mode和domain mode等身份验证和权限设置模式,通过加密方式可以保护共享的文件和打印机。
(3)名称解析: Samba通过nmbd服务可以搭建NBNS(NetBIOS Name Service)服务器,提供名称解析,将计算机的NetBIOS名解析为IP地址。
(4)浏览服务: 局域网中,Samba服务器可以成为本地主浏览服务器(LMB),保存可用资源列表,当使用客户端访问Windows网上邻居时,会提供浏览列表,显示共享目录、打印机等资源。
Samba 服务功能强大,SMB不仅提供目录和打印机共享,还支持认证、权限设置。在早期哈,SMB运行于NBT协议(NetBIOS over TCP/IP)上,使用UDP协议的137、138及TCP协议的139端口,后期SMB经过开发,可以直接运行于TCP/IP协议上,没有额外的NBT 层,使用TCP协议的445端口。
---------(1)---------> ----------(2)---->smb.conf主配置文件 [客户端] [Samba服务器] -------- (4)----------> ----------(3)---------->日志文件 (1)客户端请求访问Samba服务器上的Share共享目录。 (2) Samba服务器接收到请求后,会查询主配置文件smb.conf,查看是否共享Share目录,如果共享了这个目录则查看客户端是否有权限访问。 (3)Samba服务器会将本次访问信息记录在日志文件之中,日志文件的名称和路径都是需要我们设置。 (4)如果客户端满足访问权限设置,则允许客户端进行访问
该配置文件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自动挂载
该配置文件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自动挂载。