Red Hat Enterprise Linux 5.0服务器构建与故障排除
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

第9章 Samba服务器的安装和故障排除

本章要点

● Samba简介。

● 安装配置Samba服务器。

● 配置Samba服务器共享文件及打印机。

● 其他配置Samba的方法和用好Linux中的网络邻居。

● Samba服务器的故障排除。

9.1 Samba简介

9.1.1 什么是Samba

Samba在市场上并不是一个新面孔,最初出现的时间是1992年。它通过利用越来越多的开放源代码软件获得了丰富的性能,并且变得越来越稳定。随着该系统的不断改进,如今对于那些正在考虑将其文件和打印解决方案迁移到Linux的系统管理员来说,它已经成为一个可选项。

另外,在Linux系统中构建存储解决方案,Samba也是一种非常实惠的方法。首先,在机箱中安装一块支持IDE RAID卡,安装Linux并启动Samba。然后就可以在自己的网络上安排大量存储的存储空间,这是一种成本非常低的实现方法。对于那些移动专家的笔记本电脑的备份,以及需要进行长期归档工作的企业来说,这种解决方案是非常理想的。简而言之,Samba是一组程序,可以使用Windows作为访问远程资源的客户本地支持来访问非Windows服务器上的文件和打印机。更加特殊的是,Samba主要是为基于UNIX设备开发的SMB(服务器信息块协议)的免费实现。然而Samba也可以移植到其他平台上。许多PC用户使用服务器信息块协议,这种技术最近重新命名为“CIFS”(公共Internet文件系统)。它可以访问远程文件系统和打印机,在Windows术语中被称为“共享”或者“服务”。

9.1.2 Samba的历史起源

Samba是一个开放式的源代码软件(OSS)项目,由位于澳大利亚堪培拉的澳大利亚国立大学的Andrew Tridgell在1991年开发。那时Andrew是计算机科学实验室的一个博士研究生,他使用PC-NFS建立到SUN工作站上的文件连接。在从Digital得到eXcursion的测试副本之后,他开始测试客户。然而令人失望的是,eXcursion客户可以连接的服务器仅仅可以在VMS和Ultrix中使用。Andrew和大多数计算机学科的毕业生一样好奇,他开始考虑在非Digital工作站上实现文件共享协议。Andrew开始使用eXcursion客户建立到SUN的连接,其服务器最初的实现有很多硬编码的“幻数”值,这些幻数仅仅复制Ultrix服务器的响应。在和Digital公司的人员交谈之后,Andrew第1次接触到了NetBIOS协议。在第1个实现之后不到两年的时间内,他了解了SMB协议的规范并且掌握了所有的“幻数”值所代表的含义。Andrew在1992年1月发表了第1个实现。在接下来的两年内,他几乎总是使用X终端,未对这个项目进一步开发。在这段时间内,Andrew也接触到了Linux。当人们对其SMB服务器的兴趣与日俱增时,Samba的开发过程复苏了。

一个常见的问题就是“Samba意味着什么?”坦率地说,Andrew的原始软件称为“SMB Server”。由于法律上的原因,必须修改这个名称。Andrew在/usr/dict/words中查找s、m和b之后所找到的单词就是Samba,这就是这个名称的由来。可以从澳大利亚的主要分发站点上下载Samba,也可以下载一套源代码并编译,或者下载某个平台所使用的预编译二进制代码。应该选择世界范围内靠近自己的几个镜像站点之一,可以在Samba的Web主页http://Samba.org上找到完整的镜像站点列表。

9.1.3 SMB协议

Samba之所以能够工作,是因为它模仿的是Windows内核的文件和打印共享协议,该协议称为“SMB”(Server Message Block)。SMB在Windows出现之前就已经存在了,可以追溯到20世纪的80年代,它是由Intel、Microsoft、IBM、施乐,以及3COM等公司联合提出的。虽然在过去的20年中,该协议得到了扩展,但是其基本理论仍然是相同的。Microsoft已经将SMB改名为“公共因特网文件系统”(Common Internet File System,CIFS),这在一定程度上是由于它想与最初的基于NetBIOS的SMB保持一定的距离。最初,NetBIOS是一个伟大的工具,但是渐渐地暴露出该工具无法处理在内部网络中连接到计算机上的全部计算机的台数,或者在Internet上无法显示连接到当前计算机上的计算机的台数。

Samba也执行SMB的一个版本,这个版本在很大程度上与大多数Windows版本兼容。有时,Microsoft的Samba系统会出现崩溃。例如,在Windows 2000的补丁包中当正常的认证方式被改变时,就会导致Samba系统的崩溃,唯一能够让Samba重新工作的方法是通过注册表将认证方式改回。尽管存在这些细小的缺陷(这些缺陷在大量集成之后总是会出现的),但是无论是从Windows连接到Linux,还是从Linux连接到Windows,Samba系统对于实现文件和打印服务来说总是很稳定的。SMB是工作在会话层(ession layer)和表示层(presentation layer),以及小部分应用层(application layer)的协议。SMB使用了NetBIOS的应用程序接口(Application Program Interface,API)。Samba的支持并不是没有局限性。目前它能够较好的和Windows 2000、Windows XP客户端合作,但是还没有完全集成到Microsoft的活动目录结构中,这也是其3.0版本所要实现的功能。

9.1.4 为什么使用Samba

目前,许多用户因业务发展不断更新或升级网络。从而造成用户环境差异较大,整个网络系统平台参差不齐。在服务器端大多使用Linux和UNIX,桌面端使用Windows 9X/2000/XP,所以在企业应用中往往是Linux/UNIX和Windows操作系统共存形成的异构网络。Linux操作系统可以异构在网络环境中的一个经典应用是作为打印及文件服务器,这是通过开放源代码的产品Samba实现的。

传统上,UNIX和Microsoft Windows网络是相互隔绝的,即Windows客户端不能方便地使用UNIX服务器中的文件;反之亦然。在UNIX世界中,包括Linux主要使用NFS(Network File System,网络文件系统)来共享文件。但是由于Microsoft Windows本身并不支持NFS协议,所以任何人如果想从Windows机器上访问UNIX服务器上的文件,通常需要通过第三方供应商购买NFS驱动程序。

Samba为UNIX和Microsoft Windows之间的通信架起了一座桥梁,它是一套程序,支持基于UNIX的主机与基于Windows的主机共享文件与打印机。除此之外,Samba还可以充当Windows域控制器(Domain Controller),这样就可以通过UNIX服务器管理Windows网络。作为域控制器,Samba可以为漫游(roaming)或者本地的用户创建登录配置文件(login profiles),并使用UNIX认证方案来认证。

价格和稳定性是Samba的其他两个可能不太明显的好处,对某些组织来说,为Windows服务器购买一个许可证在费用方面可能是不允许的,Samba是Windows服务器的一个免费替代者。从稳定性的角度来看,由于UNIX一向能够抵抗计算机病毒,所以通过基于UNIX的Samba服务器共享的任何文件和打印机都可以提供比Windows服务器的类似配置更高的可用性,UNIX不会受到与Microsoft Windows服务器相同攻击的影响。关键在于Samba使UNIX服务器对其他Microsoft Windows机器而言就像是一台Windows机器,但是实际上它仍然是使用UNIX或者Linux操作系统。

9.1.5 Samba软件包的功能

1.Samba软件的功能

(1)共享Linux的文件系统。

(2)共享安装在Samba服务器上的打印机。

(3)支持Windows客户使用网上邻居浏览网络。

(4)使用Windows系统共享的文件和打印机。

(5)支持Windows域控制器和Windows成员服务器对使用Samba资源的用户进行认证。

(6)支持WINS名字服务器解析及浏览。

(7)支持SSL安全套接层协议。

2.Samba的核心

Samba的核心是两个守护进程,即smbd和nmbd。服务器启动到停止期间持续运行,smbd监听139 TCP端口;nmbd监听137和138 UDP端口。smbd和nmbd使用的全部配置信息保存在smb.conf文件中,smb.conf向smbd和nmbd两个守护进程说明输出什么、共享输出给谁及如何输出以便共享。smbd进程的作用是处理到来的SMB数据包,为使用该数据包的资源与Linux协商;nmbd进程使其他主机(或工作站)能浏览Linux服务器。

3.Samba的应用环境

