SAMBA文件共享服务使用NFS服务,可以实现Linux系统之间甚至Linux和Windows系统之间的文件共享;使用FTP服务,可以实现在局域网和广域网中的文件传输。本章我们来看下局域网中最为常用的服务-Samba服务。Samba服务器实现了Windows系统中的SMB/CIFS文件共享协议的服务器功能。运行Samba服务器的Linux主机可以提供Windows文件共享服务,可作为Windows主机的文件服务器使用。Samba客户机软件实现了SMB/CIFS文件共享协议的客户端功能。在Linux主机中使用Samba客户机软件可以访问Windows主机中提供的共享文件。通过Linux系统中使用Samba服务器和Samba客户机软件可以实现Linux主机与Windows主机高效的共享文件互访。14.1Windows文件共享与Samba服务器在Linux(UNIX)主机之间可以使用NFS服务实现文件共享,而且实现起来也十分方便。在Windows主机之间使用Windows文件共享同样可以实现包括网络文件在内的系统资源的共享。如果想在Linux和Windows主机之间进行文件的共享,使用Samba服务器是比较理想的方案。14.1.1Windows网络文件共享在Windows主机之间进行网络文件共享是通过使用微软公司自己的CIFS服务实现的,CIFS是CommonInternetFileSystem的缩写,可以从一台Windows主机直接访问(读取或写入)网络中其他主机的共享文件夹。CIFS最典型的应用是Windows用户能够从“网上邻居”中找到网络中的其他主机并访问其中的共享文件。14.1.2Samba服务器一直以来Windows主机之间都使用SMB/CIFS网络协议实现文件和打印资源的共享。由于SMB/CIFS是微软的私有协议,所以无法直接与UNIX系统进行通信,直到Samba项目的出现。Samba是著名的开源软件项目,在Linux(UNIX)系统中实现了SMB/CIFS网络的协议,可以将Linux系统中的目录和文件提供给Windows主机访问,很好的实现了Linux和Windows系统之间的文件互通。Samba项目中除了包括Samba服务器软件之外还包括了Samba客户端软件。Samba客户机软件可用于访问Samba服务器中的文件共享,当然也可以作为客户端访问Windows主机中的共享。通过Samba服务器和Samba客户机软件,完全可以实现Linux主机与Windows主机之间的双向文件互访,为混合系统的使用提供了极大的便利。14.1.3Linux主机与Windows主机之间进行文件共享的方式第十四章在构建Linux和Windows主机的混合应用系统中,Linux主机通过使用Samba服务器和客户机程序与Windows主机实现共享文件相互访问,主要有几种应用方式:Linux主机运行Samba服务器,Windows主机作为客户端。这是Samba服务器应用的主流方式。Linux主机运行Samba服务器,在Linux主机中使用Samba客户程序对Samba服务器对Samba服务器测试,并访问服务器中的共享文件。此种方式不是典型的应用方式,通常只用于测试。Windows主机提供文件共享服务,Linux主机中使用Samba客户程序访问Windows共享文件。此方式也不常用,但是在Linux主机临时需要访问Windows主机的共享文件时可以使用。通过以上3种文件共享的使用方式可以看出,Linux主机与Windows主机之间进行文件共享的互访主要涉及到Samba服务器、Samba客户机和Windows服务器3个角色,其中Windows服务器既可以提供共享文件服务也可以作为客户机访问其他服务器中的共享文件。14.1.4Samba相关进程Samba服务是由两个进程组成,分别是nmbd和smbd,两者需要同时运行,缺一不可。nmbd:其主要功能是进行NetBIOS名的解析,并提供浏览服务显示网络上的共享资源列表。smbd:其主要功能是用来管理Samba服务器上的共享目录、打印机等,主要是针对网络上的共享资源进行管理的服务。当要访问服务器时,要查找共享文件,这时我们就要依靠smbd这个进程来管理数据传输。14.1.5Samba服务应用环境文件和打印机共享:文件和打印机共享是Samba的主要功能,SMB进程实现资源共享,将文件和打印机发布到网络中,以供用户访问。身份验证和权限设置:smbd服务支持usermode和domainmode等身份验证和权限设置模式,通过加密方式可以保护共享的文件和打印机。名称解析:Samba通过nmbd服务可以搭建NBNS(NetBIOSNameService)服务器,提供名称解析,将计算机的NetBIOS名解析为IP地址。浏览服务:局域网中,Samba服务器可以成为本地主浏览服务器(LMB),保存可用资源列表,当客户端访问Windows网上邻居时会提供浏览列表,显示共享目录、打印机等资源。14.1.6Samba服务的工作原理Samba服务功能强大,这与其通信基于SMB协议有关。SMB不仅提供目录和打印机共享,还支持认证、权限设置。在早期,SMB运行于NBT协议(NetBIOSoverTCP/IP)上,使用UDP协议的137、138及TCP协议的139端口,后期SMB经过开发,可以直接运行在TCP/IP协议上,没有额外的NBT层,使用TCP协议的445端口。14.2Samba服务器与Samba客户机14.2.1搭建Samba服务器所需的软件在RHEL5版本中,默认没有安装Samba服务的服务器程序软件包,但已经安装了Samba服务器和客户机都必须使用的公用文件samba-3.0.33-3.14.el5.i386.rpm该包为Samba服务的主程序包。服务器必须安装该软件包,后面的数字为版本号。samba-client-3.0.33-3.14.el5.i386.rpm该包为Samba的客户端工具,是连接服务器和连接网上邻居的客户端工具并包含其测试工具。samba-common-3.0.33-3.14.el5.i386.rpm该包存放的是通用的工具和库文件,无论是服务器还是客户端都需要安装该软件包。samba-swat-3.0.33-3.14.el5.i386.rpm当安装了这个包以后,就可以通过浏览器(如IE)来对Samba服务器进行图形化管理。14.2.2Samba服务器的安装Linux系统中安装了以上几个软件包后,就可以使用Samba服务器实现完整的文件共享服务了。14.2.3Samba服务器的常规配置在Samba服务安装完毕后,并不是直接可以使用Windows或Linux的客户端访问Samba服务器,我么还必须对服务器进行设置,下面需要做的操作就是要告诉Samba服务器将哪些目录共享出来给客户端进行访问,并根据需要设置其它选项哈,比如添加对共享目录内容的简单描述信息和访问权限等具体设置。在搭建Samba服务器过程中,Samba服务器的配置是以主配置文件smb.conf为核心进行的,配置过程包括如下步骤:在smb.conf文件中进行共享资源的配置,包括用户目录、公共目录等。使用smbpasswd命令建立Samba用户账号和设置账号密码。设置共享目录的本地系统权限并测试smb.conf配置文件。重新加载配置文件或重启smb服务,使配置生效。我们可以把Samba服务器比作图书馆,图书馆为读者共享了图书资源,而Samba服务器共享了我们的文件数据。图书馆会有图书分类,比如科普类、文学类等,并且图书馆对借阅者做限制,拥有资格的读者,才可以借阅相应的图书,当然读者访问图书馆时,图书管理员会对他们的浏览、借阅信息进行记录。对于Samba服务器来说,其主配置文件smb.conf记录了共享的目录列表。比如share目录,temp目录等。对于每个共享目录,需要配置相应权限,服务器会根据smb.conf文件中的设置,判断客户端是否有权限访问,只有拥有权限才可以访问服务器的资源。Samba服务器同样会对用户的行为进行记录,每一次访问的信息都会记录在日志文件中,以便Linux管理员查询哪些客户端访问过Samba服务器。1、smb.conf文件的配置Samba服务器的主配置文件是smb.conf,保存在目录“/etc/samba/”中。smb.conf文件中包括了大量的注释行和样例行。这些内容对Samba服务器的配置时无效的,这些行的功能就是为用户提供帮助。用户在进行文件配置时也可以将暂时不适用的配置行用“#”或“;”注释掉,而不必删除这些配置的内容。文件中的注释行以“#”开始,是对配置内容的文字说明,方便用户参考。文件中的样例行以“;”开始,是对配置内容的的举例,用户可以参考样例行进行文件的设置。我们可以使用grep命令去除注释行和样例行的内容,这样就可以更加清晰的查看配置文件的内容。smb.conf配置文件的默认设置经过整理后的内容如下:从以上文件内容可以看书smb.conf配置文件包括以下3部分内容:[global]部分是Samba服务器的全局设置,配置项的内容对整个Samba服务器有效。[homes]部分设置了用户共享目录的属性,该部分中不包括的设置项使用配置文件中的全局设置。[printers]部分设置了Samba服务器中的打印机共享资源的属性,Samba服务器除了可以提供以上文件共享,还能够提供打印机的共享。以上3部分只是Samba服务器的默认设置,用户可以根据自己的应用需求在smb.conf配置文件中添加共享资源的设置,共享资源的名称需要放置在方括号[]中。2、smb.conf文件的全局设置1)全局设置的项目对所有的共享资源都生效,该部分是[global]开始。其内容一般有:workgroup=MYGROUP设置Samba服务器所在的工作组的名字,默认是MYGROUP。serverstring=SambaServerVersion%v设置Samba服务器的说明文字,描述Samba主机,用户可以根据描述信息知道自己登陆的服务器。通过网上邻居时可在备注信息中看到此信息。netbiosname=ComputerName定义计算机的NetBIOS名称hostsallow=网络或主机定义允许访问的网络或主机地址loadprinters=yes或no自动加载打印机列表,设置yes之后就不需要单独设置每一台打印机的共享了printing=打印系统名称定义打印系统guestaccount=pcguest指定默认的匿名账号,如果不设置,则默认的匿名账号是nobodylogfile=日志文件名指定日志文件maxlogsize=尺寸定义日志文件的最大尺寸,单位是KB,如果取值为0,则不限制日志文件尺寸passwordserver=NT-Server-Name指定身份验证的服务器,只有security设置为server或domain时才有效。取值可以是服务器的FQDN,也可以是服务器的IP地址encryptpasswords=yes/no指定是否加密密码,如果设置为no,则身份验证期间在网络上传输明文密码smbpasswdfile=/etc/samba/smbpasswd指定存放Samba用户密码的文件,默认是/etc/samba/smbpasswd。usernamemap=/etc/samba/smbusers指定Windows系统与Linux系统之间的用户映射文件,默认是/etc/samba/smbusers。例如文件中有一行“root=administrator”,则用户已administrator身份访问Samba服务器时,会被当做root对待interfaces=192.168.12.2/24192.168.13.2/24指定Samba使用的网络接口,如果计算机有多个网络接口,可以使用该参数。具体取值可以是接口或者IP地址等。例如:interfaces=eth0192.168.0.2/24loc