用Linux和Samba提供局域网文件和打印服务 丁望 2000年 第22期   Linux操作系统配上Samba服务能够全面支持Windows的文件和打印服务。有资料表明,客户(Client)端用户几乎不能分辨服务器(Server)端采用的是Samba服务器还是Windows NT服务器。Samba软件包还可以安装到任何一台类Unix的机器上,稍加配置,即可为用户提供类似Windows NT的文件和打印服务。Samba的官方网址是http://www.samba.org,其最新版本可以从ftp://ftp.samba.org下载。   下面以Redhat公司的Redhat 6.0为例。我采用了一台Compaq的486档次的机器,另外配一块4.3G硬盘,NE2000兼容网卡。 #1  一、Linux和Samba软件包的安装   首先安装Redhat 6.0。注意安装时可选择安装Samba软件包,并自动启动smb服务。那么重新启动机器后,输入命令 #ps -ef,可以看到两个进程smbd -D和nmbd -D。其中smbd是smb的daemon,nmbd是为Client提供Netbios名字服务的daemon。这说明Samba服务已经启动了。   如果你在安装系统时没有选择Samba软件包,或者你是在其他UNIX机器上安装下载的Samba软件包,那么通常可以将Samba软件包拷贝到/usr/local目录下,用下列命令解包:   #tar xvfz samba-2.0.5.tar.gz   按照readme文件的指示可以非常容易地完成安装。注意:daemon程序应在/usr/sbin目录下,其他可执行程序在/usr/bin目录下,配置文件smb.conf在/etc目录下。   两个daemon程序可以作为独立的进程运行,也可以从inetd启动。软件默认为独立进程运行。如果想从inetd启动,先检查一下文件/etc/services保证下列行前的注释符“#”已被删除。   netbios-ns 137/tcp nbns   netbios-ns 137/udp nbns   netbios-dgm 138/tcp nbdgm   netbios-dgm 138/udp nbdgm   netbios-ssn 139/tcp nbssn   然后,在文件/etc/inetd.conf中加入下列行:   # Samba NetBIOS services (for PC file and print sharing)   netbios-ssn stream tcp nowait root /usr/sbin/smbd smbd   netbios-ns dgram udp wait root /usr/sbin/nmbd nmbd   重新启动inetd:#kill -HUP ′cat /var/run/inetd.pid′ 即可。 #1  二、smb.conf文件的一般配置   Samba软件的基本配置均在同一个文件/etc/smb.conf中,该文件决定共享的资源和权限。smb.conf文件是按段划分的,诸如:[global]、[printer]、[home]段。[global]段定义了Samba服务提供的共享资源所引用的相同的一些变量。[home]段通常定义了Linux机器上共享出来的目录资源,其名字可以由用户确定。[printer]定义了Linux上共享打印机的设置。下面是我的一个实例:   [global]    netbios name = Red;定义Windows“网上邻居”中所见的机器名    workgroup = office;定义工作组名    printing = bsd    printcap name = /etc/printercap;共享的打印机文件    load printer = yes;是否加载/etc/printercap中的打印机    log file = /var/log/samba-log.%m;定义日志文件   security = share;定义访问限制   [public];“网上邻居”中看到的共享资源名    comment = This is Redhat Server;注释行    public = yes    browseable = yes;为yes时,“网上邻居”中可见该资源;否则不可见    writeable = yes;定义该共享目录可写入    path = /home/public;指定共享目录所在的路径   [printers] path = /var/spool/lpd/lp;定义打印机的路径,要与/etc/printercap中spool目录中的设置一致    security = server    printer name = lp    writeable = yes    printable = yes   print command = lpr -r -h -P %p %s;定义打印命令 #1  三、共享目录采用user模式时的设置   有时,我们要对Linux上共享目录的访问进行限制。访问限制有三种:share、user、server。默认模式为share,安全级别最低。user模式要求连接时输入用户名和口令。server模式要求用户的认证由Samba服务器来完成。通常我们用到的是user模式。这时要注意,Windows系列默认采用加密口令传输,而Linux默认采用非加密口令传输。此时可采用下列两种方法之一。   1.修改Windows注册表   对Windows 95/98:   在HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\VxD\VNETSUP下   增加一个新的DWORD键值EnablePlainTextPassword 0x01   对Windows NT:   在HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Rdr\Parameters下增加一个新的DWORD键值EnablePlainTextPassword 0x01   2.在smb.conf文件中[global]段中加入下列行:   security = user   encrypt passwords = yes   smb passwd file = /etc/smb/passwd   建议采用第二种方式,避免修改局域网中的每一台Windows机器。   设置是否加密口令后,还要建立smb账户。实际上,这些smb账户就是作为网络客户登录的Windows用户。   #cat /etc/passwd | mksmbpasswd.sh > /etc/smbpasswd   然后编辑/etc/smbpasswd文件,删除多余的账户。   如果Windows网络客户还不是Linux用户,则可用下列命令增加:   #adduser username 添加该用户为Linux用户   #smbpasswd -a username 添加该用户为smb用户   修改smb账户的口令,最后与/etc/passwd中的口令一致,以便于管理。   #smbpasswd username #1  四、检查配置并重新启动Samba服务   smb.conf文件配置完成后,可以用命令对配置语法进行检查。   #/usr/bin/testparm   如果配置文件中有语法上错误,可及时进行修改。正确无误后,用下列命令重启Samba服务(独立进程时):   #/etc/rc.d/init.d/smb restart   此外,必须注意以下几点:   1.Samba要求你的机器处于同一个网段中,并且客户端必须配置TCP/IP协议,其他协议下Samba不能工作。   2.Samba不能跨路由器工作,如果需要提供跨路由服务,还需要设置IP隧道。   3.如果你的机器安装了两块网卡,则应在/etc/smb.conf文件的[global]段中写入下列行:   interfaces = 192.168.1.1/24   其中的24表示C类地址。   4.共享出来的目录还应修改访问限制为777。   就这样,无需更多的投入,一台闲置的486机器,稍加改造,又顺利地投入了运行。该方案比较适合在七八人的小型办公环境中采用。