图9-1所示为一个使用Samba服务器的网络结构图,这是一个小型网络环境,其中运行Samba服务器的Linux系统为所有的Windows客户提供文件服务器和打印服务器的功能。当Samba服务器在Linux计算机上运行以后,Linux计算机在Windows中的网上邻居中看起来如同一台Windows计算机。另外,Samba还可以被配置为WINS名字服务器及Windows NT/2000/2003的域控制器等。Samba可以取代Windows“网络邻居”的文件及打印机共享功能,也可以完全取代NT PDC(Primary Domain Controler)成为NT网域主控者管理NT网域。若是在同一台Server中架设Samba及Apache,则在办公室或校园环境中使用者可用自己的账号及密码从Windows登录网域,再由“网络上的芳邻”进入使用者个人账号下放置网页的目录并编辑个人网页(传统的方式是在个人计算机上编辑网页,然后使用FTP上传)。

图9-1 使用Samba服务器的网络结构

9.2 安装配置Samba服务器

9.2.1 安装Samba服务器

RHEL 5.0中提供了如下Samba服务器的RPM包。

(1)samba-common:包括Samba服务器和客户端均需要的文件。

(2)samba:Samba服务器端软件。

(3)samba-client:Samba客户端软件。

(4)system-config-samba:Samba服务的GUI配置工具。

可以通过下列命令确定是否已经安装了Samba:

# rpm  -qa | grep  samba

若显示4个软件包,则表示已经安装了Samba;否则必须安装Samba。

9.2.2 Samba配置文件

Samba主要的配置文件是/etc/samba/smb.conf,其中有很多选项可以设置,初学者只需要掌握其中一小部分选项的设置就可以配置所需要的Samba服务器。在了解基本配置的基础上,就能很快架设一台基本的Samba服务器。在基本配置文件中,也只用到其中一小部分命令选项。由于SMB是一个非常复杂的协议,所以配置Samba的工作也是比较麻烦的,大约有超过170条配置项出现在smb.conf文件中。该文件有一个清晰的语法结构,与Windows的*.ini文件十分类似。它被分成几个部分,每一部分都包括几个参数,用来定义Samba输出的共享及其详细操作。文件被分隔成若干节,每一节都由一个被方括号括起来的标志开始(例如,[global]、[home]和[printers]),每一个配置参数或是一个全局参数(影响或控制整个服务器),或是一个服务参数(影响或控制服务器提供的某项服务)。global部分定义的参数用来控制Samba的总特性,除该部分外,每一部分都定义了一个专门的服务。查看配置文件:

# grep -v '^#' /etc/samba/smb.conf | grep -v '^$'|grep -v '^;'
#忽略注释配置Samba文件#
[global]
#这是配置文件中关于全局参数的设置部分
    netbios name = samba24
#设置出现在“网上邻居”中的主机名。默认情况下,使用真正的主机名
    server string = CAD architects
#这是设置服务器主机的说明信息,当在Windows的“网上邻居”中打开Samba上设置的工作组时,在Windows的资源管理器窗口,会列出“名称”和“备注”栏,其中“名称”栏会显示Samba服务器的NetBIOS名称,而“备注”栏则显示此处设置的“Samba Server”。当然,可以修改默认的“Samba Server”,使用自己的描述信息
    workgroup = Workgroup
#这是设置服务器所要加入的工作组的名称,会在Windows的“网上邻居”中看到MYGROUP工作组,可以在此设置所需要的工作组的名称
    hosts allow = 127. 192.168.0.
#这里是设置允许什么样的IP地址的主机访问Samba服务器。默认的情况下,hosts allow选项被注释,表示允许所有IP地址的主机访问
    printcap name = /etc/printcap
#设置打印机配置文件路径,这是指定打印机配置文件的位置。打印守护进程读取printcap文件中的配置信息,监视打印机的工作情况#
    load printers = yes
#允许共享打印机,指定是否要加载打印机(使打印机可以共享)。默认值为yes。如果用户想要自动载入打印机列表,而不是个别地安装,则必须在此指定以上两项#
    printing = cups
#设置打印系统类型,只有在打印系统不是标准的情况下,必须指定;否则不必指定。指定打印系统类型将影响到smb.conf文件中与打印机相关的命令(如print、lpq、lppause及lpresune)的执行方式。默认的打印系统类型为cups#
    cups options = raw
guest account = smbguest
# 设置当访问那些被设置了“guest ok=yes”参数的资源时所要使用的账号名。默认的账号为“nobody”,如果不想用默认的值,则应该去掉注释用的分号,用你想要的账号(如pcguest、 zhangsan等),然后必须将这一新账号加入到/etc/passwd文件中#
log file = /var/log/samba/samba.log
#设置日志文件路径,这一选项要求Samba服务器为每一台连接的机器使用一个单独的日志文件,指定文件的位置,名称。Samba会自动将%m转换成连接主机的NetBIOS名#
max log size = 1000
#指定日志文件的最大容量(以KB为单位),设置为1000KB#
username level = 8
password level = 8
#设置当验证用户口令和账号时最多允许几个大小写字不同#
username map = /etc/samba/smbusers
#指定SMB名字和UNIX名字映射文件的路径,如果每个Windows用户在Samba服务器中有账户,这个可以不设#
add user script = /usr/sbin/useradd -d /dev/null -g sambamachines -c 'Samba Machine Account' -s /bin/false -M '%u'
#添加用户的命令脚本#
smb passwd file = /etc/samba/smbpasswd
#设置在Samba服务器上存放加密的密码文件的位置#
unix password sync = Yes
#设置Samba用户账号和Linux系统账号同步#
passwd program = /usr/bin/passwd '%u'
#设置本地口令程序#
passwd chat = *New*UNIX*password* %n\n *ReType*new*UNIX*password* %n\n *passwd:*all*authentication*tokens*updated*successfully*\n
#控制smbd和/usr/bin/passwd之间的会话,用于对用户密码进行改变#
null passwords = no
socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
#设置服务器和客户之间会话的socket选项#
    interfaces = 127.0.0.1/8192.168.0.0/24
#Samba网络接口地址,配置Samba来使用多个网络界面,如果有多个网络界面,那么必须按照格式在这里列出#
    remote browse sync = 192.168.0.255
    remote announce = 192.168.0.255
    local master = no
#浏览控制选项,如果不想使Samba服务器成为局域网内部的主浏览服务器,将此选项设为no #
    os level = 33
#OS Level决定了该服务器在局域网内的访问优先权。#
    domain master = no
# Domain Master将Samba服务器定义为主域浏览器。此选项将允许Samba在子网列表中比较浏览。如果已经有一
台Windows NT域控制器,不要使用此选项#
    preferred master = no
# Preferred Master使Samba启动时选择一个本地浏览器,并给它获得选择的较高机会#
    time server = no
    domain logons = no
#如果想使Samba成为Windows 95工作站的登录服务器,才使用此选项#
    logon drive = m:
    logon home = \\%L\homes\%u
    logon path = \\%L\profiles\%u
    logon script = %G.bat
#运行一个特定的用户名登录批处理文件#
    name resolve order = wins lmhosts bcast
    wins support = no
# Windows的Internet名服务支持记录部分,WINS Support告诉nmbd守护进程支持WINS服务器。注意,Samba
既可以作为WINS服务器也可作为WINS客户机,但不能兼而有之#
    wins server =
    wins proxy = no
#不为客户做WINS查询,WINS Proxy代表一个非WINS客户通知Samba响应名字解析请求。要使此选项正常工作必
须保证网络中至少有一台WINS服务器。默认值是NO#
    dns proxy = no
#不为客户做DNS查询#
    preserve case = no
    winbind use default domain = yes
    idmap uid = 16777216-33554431
    idmap gid = 16777216-33554431
    template shell = /dev/null
[homes]
#所有使用者的home目录#
comment = Home Directories
#针对共享资源所作的说明、注释部分#
    path = /home
#若共享资源是目录,则指定目录的位置;若为打印机,则指定打印机队列的位置。#
    available = yes
#设置是否启用此共享资源。默认值为yes。若将此参数设置为no,则忽略其他参数设置,所有用户均不得使用此资源#
    browseable = yes
#设置用户是否可以看到此共享资源。默认值为yes,若将此参数设置为no,用户虽然看不到此资源,但是拥有权限的用户仍可直接输入该资源的网址来访问该资源#
    writeable = yes
#设置共享的资源是否可以写入。若共享资源是打印机,则不需设置此参数 #
    printable = no
    share modes = no
    locking = no
    read only = yes
#设置共享资源是否只读或可以写入,默认值为yes。若共享资源为打印机时,此参数无任何意义。这一项与writable相反#
[netlogon]
#netlogon共享管理工具,主要用于用类似注册表补丁、杀毒更新和程序更新等之类的项全局地更新客户机。你想“推给”客户机的任何事情都可以通过netlogon完成。netlogon是用来存放登录脚本的#
comment = Network Logon Service
    path = /home/netlogon
    available = yes
    browseable = yes
    guest ok = yes
    printable = no
    share modes = no
    locking = no
