天天看点

构建Samba文件共享服务器

linux是一个优秀的操作系统,尤其是它的网络功能,可以与各种操作系统轻松连接,实现多种网络服务。由于linux系统的高稳定性和可靠性,以及低廉的价格,使它受到越来越多用户的青睐。在一些中小型网络,或者企业的内部网中,利用linux建立文件服务器是一个很好的解决方案。针对企业内部网中的绝大部分客户机采用windows的情况,我们可以通过使用samba来实现文件服务器功能。

samba是在linux及unix上实现smb(servermessageblock)协议的一个免费软件,由服务器及客户端程序构成。这里我们只介绍服务器程序。

我们首先介绍一些smb协议的情况。smb协议是建立在netbios协议之上的应用协议,是基于tcp138、139两个端口的服务。netbios出现之后,microsoft就使用netbios实现了一个网络文件/打印服务系统。这个系统基于netbios设定了一套文件共享协议,microsoft称之为smb(servermessageblock)协议。这个协议被用于lanmanager和windows服务器系统中,实现不同计算机之间共享打印机和文件等。因此,为了让windows和unix/linux计算机相集成,最好的办法就是在unix/linux计算机中安装支持smb协议的软件。这样使用windows的客户端不需要更改设置,就能像使用windowsnt或windows2000服务器一样,使用unix/linux计算机上的共享资源了。samba使smb协议运行在netbios协议上,并且使用windows的netbeui协议让unix/linux服务器可以在windows的网络邻居上被访问到。

samba的服务器程序可以实现以下主要功能:

◆文件及打印共享;

◆计算机名与ip的解悉;

◆wins服务的支持;

◆用户权限设置(如果配合linux的quota还可以实现用户磁盘空间配额)。

安装

samba有两种安装方式:

1.安装rpm包

我们以redhat为例:

mount -tiso9660 /dev/cdrom /mnt/cdrom

cd /mnt/cdrom/redhat/rpms

rpm-ivh samba*.rpm

或者升级安装 

rpm-uvhsamba*.rpm

2.安装samba源代码

tar-zxvf samba*.tar.gz

cd /samba/src

./configure

./makedep

./make

./makeinstall

配置

samba安装后,可以看见/etc/samba这样一个目录,里面存放着与samba相关的一些文件,如lmhosts、smb.conf、smbpasswd等。smb.conf是samba的核心,一切的功能配置都在这个文件中,它有许多不同的配置选项。为避免混淆,我们要介绍一些对于samba正确操作必不可少的参数设置。在配置这个文件前先介绍一下samba中的环境变量。

%s代表共享名;

%p代表共享的主目录;

%u代表共享的用户名;

%g代表用户所在的工作组;

%u代表用户名;

%g代表当前对话的用户的主工作组;

%h代表用户的共享主目录;

%v代表samba服务器的版本号;

%h代表samba服务机器的主机名;

%m代表客户机netbios名称;

%l代表服务器netbios名称;

%m代表客户机的主机名;

%n代表nis服务器名;

%p代表nis服务的home目录;

%i代表客户机的ip;

%t代表系统当前日期和时间。

使用cd命令进入smb.conf所在的目录,启动常用的文本编辑器,例如vi、emacs等等。

1.smb.conf的全局设置

[global]

#workgroup=nt-domain-nameorworkgroup-name

serverstring=mysambaserver

hostsallow=192.168.1.192.168.2.127.

printcapname=/etc/printcap

loadprinters=yes/no

printing=bsd

 第一行告诉samba我们定义该samba服务器所在的工作组名或者域名;第二行告诉samba对于此服务器的描述。接下来可以设置允许访问的网络和主机ip。上例就允许ip为192.168.1.0/24、192.168.2.1/24及127.0.0.0/8的主机访问该服务器。紧接着是在/etc/printcap这个文件中取得打印机的描述信息,并设定是否自动共享打印机。下一行则是定义了打印系统的类型,其缺省值是bsd,并且有lprng、sysv、plp、bsd、aix和hpux等几个可选项。

logfile=/var/log/samba/log.%m

maxlogsize=0

