用Linux和Samba提供局域网文件和打印服务

Author: 丁望 Date: 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机器,稍加改造,又顺利地投入了运行。该方案比较适合在七八人的小型办公环境中采用。