[profiles]
#用户profile文件部分。是用来存放每个登录用户的设置文件,以便用户以后登录可以从服务器读取以前的桌面设置。默认值是使用用户的home目录#
    comment = User Profiles
    path = /home/profiles
    writeable = yes
    available = yes
    browseable = no
    writeable = yes
    guest ok = yes
    printable = no
    locking = no
    create mask = 0600
    directory mask = 0700
[printers]
#打印机共享设置#
    comment = All Printers
#这部分用于配置打印机共享,所有用户都可以共享打印机。#
    path = /var/spool/samba
#设置打印机队列的位置,用户必须自行创建该目录,存放打印的临时文件#
    browseable = yes
#允许浏览共享打印机。#
    printable = yes
#允许用户更改打印机队列中的文件 #
    share modes = no
#必须用账号和密码才可以访问共享打印机 #
    locking = no

Samba定义的变量如下。

(1)%S:当前服务名(如果有的话)。

(2)%P:当前服务的根目录(如果有的话)。

(3)%u:当前服务的用户名(如果有的话)。

(4)%g:当前用户所在的主工作组。

(5)%U:当前对话的用户名。

(6)%G:当前对话的用户的主工作组。

(7)%H:当前服务的用户的Home目录。

(8)%v:Samba服务的版本号。

(9)%h:运行Samba服务器的主机名。

(10)%m:客户机的NetBIOS名称。

(11)%L:服务器的NetBIOS名称。

(12)%M:客户机的主机名。

(13)%N:NIS服务器名。

(14)%p:NIS服务的Home目录。

(15)%R:所采用的协议等级(值可以是CORE、COREPLUS、LANMAN1、LANMAN2及NT1)。

(16)%d:当前服务进程的ID。

(17)%a:客户机的结构(只能识别几项,Samba、WfWg、WinNT及Win95)。

(18)%I:客户机的IP。

(19)%T:当前日期和时间。

9.2.3 设置Samba密码文件

创建一个/etc/samba/smbpasswd文件有两种方法,即批量添加Samba账户和添加单个Samba账户。

1.批量添加Samba账户

可以通过转换/etc/passwd文件批量添加Samba账户。

(1)使用su命令切换成为超级用户。

(2)使用一个Linux命令组合:

#cat /etc/passwd | /usr/bin/mksmbpasswd.sh > /etc/samba/smbpasswd
# 将/etc/passwd里的用户都加到smbpasswd里 #

(3)用编辑器修改/etc/samba/smbpasswd文件,去掉一些无shell的账号:

#vi /etc/samba/smbpasswd

(4)设置文件和目录权限:

# chown root.root /etc/samba/smbpasswd
# chmod 500 /etc/samba

下面就可以使用smbpasswd命令为用户建立密码。例如,要为用户caoj建立密码使用命令:

#smbpasswd caoj

说明:使用smbpasswd命令修改用户口令时,被修改smbpasswd账户的本地系统用户账号必须已经存在。

2.添加单个Samba账户

可以直接使用带-a参数的smbpasswd命令添加单个的Samba账户并设置口令,但是要求被添加的smbpasswd账户的本地系统用户账号必须已经存在。若不存在,应该使用useradd命令添加。超级用户添加Samba账户的方法如下:

#useradd caog  #添加本地系统用户账号#
#passwd caog   #添加本地系统用户账号密码#
#smbpasswd -a caog  #添加Samba账户#

普通用户运行smbpasswd命令的方法如下:

$ smbpasswd
Old SMB password: <在此键入旧口令——如没有旧口令,则按回车键>
New SMB Password: <键入新口令>
Repeat New SMB Password: <重复输入>

如果旧口令输入有问题或者两个新口令不匹配,则无法更改口令。如果以普通用户调用该程序,只能更改其自身的Samba口令。

注意:smbpasswd不会提示或检查旧口令,因此可以用其来为忘记口令的用户重新分配口令。对于熟悉UNIX的用户来说,smbpasswd的工作方法与使用passwd命令类似,关于这个命令的详细内容请参见其手册页。

9.2.4 启动Samba服务器

可以执行下面的命令来启动Samba服务器:

#   service smb start
当能看到下面的信息,就表示启动成功:
Starting  SMB  service        [确定]
Starting  NMB  service        [确定]

如果要暂停或重新启动Samba服务器,只要将上面命令中的start改为stop或restat。也可以让系统在每次开机时启动Samba服务器,执行ntsysv命令进入Service设置界面,选择SMB选项后单击“确定”按钮。

9.2.5 测试Samba配置文件

设置smb.conf文件之后,执行下面的命令测试smb.conf的设置语法是否正确:

#  testparm
Load smb config files from /etc/samba/smb.conf
Processing section "[homes]"
Processing section "[printers]"
Processing section "[tmp]"
Processing section "[public]"
Loaded services file OK.
Press enter to see a dump of your service definitions

上面信息表示smb.conf的设置语法正确,检查正常后一定要执行命令:

#   service smb  restart

重新启动Samba服务器。

9.2.6 在Windows环境中测试RHEL 5.0默认配置

1.通过Windows的网上邻居访问Samba共享

在Windows环境下,打开“网上邻居”窗口。双击Samba服务器后进行用户验证,输入Samba用户名和密码,如图9-2所示。

图9-2 输入Samba用户名和密码

其后可以看到Samba服务器为该用户提供的共享,默认情况下,只有登录用户的主目录共享和打印机共享。

2.通过映射网络驱动器访问Samba共享

我们知道,在Windows下可以将共享目录映射为网络驱动器,这样就可以把共享目录作为本地文件夹使用。右击共享资源,在弹出的快捷菜单中选择“映射网络驱动器”选项,如图9-3所示。

图9-3 “映射网络驱动器”选项

在弹出的“映射网络驱动器”对话框中设置驱动器,如图9-4所示。单击“完成”按钮,即可在资源管理器中通过驱动器访问共享资源,如图9-5所示。

图9-4 “映射网络驱动器”对话框

图9-5 通过映射的网络驱动器访问共享的网络资源

3.检查Samba服务器所共享的资源

用户可以在Linux下使用下面的命令检查服务器所共享的资源:

#smbclient -L localhost
added interface ip=192.168.0.11 bcast=192.168.1.255 nmask=255.255.255.0
Password:
Domain=[WORKGROUP] OS=[UNIX] Server=[3.0.10-1.4E]
      Sharename     Type     Comment
      ---------     ----     -------
      root director  Disk
      root          Disk
      IPC$          IPC      IPC Service (samba server)
      ADMIN$        Disk     IPC Service (samba server)
      Server              Comment
      ---------           -------
HOST                samba server
Workgroup           Master
---------           -------
WORKGROUP

4.查看Samba的资源使用情况

用户可以在Linux下使用下面的命令查看Samba服务器资源被使用的情况:

#smbstatus
Samba version 3.0.10-1.4E
PID    Username     Group        Machine
-------------------------------------------------------------------
 4231   adm          adm          x-41        (192.168.0.11)
Service     pid    machine      Connected at
-------------------------------------------------------
IPC$         4231   x-41         Sun Jul 16 01:13:142006
adm          4231   x-41         Sun Jul 16 01:16:522006
No locked files

9.3 配置Samba服务器共享文件及打印机

完成全局环境的设置之后,可以设置共享的资源(包括共享文件和打印机),本节介绍如何配置smb.conf以实现文件共享。

9.3.1 配置文件共享

以下通过配置3个不同的共享目录,介绍配置Samba文件共享的一般方法:

[global]
…………
#采用前面的[global]配置
[homes]
#用来配置用户访问自己的目录
  comment = Home Directories
  browseable = no
#用户私人目录,不给他人浏览(并不是不允许他人访问)
  writable = yes
#允许用户写入自己的目录
  valid users = %S
#可访问的用户局限于用户自己。%S会被自动转换为登录账号
  create mode = 0664
#文件的访问权限
  directory mode = 0775
#目录的访问权限
# This one is useful for people to share files
[tmp]
#这个部分为所有用户提供临时共享的方式
  comment = Temporary file space
  path = /tmp
#指定位置
read only = no
#可以读写
public = yes
#允许用户不用账号和密码访问
  [public]
#  这个部分为所有用户提供可以共同访问的目录,允许staff组用户写入。但其他用户只可访问,不能写入
  comment = Public Stuff
  path = /home/samba
  public = yes
writable = yes
printable = no
write list = @staff
# write list参数是用来设置具有写权限的用户列表,这里只允许staff组的成员有写权限
[x1sdir]
#这个部分用来设置某一用户x1的访问权限
comment = x1's Service
path = /usr/x1/private
valid users = x1
#只有x1可以访问(注意:即使security=share,也不代表用户登录Linux主机后可以访问任意资源)该共享目录
public = no
writable = yes
printable = no

