Linux之Samba基础知识及应用

一、Samba简介

    Server Message Block的缩写是SMB,即服务器消息块,SMB主要是作为Microsoft的网络通讯协议。Samba将SMB通信协议应用到了Linux系统上。其功能特性可实现:WINS和DNS服务、网络浏览服务、Linux和Windows域之间的认证和授权、UNICODE字符集和域名映射、满足CIFS协议的UNIX共享等

  SMB是基于客户机/服务器型的协议,故一台Samba服务器既可当文件共享服务器,也可充Samba的客户端。Samba在windows下使用的是NetBIOS协议,如果你要使用Linux下共享出来的文件,请确认你的windows系统下是否安装了NetBIOS协议。

    SMB工作原理大致分为:

    1、协议协商:客户端在访问Samba服务器时,首先由客户端发送一个SMB negprot请求数据报,并列出它所支持的所有SMB协议版本。服务器在接收到请求信息后开始响应请求,并列出希望使用的协议版本。如果没有可使用的协议版本则返回oXFFFFH信息,结束通信。

    2、建立连接:当SMB协议版本确定后,客户端进程向服务器发起一个用户或共享的认证,这个过程是通过发送SesssetupX请求数据报实现的。客户端发送一对用户名和密码或一个简单密码到服务器,然后服务器通过发送一个SesssetupX请应答数据报来允许或拒绝本次连接。

    3、访问共享资源:当客户端和服务器完成了协商和认证之后,它会发送一个Tcon或SMB TconX数据报并列出它想访问网络资源的名称,之后服务器会发送一个SMB TconX应答数据报以表示此次连接是否被接受或拒绝。

    4、断开连接:连接到相应资源,SMB客户端就能够open SMB打开一个文件,通过read SMB读取文件,通过write SMB写入文件,通过close SMB关闭文件。

   

二、安装Samba服务

    #rpm -qa | grep samba

    #yum install samba samba-client

    注:Samba安装好后,使用testparm命令可以测试smb.conf配置是否正确。使用testparm –v命令可以详细的列出smb.conf支持的配置参数