上面这两行则是samba日志的相关定义。其记录文件的位置是放在/var/log/samba/%m.log。后面的一条是定义日志记录文件的大小,单位是kb,如果是0的话就不限大小。

2.samba安全性设置

samba不使用标准unix口令来认证用户。因为当windows发送以明文表示的口令时,其都以加密形式发送smb/cifs口令,这样就与标准unix口令散列不兼容了。换句话说,samba没有办法使用标准unixpassword散列来验证windows加密的口令是否正确。但幸运的是,samba提供了许多方法来将这两个数据库同步。下面介绍samba安全性的设置。

guestaccount=nobody

security=user

passwordserver=

encryptpasswords=yes/no

其中第一行定义samba缺省的用户账号,这个账号必须在/etc/passwd中。第二行则声明了samba的安全级别,分为share、user、server和domain四级。它们分别对应的验证方式为:share是没有安全性的级别,任何用户都可以不要用户名和口令访问服务器上的资源;user是samba的默认配置,要求用户在访问共享资源之前必须先提供用户名和密码进行验证;server和user安全级别类似,但用户名和密码是递交到另外一个服务器去验证,如果递交失败,就退到user安全级;domain这个安全级别要求网络上存在一台windows的域控制器,samba把用户名和密码递交给它验证。需要注意的是都要求此用户是本linux机器上的系统账户。当前面的security设定为server或domain的时候,才有必要设定passwordserver。它可以是域名,也可以是机器的ip。encryptpasswords这个选项则设置是否对密码进行加密。samba本身有一个密码文件/etc/samba/smbpasswd,如果不对密码进行加密,则在验证期间客户机和服务器之间传递的是明文密码。

smbpasswdfile=/etc/samba/smbpasswd

usernamemap=/etc/smbusers

以上两行分别设置了存放samba用户密码的文件是/etc/samba/smbpasswd,以及指定用户映射文件是/etc/samba/smbusers。如果我们在这个文件里面指定一行root=administrator,客户机的用户是administrator,连接时会被当作用户root看待。

3.网络和主机的性能设置

除了以上的用户权限设置外,还有关于网络和主机的性能设计。

include=/etc/smb.conf.%m

指定对不同机器的连接采用不同的配置文件。一般为了管理使用/etc/samba/smb.conf.%m,采用samba变量,把配置文件和客户机的netbios名称关联起来,能很容易地控制这些客户机的权限和设置。

socketoptions=tcp_nodelayso_rcvbuf=8192so_sndbuf=8192

这是网络socket方面的一些参数,能实现最好的文件传输性能。

interfaces=192.168.12.2/24192.168.13.2/24

接口选项在机器碰巧有多个网络接口时特别有用,它可以指定在哪个网络接口上使用。

remoteannounce=192.168.1.255192.168.2.44

上面命令指定了浏览列表同步信息从哪里取得,例如可以从192.168.2.44或整个子网中获得。

4.系统的兼容性设置

oslevel=33

上面这个参数值是个整数,决定了nmbd是否有机会成为本地广播区域工作组里的本地主浏览器。默认值是零,则意味着nmbd失去浏览选择。如果要nmbd有机会成为本地主浏览器的话,可以设为33。

domainmaster=yes/no

用户设置上面参数可以让nmbd成为一个域控制器,取得域的各个列表,并将整个域的列表递交给本地浏览器。

preferredmaster=yes/no

preservecase=yes/no

shortpreservecase=yes/no

defaultcase=lower/upper

casesensitive=yes/no

以上几个参数分别指定nmbd是否是工作组里首要的主浏览器。如果指定为yes,nmbd启动时候强制选择一个浏览;接下来的几项是用户指定拷贝dos文件的时候是否保持大小写,缺省是no,也就是不保持。所有dos文件的缺省是大写,小写不敏感,因此这项一般设置为no。

 5.主机名的查询设置

从根本上说,可以把wins看做是本地的动态dns数据库。当samba作为wins服务器运行的时侯,同一子网上每个与windows兼容的机器都会向samba注册它的ip地址和netbios名称(又称“计算机名”)。这可以让windows机器使用samba的wins数据库来请求特定netbios名称的ip地址。

继续阅读