说明:修改配置文件后,要重新使用testparm测试该文件,并重新启动Samba服务器。

9.3.2 配置共享打印机

1.在Linux Samba服务器上配置本地打印机

2.获得Adobe Postscript Driver

执行下列步骤。

(1)到http://www.adobe.com/网站下载简体中文版Adobe Postscript Driver,文件名为“Winstchs.exe”。

(2)在Windows环境(如Windows 2000 Professional)下安装。

(3)进入Windows计算机C:WINNTsystem32spooldrivers目录,从子目录w32x86和WIN40中选择表9-1所示的8个文件,并且将文件名字母全部改为大写。

表9-1 w32x86和WIN40子目录中的8个文件

(4)在Linux计算机上创建/usr/share/cups/目录,将表9-1所示的8个文件复制到其中。

3.设置smb.conf的打印共享配置

[global]
…………
#按上文将有关共享打印机的几个主要配置参数写到此处
[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
#共享打印机,writable必须设置为no
  printable = yes
#允许用户更改打印机队列中的文件
  [x1sprn]
#该共享的打印机只允许x1私人使用
  comment = X1's Printer
  valid users = x1
  path = /home/x1
#打印机队列是x1的用户目录,要注意x1必须有权访问该目录
  printer = x1s_printer
  #设置共享打印机的名称,此参数又可以写成“printer name=”,该参数如果放在[global]字段,所有打印服务
用到的打印机名都是一样的
  public = no
  writable = no
 printable = yes

4.为Windows客户机准备打印驱动

为了为Windows客户机准备打印驱动,可以运行cupsaddsmb命令。执行如下操作将打印机驱动程序放置在/etc/samba/drivers目录下。

(1)创建/etc/samba/drivers目录:

#mkdir /etc/samba/drivers

(2)运行cupsaddsmb命令,以root身份执行该命令,以共享所有打印机:

# cupsaddsmb  -a  -U  root

5.从Windows客户机访问Samba共享打印机

当配置Samba共享打印机之后,合法用户就可以在Windows的“网上邻居”窗口中看到被共享的打印机。双击共享的打印机,在弹出的窗口中确认安装此打印机驱动即可。

9.3.3 在Linux环境下应用Samba服务

在Linux平台上使用X-41dows计算机或Linux Samba服务器提供的共享资源,通常有两种方法,即使用smbclient命令和使用smbmount命令。

现在以使用X-41dows计算机提供的共享资源为例分别介绍这两种方法,在X-41dows中设置共享文件夹。X-41dows计算机的NetBIOS名为“x-41”,IP地址为“192.168.0.3”,共享文件夹的共享名为“share_dir”。Linux计算机名为“lin”且安装了SMB组件。

1.lmhosts文件

Linux系统中的/etc/hosts文件存放了TCP/IP主机名和IP地址的对应关系,即/etc/hosts是静态映射表。与之类似,Samaba使用/etc/samba/lmhosts文件存放NetBIOS名与IP地址的静态映射表。当Linux主机作为Samba客户访问X-41dows的共享或其他Linux提供的Samba共享时,既可以使用IP地址访问,又可以使用NetBIOS名访问。如果使用NetBIOS名访问共享,则需要在Samba客户上的/etc/samba/lmhosts文件中添加相应的记录。

2.使用smbclient命令

在Linux计算机中执行以下命令:

[root@lin  root] # smbclient  -L  x-41

或者:

[root@lin  root] # smbclient  -L  192.168.0.3

结果在Linux计算机上列表显示x-41提供的所有共享信息。

在Linux计算机中执行以下命令:

[root@lin  root] # smbclient  // x-41(或IP地址)/share_dir  -U  x1

其中x1是X-41dows计算机上的用户,系统提示输入x1的密码,输入正确后系统提示:

smb:> help
ls               dir              du               lcd              cd
pwd              get              mget             put              mput
rename           more             mask             del              rm
mkdir            md               rmdir            rd               prompt
recurse         tr解决方法late   lowercase       print           printmode
queue            cancel           quit             q                exit
newer            archive          tar              blocksize        tarmode
setmode          help             ?                !

此时可以如同使用FTP方法一样使用smbclient,如用dir、cd、get和put等命令来传输文件。Samba可以用于帮助备份X-41dows系统,除了使用smbclient之外,Samba还提供了一个shell脚本smbtar,它使用smbclient和tar直接将X-41dows系统中的文件备份到Linux系统中的磁带设备中。

3.使用smbmount命令

知道某台主机共享的资源后,执行smbmonut命令将远程共享挂载到本地:

[root@lin  root] # mkdir -p /mnt/smb/ x-41_share_dir

首先创建挂载点目录。

[root@lin  root] #smbmount  //x-41/share_dir  /mnt/smb/x-41_share_dir

将远程共享//x-41/share_dir//x-41/share_dir挂载到本地目录/mnt/smb/x-41_share_dir,这样即可如同访问本地目录一样操作此挂载的目录了。若要卸载已挂载的目录,则执行umount命令:

#umount   /mnt/smb/x-41_share_dir

9.4 其他配置Samba的方法和使用Linux中的网络邻居

9.4.1 图形化配置工具system-config-samba

Samba服务器配置工具提供管理Samba共享、用户,以及基本服务器设置的图形化界面,它修改/etc/samba/目录中的配置文件。要使用该程序,必须运行X窗口系统,具备根权限并且安装了system-config-samba RPM软件包。要从桌面启动Samba服务器配置工具,单击面板中的“主菜单”→“系统设置”→“服务器设置”→“Samba”选项,或在shell提示符(如XTerm或GNOME终端)下键入system-config-samba命令,显示的界面如图9-6所示。

图9-6 图形化配置工具的工作界面

说明:Samba服务器配置工具不显示允许用户在Samba服务器上查看自己主目录中的共享打印机或默认实例。

1.配置服务器

配置Samba服务器的第一步是配置服务器的基本设置和几个安全选项,启动应用程序后选择“首选项”→“服务器设置”选项,显示“服务器设置”对话框,如图9-7所示。

图9-7 “服务器设置”对话框

在“基本”选项卡中指定计算机应在的工作组及对计算机的简短描述,它们与smb.conf中的workgroup和server string选项相对应。

2.设置安全服务器

“安全性”选项卡如图9-8所示。

图9-8 “安全性”选项卡

其中包含以下选项。

(1)“验证模式”下拉列表框:和security选项相对应,其中的选项如下。

● ADS:Samba服务器充当活跃目录域(ADS)领域中的一个成员,Kerberos在服务器上必须安装和配置,并且Samba必须使用net工具才能成为ADS领域的一员。net是samba-client软件包的一部分,请参阅samba-client的说明书页。该选项不会把Samba配置成一个ADS控制器。

● 域:Samba服务器依赖于Windows NT主或备份域控制器来校验用户,服务器把用户名和口令传递给控制器,然后等待它们被返回。在验证服务器字段中指定主或备份域控制器的NetBIOS名称。如果加密口令选项被选,它必须设置为“是”。

● 服务器:Samba服务器试图通过把用户名和口令组合传递给另一个Samba服务器来校验它们。如果无法校验,服务器会试图使用用户验证模式来校验。在验证服务器字段中指定另一个Samba服务器的NetBIOS名称。

● 共享:Samba用户不必为每个Samba服务器输入用户名和口令组合,只有在试图连接Samba服务器上的指定共享时才会被提示输入用户名和口令。

● 用户:(默认)Samba用户必须为每台Samba服务器提供一个有效的用户名和口令。如果想让Windows用户名选项生效,选择这个选项。

(2)“加密口令”下拉列表框:如果用户从Windows 98、带有服务包3的Windows NT 4.0或其他最近版本的Microsoft Windows中连接,必须选择该选项。口令在服务器和客户间使用加密格式而非可被截取的纯文本格式传输,它和encrypted passwords选项相对应,请参阅关于加密Samba口令的说明书页。

(3)“来宾账号”下拉列表框:当用户或来宾用户要登录Samba服务器时,他们必须被映射到服务器上的有效用户,选择系统上的现存用户名之一作为来宾Samba账号。当用户使用来宾账号登录Samba服务器时,拥有和这个用户相同的特权。该选项和guest account选项相对应。单击“确定”按钮后,所做改变会被写入配置文件,守护进程会被重新启动,这样改变会立即生效。

3.管理Samba用户

Samba服务器配置工具要求在添加Samba用户之前,在充当Samba服务器的系统中必须存在一个活跃的用户账号。Samba用户和这个现存的用户账号相关联。添加Samba用户的对话框如图9-9所示。

图9-9 添加Samba用户的对话框

要添加Samba用户,选择“首选项”→“Samba用户”选项。然后单击“添加用户”按钮,在创建新Samba用户窗口中的本地系统中的现存用户列表中选择UNIX用户名。如果用户在Windows机器上有一个不同的用户名,并将从Windows机器上登录Samba服务器,则在Windows用户名字段中指定Windows用户名,“服务器设置”对话框的“安全”选项卡的验证模式必须被设置为用户才能生效。还需要为Samba用户配置一个Samba口令,并再键入一次来确认这个口令。即便选择了为Samba使用加密口令,仍建议为所有用户设置一个不同于其系统口令的Samba口令。要编辑某个现存用户,从列表中选择它,然后单击“编辑用户”按钮。要删除某个现存的Samba用户,选择这个用户,然后单击“删除用户”按钮,删除Samba用户不会删除相关的用户账号。单击“确定”按钮,设置立即生效。

4.添加共享

要添加共享,单击“添加”按钮,在“基本”选项卡中配置以下选项。

(1)目录:通过Samba共享的目录,这个目录必须存在。

(2)描述:对共享的简短描述。

(3)基本权限:用户应该只能够读取,还是读写共享目录中的文件。

在“访问活”选项卡中选择是否只允许指定的用户来访问共享还是允许所有Samba用户来访问共享。如果选择了允许指定用户访问,从可用的Samba用户列表中选择这些用户。单击“确定”按钮,立即添加共享。添加共享界面如图9-10所示。

图9-10 添加共享界面

9.4.2 使用SWAT管理工具管理Samba

从2.0版本开始,Samba就提供了图形的管理配置工具SWAT(Samba Web Administration Tool),SWAT它是配置及管理Samba的图形化工具程序,通过xinetd超级应用程序守护进程来启动的。通过SWAT,用户可以配置并修改Samba的配置文件,并监控服务器的运行:

# rpm -ivh samba-swat-3.0.10-1.4E.2.i386.rpm
#vi /etc/xinetd.d/swat加入以下代码:
service swat
{
        port              = 901
        socket_type       = stream
        wait              = no
        only_from         = 127.0.0.1192.168.0.1
        user              = root
        server            = /usr/sbin/swat
        log_on_failure   += USERID
        disable           = no
}
#service xinetd restart
#chkconfig swat on

在完成这些工作后,在浏览器中输入网址http://localhost:901http://1.2.3.4:901,用户要把1.2.3.4换成自己的IP地址或主机名。在出现的登录窗口中输入root和root的口令,即可使用SWAT。在登录后,可以使用SWAT来建立Samba的配置文件/etc/smb.conf。SWAT管理工具的工作界面如图9-11所示。

图9-11 SWAT管理工具的工作界面

在该界面中的图标如下。

(1)HOME:单击该图标,返回到SWAT主页,其中包括所有SWAT帮助文档。

(2)GLOBALS:管理这个Samba服务器的Samba[global]节,单击该图标,SWAT返回一个Web页面,在其中可以修改许多相关的Samba全局参数。

(3)SHARES:管理这个Samba服务器的文件共享,单击该图标,SWAT返回一个Web页面,在其中可以创建新共享和修改现存共享。

(4)PRINTERS:管理这个Samba服务器的打印机共享,单击该图标,SWAT返回一个Web页面,在其中可以创建新打印机或者修改现有打印机。

(5)STATUS:得到这个服务器上的Samba的状态信息,单击该图标,SWAT返回一个Web页面。它提供关于Samba的状态信息,并且允许可以停止和重新启动Samba守护进程,并且断开当前用户。SWAT返回的Web状态页面也提供了一种方法,可以连续不断地进行刷新。只需规定刷新周期,然后单击AutoRefresh。

(6)VIEW:查看当前的smb.conf文件,单击该图标,SWAT返回一个Web页面。其中显示整个smb.conf文件,以及出现在smb.conf文件中的Samba配置。如果需要一个包括Samba保留的所有参数值的列表,只需单击FullView按钮。

(7)PASSWORD:管理Samba服务器或者远程设备上的口令,单击该图标,SWAT返回一个页面。在其中可以修改SWAT正在运行的Samba服务器上的口令,或者修改网络上其他地方的另一个CIFS/SMB服务器的口令,也可以增加、关闭或者启用用户。SWAT只能修改smbpasswd文件,而不是一般的Linux口令文件。

在任何时候都可以通过单击HOME图标而回到SWAT主页,SWAT可以工作在Samba可以运行的操作系统之上,而其他配置工具会受到较多的限制。

一个常见的问题是当试着使用SWAT时,总是得到这样的消息:“没有响应。服务器可能停机或者没有响应……”。

SWAT通常存在于端口901,所以应该使用的URL是 http://your.server.dom:901/,在这里your.server.dom必须用Samba服务器的DNS名称或者IP替换。如果仍然有问题,检查/etc/serviecs文件,查看其是否列出SWAT,以及在/etc/xinetd.d/中是否有SWAT的条目。另外查看Linux防火墙是否关闭901端口。

9.4.3 其他工具

1.Webmin

另外用户可以使用对各种服务配置均适用的Webmin工具配置Samba,这是一个用Perl编写的基于浏览器的管理应用程序。Webmin是可扩展的并支持中文,除了用于Linux之外,还可以用于其他类UNIX操作系统。安装完成后,可以在本地或者远程浏览器通过一个特定的端口,通常是10000来进入Webmin。它具有可以指向和单击的界面,可以完成各种Linux管理任务,包括用户管理、Samba配置和网络设备的配置;其缺点是不会创建带有连字号(-)的文件共享,而且不使用包含include参数的smb.conf文件。

2.Smbconftool

Smbconftool是一个Java应用程序,用其可以以图形方式编辑smb.conf文件。尽管可以运行在任何支持Java的设备上,但因为使用文件IO来访问smb.conf文件,所以它必须运行在smb.conf文件所驻留的系统上。可以在http://www.eatonweb.con/Samba/中找到关于这个工具的更多信息。

3.smb-mode.el

这个工具是FraserMcCrossan编写的Emacs主模式,可帮助管理人员编辑smb.conf文件。

下载和配置smb-mode.el之后,将得到如下功能。

(1)smb.conf文件的自动缩进。

(2)编辑smb.conf文件的整个节。

(3)一个新模式,即大纲-次要模式可以提供整个smb.conf文件的轮廓。

(4)在smb.conf操作页面中查询参数。

(5)参数完成。

为用编辑程序宏指令来使用smb-mode.el,可以在http://users.gtn.net/fraserm/smbmode.html下载它,这个页面也可以指导如何安装smb-mode.el。

9.4.4 使用Linux下的网络邻居

相比较而言,在Windows中配置和使用网络要简单一些。一台使用Windows的机器一旦在局域网中安装并设置后,在局域网内部使用网上邻居和其他计算机的共享目录、文件及打印机等就变得非常简单。在Linux中,资源的共享和访问相对Windows要复杂一些。而在同时包含Linux机器和Windows机器的局域网环境中(很多企业在未来很长一段时间里将维持这样一种状况),问题更是复杂得多。虽然使用Samba可以实现网上邻居的所有功能,但是对于一个计算机新手或者那些正准备从Windows转向Linux的用户而言,其配置还是过于困难。下面介绍如何在Linux中使用网络邻居。

1.GNOME下的网络邻居

使用smbclient命令,可以很方便地对Windows主机共享目录进行查询和其他操作。但是由于用户已经习惯了Windows图形界面,使用命令总感觉不太方便。在Red Hat中,也可以使用图形界面操作Windows共享目录。Nautilus是GNOME环境中的shell(相当于Windows下的Explorer),它既是Red Hat的文件管理器,又可以充任浏览器,还可以播放多媒体文件及浏览图片等。要打开Nautilus窗口,只需双击GNOME桌面上的主目录图标即可。要查询Windows工作组中的主机,可以在Nautilus窗口的地址栏(Location)中输入“smb://工作组名称”,然后按回车键即可。由于Nautilus本身就是Red Hat的文件管理器,所以可以任意在Windows共享目录中复制文件、删除文件和创建目录等。不过Nautilus还有不少缺点,例如,对中文支持不是很好、不能正确显示中文的文件名、不支持直接挂载Windows共享目录,并且在KDE环境下不能使用等。

2.使用LinNeighborhood网络邻居

LinNeighborhood是一个非常易于使用且源码开放的第三方网络工具,作者是H解决方法Schmid和Richard Stemmer。通过该工具,可以使Linux计算机轻松地查看局域网内的Windows共享资源,也可以查看和访问局域网内其他Linux计算机上的共享资源。简言之,LinNeighborhood是一个带有图形界面的Samba。

可以在Internet上查找其RPM软件包,当LinNeighborhood启动时,LinNeighborhood的可执行文件位于/usr/bin目录下。它显示本地Linux机器的域名和在局域网上发现的各工作组名(如图9-12所示)。其中X-41是一台运行Windows 2000专业版的机器,doc是该机器上共享的一个目录,host.vao.net是本地Linux计算机。

图9-12 本地Linux机器的域名和在局域网上发现的各工作组名

首先在桌面上创建一个名为“1”的目录,然后挂载X-41机器上的doc目录,其中存放的是要使用的文档。双击doc文件夹,弹出一个挂载对话框,如图9-13所示。“Mount Dialog”文本框显示远程计算机上共享目录的路径,对此无须改变。“Mount Point”文本框显示想要挂载共享目录至本地机器上的目录。在默认情况下,这个目录是/mnt。如果想让所有远程共享的资源都出现在前面创建的“目录”文件夹中,并且要出现在与相应主机对应的目录之下,需要把“/mnt”改为“/root/desktop/1/”。

图9-13 挂载对话框

挂载完成后,LinNeighborhood窗口中就会在doc的后面和整个窗口的底部显示相关的挂载点信息(如图9-14所示)。

图9-14 挂载完成的doc目录

这时就可以看到挂载的远程目录出现在“1”窗口中,打开桌面上的1文件夹。如果一切正常的话,可看到远程的内容位于“/root/desktop/1/”之下,这时就可以访问共享文件夹中的内容。如果对方也同时在使用这些文件,那么就要求必须有读写的权限。要在“1”窗口中添加更多的远程共享文件夹,只需要重复上述过程。

为了能够访问远程计算机上的共享资源,需要有一个远程计算机的账号。如果这是一台Linux机器,那么它必须运行有Samba,并且管理员必须把你添加为一个用户。为此,只需运行命令“smbpasswd-a你的用户名”即可。这样当每次加载一个远程计算机时,LinNeighborhood就会弹出一个窗口要求登录。这时,输入账号就可以访问远程计算机的共享资源。如果远程计算机是一台Windows 2000的机器(如前所述),则该机器的系统管理员可以通过以下步骤来添加一个用户。单击“开始”→“设置”→“控制面板”→“用户名和密码”→“增加”选项,然后按照提示完成整个过程。这样,每次Linux机器加载这个Windows机器时也会弹出一个对话框,要求输入用户名和密码。登录完成后,就可以使用远程计算机的共享资源。

3.使用xfsamba网络邻居

在KDE下要实现网络邻居,可以采用第三方的工具软件xfsamba。它的RPM版本可以在http://linux.imp.mx/xfsamba/archive/下载得到。这里要注意的是,xfsamba是以Samba为基础的,所以必须事先安装Samba软件包。安装后在终端窗口中输入xfsamba命令,按回车键即可打开该程序窗口。

作为一款第三方的工具软件,xfsamba的功能非常强大。不但可以对Windows共享资源进行查看、复制、粘贴及删除等操作,而且还可以直接将Windows共享目录映射为本地目录。更重要的是,和LinNeighborhood相比,0.47版本的xfsamba完全是中文界面。

(1)挂载共享目录。

xfsamba可以很方便地把共享目录挂载到本地文件系统,为此选中Windows主机上的某个共享目录,然后单击“工具”→“Mount remote share”选项,即可打开一个对话框。xfsamba会自动将远程共享挂载到/tmp/xfsamba/RemoteShareName目录下,其中的RemoteShareName代表Windows共享目录的名称,如图9-15所示。

图9-15 挂载共享目录

(2)文件拖放。

利用xfsamba可以很方便地在共享目录和本地目录之间实现文件拖放,不过此处最好使用xfsamba自带的本地文件浏览器xftree。单击xfsamba工具栏中的“xftree”按钮,即可打开本地文件浏览器,如图9-16所示。

图9-16 xfsamba自带的本地文件浏览器

作为一款第三方的工具软件,xfsamba的功能非常强大。不但可以对Windows共享资源进行查看、复制、粘贴及删除等操作,而且还可以直接将Windows共享目录映射为本地目录。更重要的是,和LinNeighborhood相比,0.47版本的xfsamba完全是中文界面。Linux中有很多种方法可以实现与远程计算机的文件、打印等资源的共享。本章介绍的是一种更适合于初学者的方法,特别是那些刚从Windows转为使用Linux的用户。需要说明的是,它适合对于安全性能要求不高的家庭和SOHO用户。

9.5 Samba服务器面临的安全隐患

Samba服务器面临的安全隐患主要包括非法访问数据和计算机病毒。

9.5.1 非法访问数据

通常访问Samba服务器中的数据需要进行安全验证,因为在网络中用明文传送口令和数据。别有用心的人非常容易截获这些口令和数据,截获这些口令的方式主要为暴力破解。另外,使用嗅探器(sniffer)程序监视网络封包捕捉Samba开始的会话信息,便可顺手截获验证密码。这样一些别有用心的人会查看到不属于自己的信息,从而造成了很大的安全隐患。

9.5.2 计算机病毒

总体来说,计算机病毒对Linux系统存在较小的危险。但是由于各种原因,在企业应用中往往是Linux和Windows操作系统共存形成的异构网络。所以Linux的防范病毒策略分成两个部分,即针对Linux本身(服务器和使用其作为桌面的计算机)和使用Linux服务器后端的Windows系统的病毒防范策略。本书主要介绍后者。现在许多Windows病毒,会自动搜索具有写权限的文件服务器,并且会自动将病毒写入文件服务器。由于许多Windwos客户端往往共同使用一个Samba服务器,所以一个Windows用户不慎打开病毒文件,很容易造成网络瘫痪。

9.5.3 Samba文件服务器的安全级别

和前面介绍过的其他服务器(DNS、FTP及Web)不同,Samba文件服务器只能用于局域网中,所以其安全设置也和其他服务器有许多不同之处。该服务器可以使用4种不同的安全级别,这些安全级别将影响客户端/服务器的验证过程。当Samba客户端启动一个和Samba服务器的连接,Samba服务器会通知客户端当前操作的安全级别,客户端必须遵守该安全级别。4种安全级别是共享(share)、用户(user)、服务器(server)和域(domain),通过security参数在/etc/samba/smb.conf文件中的global部分设置。当security参数设置为user时,Samba服务器执行用户级别的安全操作,由提供服务的Samba服务器负责检查账户及密码(是Samba默认的安全等级)。

smb.conf文件中常用的安全全局参数如下。

(1)socket address:指定Samba监听的IP地址,例如,socket address = 192.168.1.200。

(2)admin user:设置管理员账号,例如,admin user = cjh。

(3)security:定义Samba的安全级别,例如,security = User。

(4)encrypt passwords:用于指定是否使用加密口令,例如,encrypt passwords = yes。

(5)smb passwd file:指定Samba口令文件的路径,例如,smb passwd file = /etc/samba/smbpasswd。

(6)map to guest:设置guset身份登录时用户名及密码不正确时的处理方式,例如,map to guest =Never。

(7)username map:指定SMB名字和UNIX名字映射文件的路径,例如,username map = /etc/samba/smbusers。

(8)hosts allow:指定可以访问Samba的主机,例如,hosts allow =192.168.1.2。

(9)hosts deny:指定不可以访问Samba的主机,例如,hosts deny =192.168.2.2。

1.共享级别安全机制

当security参数设置为share时,Samba服务器执行共享级别的安全操作,用户不需要账户及密码即可登录Samba服务器。

2.用户级别安全机制

当security参数设置为user时,Samba服务器执行用户级别的安全操作,由提供服务的Samba服务器负责检查账户及密码。

3.服务器级别安全机制

当security参数设置为server时,Samba服务器执行服务器级别安全机制的安全操作。检查账户及密码的工作指定由另一台Windows NT/2000或Samba服务器负责。

4.域级别安全机制

当security参数设置为Domain时,Samba服务器执行域级别安全机制的安全操作,指定Windows NT/2000域控制服务器来验证用户的账户及密码。域级别安全机制和服务器级别安全机制的不同之处如下。

(1)Samba服务器不维持和密码服务器的专用连接,只要在需要时才连接到远程的验证服务器,平时断开连接。这对密码服务器是好的,因为Windows2000/NT根据用户连接数量来决定发放访问许可。

(2)Samba服务器可以利用Windows2000/NT的诸如信任域特征的域约束性能。

9.6 提升Samba服务器的安全性

9.6.1 不要使用明语密码

默认情况下Samba文件服务器为客户端使用明语密码,这样虽然方便,但是不安全。如果希望提高安全性,可以修改配置文件/etc/samba/smb.conf,删除以下两行前的“;”:

; encrypt passwords = yes
; smb passwd file = /etc/samba/smbpasswd

这样Samba服务器将使用解译密码,当security参数设置为user时,通过/etc/samba/smbpasswd文件验证用户。这样在验证过程中真实的密码没有在网络中传输,所以验证过程很安全。

9.6.2 尽量不使用共享级别安全

Samba提供的共享级别安全机制其原理为共享权限只分配一个密码,而不是针对具有用户名和相应密码的合法用户。对于比较小的网络,共享级别安全性普遍引起人们的注意。但其安全性比较差,因为网络中每一个人都共同使用一个密码。不仅每个人都很容易查找到密码,而且更改这一密码相当困难。

9.6.3 尽量不要浏览器服务访问

另一种保证系统安全的方法是不要让不相关的用户知道这一系统的存在,通过阻止用户浏览这一系统的方式,将可大大减少系统成为被攻击对象的可能。这一过程非常容易实现,即只需关闭共享浏览功能即可。

9.6.4 通过网络接口控制Samba访问

如果Samba服务器安装了两块网卡,可以限制Samba响应请求的地址。例如,在局域网和公共网络中各安装了一块网络卡。因为在网络地址转换时需要使用服务器,此时可以规定Samba只响应来自局域网络的请求。通过设置全局属性参数bind interfaces为yes来实现这一功能,这将告诉Samba只响应来自你指定接口的请求,在配置文件/etc/ samba/smb.conf添加如下内容:

interfaces = 192.168.2.10/24127.0.0.1
bind interfaces only = yes

第1个参数设定Samba服务器监听的网络接口列表,第2个参数指示服务器只监听在intrefaces参数中列出的接口。

9.6.5 通过主机名称和IP地址列表控制Samba访问

使用hosts allow列表属性控制Samba访问,允许指定可以访问的主机和IP地址,IP地址列表可以是子网掩码。在配置文件/etc/samba/smb.conf中添加如下内容:

hosts deny = ALL
hosts allow = 192.168.1.0/24127.0.0.1

第1个参数拒绝所有访问,第2个参数指示服务器只接受网络192.168.1.0中的主机和本地主机访问。也可以使用主机名称代替IP地址:

hosts deny = ALL
hosts allow = caoj caow caoc caod

这两个参数表示接受主机名称是caoj caow caoc caod的客户机的访问,其他一律拒绝。

或者使用白名单模式,把所有可以访问的用户和组列出:

valid users = mary, jim, bill, sarah, @marketing @sales

这样用户mary、jim、bill、sarah,以及属于marketing和sales组的用户可以访问,其他一律拒绝。

9.6.6 使用pam_smb验证Windows NT/2000服务器的用户

把Linux用户验证转移到Windows NT/2000服务器上可以简化操作,具有pam_smb功能的Samba服务器可以通过Windows NT/2000服务器(或作为PDC的Samba服务器)验证试图通过SSH或Telnet登录的Linux用户,Samba也可以加入嵌入式认证模块。有关PAM和PAM-aware相关知识和配置请查看相关资料。在网站http://rpmfind.net/linux/rpm2html/ search.php?query=pam_smb根据CPU类型和Linux发行版本下载合适的RPM包,安装配置pam_smb的步骤如下。

(1)下载软件:

#Wgetftp://rpmfind.net/linux/fedora/core/development/i386/Fedora/RPMS/pam_smb-1.1.7-6.i386.rpm

(2)安装配置:

#rpm -ivh pam_smb-1.1.7-6.i386.rpm
# cp pam_smb_auth.so /lib/security

(3)修改/etc/pam.d/system-auth配置文件:

auth      required   /lib/security/pam_securetty.so
auth      required   /lib/security/pam_smb_auth.so
auth      required   /lib/security/pam_nologin.so
account   required  /lib/security/pam_pwdb.so
password   required  /lib/security/pam_cracklib.so
password   required  /lib/security/pam_pwdb.so shadow nullok use_authtok
session   required  /lib/security/pam_pwdb.so

(4)手工建立/etc/pam_smb.conf:

SKINET       #用于验证的登录名称#
PDCSRV       #主域控制器名#
BDCSRV      #从域控制器名#

(5)启动守护进程:

#/usr/local/sbin/pamsmbd

这样Linux系统就可以通过文件/etc/pam_smb.conf指定的Windows NT/2000域控制器进行用户验证,验证过程使用SKINET域中的PDCSRV主机。一旦PDCSRV主机系统崩溃,则由BDCSRV主机接替。

9.6.7 为Samba配置防范病毒软件

可以在Samba服务器上使用ClamAV(Clam AntiVirus,http://www.clamwin.com/)防范病毒,它与Liunx一样强调公开程序代码及免费授权等观念。ClamAV目前可以侦测超过40000种病毒、蠕虫和木马程序,随时更新数据库。它有一组分布在世界各地的病毒专家,24小时更新及维护病毒数据库。任何人发现可疑病毒也可以随时与其取得联系,立刻更新病毒码。在极短的时间内,网络上采用ClamAV的邮件服务器就完成最新的防护动作。在网站http://sourceforge.net/projects/openantivirus/上首先下载3个软件的最新版本:

#wget -o  http://puzzle.dl.sourceforge.net/sourceforge/openantivirus/samba-vscan-0.3.6b.tar.bz2
#wget -o  http://puzzle.dl.sourceforge.net/sourceforge/clamav/clamav-0.86.2.tar.gz
#wget -o  http://us2.samba.org/samba/ftp/samba-3.0.20.tar.gz

以下是安装的过程,这里是用源代码安装的samba-3.0.20、samba-vscan-0.3.6-beta1和clamav-0.86.2:

#tar -zxf samba-3.0.20.tar.gz
#cd samba-3.0.20/source/
#./configure ....... --enable-vfs
# make proto;# make;# make install
# cd ..

建立clamav用户和clamav组:

#useradd clamav -s /dev/null

安装Clamav:

#tar -zxvf clamav-0.86.2.tar.gz
#cd clamav-0.86.2;./configure -prefix=/usr/local/clamav
#make;make clean;make install
# freshclam

让Clamav随系统一起启动:

#chkconfig --level 35 clamd on
#chkconfig --level 35 freshclam on         # 定时更新病毒库 #

另外,对clamav.conf文件的example行注释,并安装Samba-vscan:

#tar -zxvf samba-vscan-0.3.6-beta1.tar.gz

移动samba-vscan-0.3.6-beta1到Samba源代码的example/VFS/目录中:

#tmv samba-vscan-0.3.6-beta1 /path/to/samba-source/example/VFS/
#cd samba-vscan-0.3.6-beta1
#./configure \
  --prefix=/usr/local/samba-vscran \
  --with-samba-version=../../../source/include/version.h
#cp vscran-clamav.so /path/to/samba/lib/vfs
#cp clamav/vscran-clamav.conf /path/to/samba/lib

在/etc/samba/vscran-clamav.conf添加如下内容:

send warning message = yes  #当找到感染的文件发出“告警popup信息”给windows #
infected file action = quarantine #处理被感染的文件#
quarantine prefix = vir-   #被移出隔离区的文件加上前缀#
clamd socket name = /usr/local/clamav/var/run/clamav.sock #clamd socket的位置#

启动clamd后修改smb.conf文件,将要共享的目录写入vfs object = can-clamav即可。如果要在public中实时扫描计算机病毒,则设置如下:

[public]
    comment = virus-protected /public directory
    path = /public
    vfs object = vscan-clamav
    vscan-clamav: config-file = /path/to/vscan-clamav.conf
    writeable = yes
        browseable = no

完成后重新启动Samba服务器,至此建立了一台具备防范病毒的Samba服务器。

9.6.8 使用Iptables防火墙保护Samba

Samab和SMB协议针对私有网络,如果Samba服务器安装了两块网卡,分别连接内部网络和Internet。可以使用Iptables防火墙设置阻塞Samba连接Internet所必需的端口,从而有效地限制防火墙以外的其他机器访问Samba。Iptables要封锁以下端口,即NetBIOS名字解析的端口138和139、smbd守护进程监听139 TCP端口,以及nmbd守护进程监听137和138UDP端口。如果想使用防火墙来堵塞Samba通道,可以封锁以上端口。这样可以有效地阻止其他计算机访问Samba服务器,甚至是网络中任何Windows客户机的访问(关闭445端口)。

9.6.9 使用Gsambad管理监控Samba服务器

Gsambad是一个GNOME和KDE桌面环境下的Samba管理工具,基本上能实现命令行模式下的所有功能。

Gsambad是一套在GTK+图形界面下开发的帮助管理员在GNOME环境下进行Samba设置工作的Samba前端程序。管理员可以用其管理Samba账号、实时监控文件传输,还可以直接查看系统登入成功及失败的次数提前了解是否有人正在对系统进行攻击。当然也可以启动或停止Samba服务器的服务,或直接修改设定文件,或决定系统重新启动的时间。几乎所有与Samba相关的功能都能使用Gsambad直接实现。

1.下载安装

#Wget http://mange.dynalias.org/linux/gsambad/old/gsambad-0.0.8.tar.gz

2.系统要求

中央处理器为兼容Intel X86处理器,PentiumII 400以上,64 MB(推荐128 MB)内存,150 MB以上硬盘空间,显示内存4 MB。内核版本基于2.4或以上,GNOME 1.2以上,桌面分辨率至少为640 ×480,桌面颜色至少65000色(16位元)。

3.安装前的准备工作

安装过程中需要编译,因此需要GCC(2.96以上)、Qt(2.0以上)及GTK+2.0支持,所以要使用RPM来确认:

rpm -qa | grep gcc;rpm -qa | grep qt;rpm -qa | grep gtk

4.命令行下安装软件

gunzip  gsambad-0.0.8.tar.gz
tar vxf gsambad-0.0.8.tar
cd gsambad-0.0.8
./configure;make;make install

5.运行软件

执行一个终端命令“/usr/sbin/gsambad”,打开Gsambad主工作界面,如图9-17所示。

图9-17 Gsambad主工作界面

在其中可以设置Samba服务器IP地址,并且查看Samba安全设置等所有配置选项。用户(User)设置界面如图9-18所示。

图9-18 用户设置界面

在其中可以看到Samba的登录用户情况,并且设置用户登录密码、登录目录,以及添加删除用户等。在如图9-19所示的共享(Share resources)设置界面中可以设置所有共享资源。

图9-19 共享设置界面

在“Security”设置界面中显示所有连接日志,有助于管理员了解安全状况。配置(Configuration)界面中显示整个smb.conf文件,列出出现在该文件中的Samba配置。并且可以修改。修改完成后单击“保存”按钮,然后单击“Reread”按钮读取配置文件/et/samba/smb.conf,重新启动Samba服务器。

说明:本节只是介绍一个工具,如果你希望成为一名合格UNIX/Linux的网络管理员,应该从需求方案出发,以客户的需求为导向配置需要的服务器,这样还能大大减少工作量。Gsamba是一个好的配置工具,但并不是说可以忽略对Samba本身的了解。

9.7 Samba服务器故障排除

9.7.1 Samba故障排除思路

Samba的故障排除可以在SMB服务器和SMB客户端上通过各自的命令来完成。

1.SMB服务器上的操作

(1)使用下面的命令来查看是否有错误的配置:

/usr/bin/testparm /etc/smb.conf

(2)在服务器及客户端上用ping命令检查tcp/ip是否正常工作:

(3)在SMB服务器上用命令:

/usr/bin/smbclient -L SMBserver

将得到一个共享的列表。

如果出现失败信息,则要检查与服务器相关的“hosts allow”、“hosts deny”、“valid users”及“invlid users”等参数的设置。如果出现“connection refused”,则检查Samba服务器进程是否启动。如果Samba以守护进程形式运行,用“netstat -a”命令检查端口是否处于监听状态。

(4)运行命令“/usr/bin/nmblookup SMBserver”,将返回SMB服务器的IP地址;否则nmbd没有正确运行。

(5)运行“/usr/bin/nmblookup -d 2 '*'”命令,在子网中运行NetBIOS/TCPIP的主机将会响应;否则说明nmblookup不能正确得到广播地址,可以尝试在smb.conf文件中用interfaces参数人工设置IP地址、广播地址和子网掩码。

(6)运行“/usr/bin/smbclient'\\SMBserver\homes”命令,需要输入客户在SMB服务器上的用户口令,然后会出现类似“smb>”的提示符。这时可以使用dir命令浏览客户在SMB服务器账户目录下的文件,用help命令可以得到其他命令的帮助。如果未出现类似“smb>”的提示符,并且有“invalid network name”的错误信息,则有可能homes没有正确地设置共享。或者有“Bad password”,则要设置检查“shadow password”、“password encryption”以及参数“valid users”和“path”。

2.SMB客户机上的操作

(1)运行“net view \\SMBserver”命令,列出SMB服务器上的共享。

如果出现类似“network name not found”的错误,则要检查客户机上DNS或WINS的设置;如果出现“Invalid network name”或“bad password error”的错误,则参照与上面“smbclient-L”命令中同样的错误结果的解决方法。要注意客户端将要用客户注册时所用的用户名/口令与SMB服务器连接,所以在SMB服务器上,用户最好有同样的用户名/口令。

(2)使用“net use x;\\SMBserver\homes”命令,可以把SMB服务器上客户home目录映射到客户机的x:盘,x:应该是一个客户端上未用的盘号。这样共享的目录可以在客户端上以x:盘来看待,正常的信息为“command complete successfully”。如果要停止使用x:盘,可以使用“net use x:/delete”命令。如果不能正常的把客户的home目录映射到x:盘,则要检查SMB服务器上“hosts allow”等参数的配置;如果客户端上的用户名不能与服务器上的用户名匹配,尝试使用“username map”选项。

(3)如果在SMB服务器上没有使用“encrypted passwords”,则在客户端上要在注册表中允许使?quot;普通文本”格式的口令。

9.7.2 Samba常见故障排除

Samba常见故障及其排除方法如下。

(1)中文显示为乱码。

在[global]段添加“unix charset = cp936 display charset = cp936 dos charset = cp936”。

(2)不能在共享目录执行写操作。

确认对该目录有写权限,在smb.conf的该目录中没有read only = yes这样的设置。

(3)在使用smbclient时不能浏览共享目录。

查看smb.conf中该目录的配置段,添加“browseable = yes”一行,并确认在该共享目录的配置段browseable不是NO。

(4)不能访问smb主机或smb主机不能被其他子机访问。

查看系统防火墙是否拦截了smb服务,以及访问者的IP或主机名,并查看smb.conf中是否有hosts deny这样的设置拦截了某些访问者。

(5)Linux主机上已经有账号,但是使用Linux的使用者账号登录到Samba的服务时,一直出现密码不正确的问题。

确定有使用Webmin将UNIX的使用者账号转换到Samba的账号,而且注意账号转换时选择的是用Linux使用者的密码作为Samba使用者的密码。或者密码没有设定,或者该账号的密码还没有启动。

(6)Samba的日志文件放在哪里?

Samba的日志文件放在/var/log/samba目录中,可以查看Samba启动时是否正常,甚至可以启动更详细的纪录以便于除错之用。

(7)如何确定Samba的设定档smb.conf是正确的?

执行testparm来检验。

(8)Samba可否设定允许某几部主机才可以使用Samba主机的服务?

除了RedHat Linux主机系统的/etc/hosts.allow及/etc/hosts.deny可以设定所有的网络可允许或不允许某几台主机或网络联机到本服务器外,smb.conf文件中也可以用hosts allow或是hosts deny的参数来设定。可以用Webmin或是手动来修改smb.conf文件,然后用testparm检验。

(9)Samba有哪些常见的除错工具?

Samba本身有非常完整的除错工具,例如在nmbd选项中可以用-d的选项来设定除错的层级。

Smbd、nmbd和smb.conf的在线手册有除错层级的详细信息,这些除错的层级可以由1(默认值)到10(100是密码的除错选项)。

另外一种除错的方式可以在Samba的编译时使用gcc -g:

$ testparm | more
$ smbclient -L //{netbios name of server}

(10)如何从Samba的邮件清单(mailing lists)得到帮助?

进入Samba的主网站http://samba.org后选择最近的映射网站,选择Support后进入Samba related mailing lists,即Samba的邮件清单。另外有关Samba TNG的问题可以访问http://www.samba-tng.org/网站浏览。如果要查看在上述的邮件清单中的问题,必须遵守其规定,此部分请参考上述的网站数据。要将已登录的使用者从Samba邮件清单中移除时,可以进入http://lists.samba.org网站。然后依照指示,输入自己的邮件信箱后更改和移除。

9.8 本章小结

目前,许多用户因业务发展不断更新或升级网络,从而造成用户环境差异较大,整个网络系统平台参差不齐。在服务器端大多使用Linux和UNIX,桌面端使用Windows。Linux操作系统可以异构在网络环境中的一个经典应用是作为打印及文件服务器,这是通过开放源代码的产品Samba而实现的。本章首先进行Samba的简介,接着介绍安装配置Samba服务器的方法,以及如何用好Linux下的网络邻居。最后介绍Samba服务器的故障排除方法。