三、简要说明Samba服务配置文件

    Samba的主配置文件位置:/etc/samba/smb.conf

    配置文件分两部分:

    1、Global Settings (55至245行):该设置都是与Samba服务整体运行环境有关的选项,它的设置项目是针对所有共享资源的。

    2、Share Definitions (246-尾行):该设置针对的是共享目录个别的设置,只对当前的共享资源起作用。

    以下为全局参数和共享参数说明:

    #==================Global Settings ===================

    全局参数---[global]

    config file = /usr/local/samba/lib/smb.conf.%m

    ##config file可以让你使用另一个配置文件来覆盖缺省的配置文件。如果文件不存在,则该项无效。这个参数很有用,可以使得samba配置更灵活,可以让一台 samba服务器模拟多台不同配置的服务器。

    workgroup = WORKGROUP

    ##设定 Samba Server 所要加入的工作组或者域。

    server string = Samba Server Version %v

    ##设定 Samba Server 的注释,可以是任何字符串,也可以不填。宏%v表示显示Samba的版本号。

    netbios name = smbserver

    ##设置Samba Server的NetBIOS名称。如果不填,则默认会使用该服务器的DNS名称的第一部分。netbios name和workgroup名字不要设置成一样了。

    interfaces = lo eth0 192.168.12.2/24 192.168.13.2/24

    ##设置Samba Server监听哪些网卡,可以写网卡名,也可以写该网卡的IP地址。

    hosts allow = 127. 192.168.1. 192.168.10.1

    ##表示允许连接到Samba Server的客户端,多个参数以空格隔开。可以用一个IP表示,也可以用一个网段表示。hosts deny 与hosts allow 刚好相反。

    hosts allow=172.17.2.0/255.255.0.0

    ##表示容许来自172.17.2.0/255.255.0.0子网中的所有主机连接

    hosts allow=M1,M2

    ##表示容许来自M1和M2两台计算机连接

    hosts allow=@pega

    ##表示容许来自pega网域的所有计算机连接

    max connections = 0

    ##max connections用来指定连接Samba Server的最大连接数目。如果超出连接数目,则新的连接请求将被拒绝。0表示不限制。

    deadtime = 0

    ##deadtime用来设置断掉一个没有打开任何文件的连接的时间。单位是分钟,0代表Samba Server不自动切断任何连接。

    time server = yes/n

    ##time server用来设置让nmdb成为windows客户端的时间服务器。

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

    ##设置Samba Server日志文件的存储位置以及日志文件名称。在文件名后加个宏%m(主机名),表示对每台访问Samba Server的机器都单独记录一个日志文件

    max log size = 50

    ##设置Samba Server日志文件的最大容量,单位为kB,0代表不限制。

    security = user

    ##设置用户访问Samba Server的验证方式,一共有四种验证方式。

    share:用户访问Samba Server不需要提供用户名和口令, 安全性能较低。

    user:Samba Server共享目录只能被授权的用户访问,由Samba Server负责检查账号和密码的正确性。账号和密码要在本Samba Server中建立。

    server:依靠其他Windows NT/2000或Samba Server来验证用户的账号和密码,是一种代理验证。此种安全模式下,系统管理员可以把所有的Windows用户和口令集中到一个NT系统上,使用 Windows NT进行Samba认证, 远程服务器可以自动认证全部用户和口令,如果认证失败,Samba将使用用户级安全模式作为替代的方式。

    domain:域安全级别,使用主域控制器(PDC)来完成认证。

    passdb backend = tdbsam

    ##passdb backend就是用户后台的意思。目前有三种后台:smbpasswd、tdbsam和ldapsam。sam应该是security account manager(安全账户管理)的简写:

    smbpasswd:该方式是使用smb自己的工具smbpasswd来给系统用户(真实用户或者虚拟用户)设置一个Samba密码,客户端就用这个密码来访问Samba的资源。smbpasswd文件默认在/etc/samba目录下,不过有时候要手工建立该文件。

    tdbsam: 该方式则是使用一个数据库文件来建立用户数据库。数据库文件叫passdb.tdb,默认在/etc/samba目录下。passdb.tdb用户数据库 可以使用smbpasswd –a来建立Samba用户,不过要建立的Samba用户必须先是系统用户。我们也可以使用pdbedit命令来建立Samba账户。pdbedit命令的 参数很多,我们列出几个主要的。

  pdbedit –a username:新建Samba账户。

  pdbedit –x username:删除Samba账户。

  pdbedit –L:列出Samba用户列表,读取passdb.tdb数据库文件。

  pdbedit –Lv:列出Samba用户列表的详细信息。

  pdbedit –c “[D]” –u username:暂停该Samba用户的账号。

  pdbedit –c “[]” –u username:恢复该Samba用户的账号。

    ldapsam:该方式则是基于LDAP的账户管理方式来验证用户。首先要建立LDAP服务,然后设置“passdb backend = ldapsam:ldap://LDAP Server”

   encrypt passwords = yes/no

   ##是否将认证密码加密。因为现在windows操作系统都是使用加密密码,所以一般要开启此项。不过配置文件默认已开启。

   smb passwd file = /etc/samba/smbpasswd

   ##用来定义samba用户的密码文件。smbpasswd文件如果没有那就要手工新建。

   username map = /etc/samba/smbusers

   ##用来定义用户名映射,比如可以将root换成administrator、admin等。不过要事先在smbusers文件中定义好。

   guest account = nobody

   ##用来设置guest用户名。

   socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192

   ##用来设置服务器和客户端之间会话的Socket选项,可以优化传输速度。

   domain master = yes/no

   ##设置Samba服务器是否要成为网域主浏览器,网域主浏览器可以管理跨子网域的浏览服务。

   local master = yes/no

   ##local master用来指定Samba Server是否试图成为本地网域主浏览器。如果设为no,则永远不会成为本地网域主浏览器。但是即使设置为yes,也不等于该Samba Server就能成为主浏览器,还需要参加选举。

   preferred master = yes/no

   ##设置Samba Server一开机就强迫进行主浏览器选举,可以提高Samba Server成为本地网域主浏览器的机会。如果该参数指定为yes时,最好把domain master也指定为yes。使用该参数时要注意:如果在本Samba Server所在的子网有其他的机器(不论是windows NT还是其他Samba Server)也指定为首要主浏览器时,那么这些机器将会因为争夺主浏览器而在网络上大发广播,影响网络性能。

   os level = 200

   ##设置samba服务器的os level。该参数决定Samba Server是否有机会成为本地网域的主浏览器。os level从0到255,winNT的os level是32,win95/98的os level是1。

   domain logons = yes/no

   ##设置Samba Server是否要做为本地域控制器。主域控制器和备份域控制器都需要开启此项。

   logon script = %u.bat

   ##当使用者用windows客户端登陆,那么Samba将提供一个登陆档。如果设置成%u.bat,那么就要为每个用户提供一个登陆档。

   wins support = yes/no

   ##设置samba服务器是否提供wins服务。

   wins server = wins服务器IP地址

   ##设置Samba Server是否使用别的wins服务器提供wins服务。

   wins proxy = yes/no

   ##设置Samba Server是否开启wins代理服务。

   dns proxy = yes/no

   ##设置Samba Server是否开启dns代理服务。

   load printers = yes/no

   ##设置是否在启动Samba时就共享打印机。

   printcap name = cups

   ##设置共享打印机的配置文件。

   printing = cups

   ##设置Samba共享打印机的类型。现在支持的打印系统有:bsd, sysv, plp, lprng, aix, hpux, qnx

 

   共享参数

   #================== Share Definitions ==================

   [共享名]

   comment = 任意字符串

   ##comment是对该共享的描述,可以是任意字符串。

   path = 共享目录路径

   ##path用来指定共享目录的路径。

   browseable = yes/no

   ##browseable用来指定该共享是否可以浏览。

   writable = yes/no

   ##writable用来指定该共享路径是否可写。

   available = yes/no

   ##available用来指定该共享资源是否可用。

   admin users = 该共享的管理者

   ##admin users用来指定该共享的管理员(对该共享具有完全控制权限)。

   valid users = 允许访问该共享的用户

   ##valid users用来指定允许访问该共享资源的用户。

   invalid users = 禁止访问该共享的用户

   ##invalid users用来指定不允许访问该共享资源的用户。如:invalid users = root,@bob(多个用户或者组中间用逗号隔开。)

   write list = 允许写入该共享的用户

   ##write list用来指定可以在该共享下写入文件的用户。

   public = yes/no

   ##public用来指定该共享是否允许guest账户访问。

   guest ok = yes/no

   #意义同“public”。

 

   ------几个特殊共享:

[homes]
   comment = Home Directories
   browseable = no
   writable = yes
   valid users = %S
   ; valid users = MYDOMAIN\%S
 
   [printers]
   comment = All Printers
   path = /var/spool/samba
   browseable = no
   guest ok = no
   writable = no
   printable = yes
 
  [netlogon]
  comment = Network Logon Service
  path = /var/lib/samba/netlogon
  guest ok = yes
  writable = no
  share modes = no
 
  [Profiles]
  path = /var/lib/samba/profiles
  browseable = no
  guest ok = yes

四、应用实践
    要求:
    1.建立samba共享,共享目录为/data;
    2.共享名为shared,工作组为magedu;
    3.添加组develop,添加用户gentoo,centos和ubuntu,其中gentoo和centos以develop为附加组,ubuntu不属于develop组;密码均为用户名;
    4.添加samba用户gentoo,centos和ubuntu,密码均为“mageedu”;
    5.此samba共享shared仅允许develop组具有写权限,其他用户只能以只读方式访问;
    6.此samba共享服务允许来自于192.168.1.0/24(可根据自己的网络情况来设置)网络的主机访问
    配置过程:
    1.先创建相关的用户(系统用户和smb用户)、组、密码
    #groupadd develop
    #useradd -G develop gentoo
    #useradd -G develop centos
    #useradd ubuntu
    #passwd gentoo
    #passwd centos
    #pas ubuntu
    #smbpasswd -a gentoo
    #smbpasswd -a centos
    #smbpasswd -a ubuntu
    注意:如果smbpasswd设置用户密码不加参数-a,会出现以下错误
    [root@hc01 ~]# smbpasswd ubuntu
    New SMB password:
    Retype new SMB password:
    Failed to find entry for user ubuntu.

samba 实用工具 samba详解_操作系统

    2.创建根下data目录,设置权限可读可写

 

[root@hc01 ~]# mkdir /data
    [root@hc01 ~]# chmod 777 /data/
    3.编辑smb.conf配置文件,共享名为data的共享名为shared,develop可写,其他都只读
    # vim /etc/samba/smb.conf
    //添加以下内容
    hosts allow = 192.168.1               //80行         
    [shared]      //共享目录
       comment = shared
       path = /data
       browseable = yes
       guest ok = no
       writable = no
       write list = +develop

 

samba 实用工具 samba详解_Server_02

samba 实用工具 samba详解_操作系统_03


    4.启动smb服务

      service smb start

    5.用户centos 和ubuntu用户测试

samba 实用工具 samba详解_操作系统_04

samba 实用工具 samba详解_数据库_05

samba 实用工具 samba详解_samba 实用工具_06

samba 实用工具 samba详解_操作系统_07



转载于:https://blog.51cto.com/daisywei/1710715