Samba服务配置

Posted guojingdeyuan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Samba服务配置相关的知识,希望对你有一定的参考价值。

         一、samba服务简介。

        在早期网络世界当中,数据在不同主机之间的传输大多是使用 FTP 来进行传送。不过,使用FTP 传输却有个小小的问题,即无法直接修改主机上面的数据!也就是说您想要更改Linux 主机上的某个文件时,必需要由 Server 端将该档文件下载到 Client端后才能修改,也因此该文件在 Server 与 Client 端都会存在。如果有一天修改了某个文件,却忘记将数据上传回主机,那么等过了一阵子之后,如何知道那个文件才是最新的?

      如果可以在 Client 端直接取用Server 端文件,那么在Client 端就不需要存在该文件数据!有没有这样的文件系统( File System )? Network File System, NFS 就是这样的文件系统之一!只要在 Client 端将 Server所提供分享的目录挂载进来,那么在 Client 的机器上面就可以直接取用 Server上的文件数据,而且,该数据就像 Client 端上面的partition 一般!而除了可以让 Unix Like 的机器互相分享档案的NFS 服务器之外,在微软 ( Microsoft ) 上面也有类似的文件系统 Common Internet File System(CIFS)。CIFS 最简单的想法就是以前常见的『网上邻居』。Windows 系统的计算机可以『网上邻居』来分享别人所提供的文件数据。不过,NFS仅能让 Unix 机器沟通, CIFS 只能让 Windows 机器沟通。有没有让Windows 与 Unix-Like 这两个不同的平台相互分享档案数据的档案系统?
        1991 年一个名叫Andrew Tridgwell 的大学生就有这样的困扰,他手上有三部机器,分别是跑DOS 的个人计算机、DEC公司的 Digital Unix 系统以及 Sun 的 Unix 系统。当时DEC 公司有发展出一套称为 PATHWORKS 的软件,这套软件可以用来分享 DEC 的Unix 与个人计算机的 DOS 这两个操作系统的文件数据,可惜让 Tridgwell 觉得较困扰的是,Sun的 Unix 无法由这个软件来达到数据分享的目的。为了解决这样的的问题,这老兄就自行写了个program 去侦测当 DOS 与 DEC 的 Unix 系统在进行数据分享传送时所使用到的通讯协议信息,然后将这些重要的信息撷取下来,并且基于上述所找到的通讯协议而开发出Server Message Block (SMB) 这个文件系统,而就是这套 SMB软件能够让 Unix 与 DOS 互相的分享数据!( 注:再次的给他强调一次,在Unix Like 上面可以分享文件数据的 file system 是 NFS,那么在 Windows 上面使用的『网络邻居』所使用的档案系统则称为Common Internet File System, CIFS )
       因此 Tridgwell就去申请了 SMBServer ( Server Message Block 的简写 ) 这个名字来做为他撰写的这个软件的商标,可惜的是,因为SMB 是没有意义的文字,因此没有办法达成注册。既然如此的话,那么能不能在字典里面找到相关的字词可以做为商标来注册呢?翻了老半天,呵呵!这个SAMBA刚好含有 SMB ,又是热情有劲的拉丁舞蹈的名称,不如就用这个名字来做为商标好了。如此,这成为我们今天所使用的SAMBA 的名称由来。     

        组成Samba运行的有两个服务,一个是SMB,另一个是NMB;SMB是Samba 的核心启动服务,主要负责建立 Linux Samba服务器与Samba客户机之间的对话, 验证用户身份并提供对文件和打印系统的访问,只有SMB服务启动,才能实现文件的共享,监听139 TCP端口。而NMB服务是负责解析用的,类似与DNS实现的功能,NMB可以把Linux系统共享的工作组名称与其IP对应起来,如果NMB服务没有启动,就只能通过IP来访问共享文件,监听137和138 UDP端口。       

        二、samba服务的安装与配置

       1、先确定是否已经安装了samba服务     

        rpm -qa | grep samba

        如果已经安装则会显示安装的版本和包,未安装则不显示。

       2、安装samba服务

        如果没有安装samba服务,使用yum安装samba工具:#yum -y install samba

                                                   另外一种安装方式:sudo apt-get install samba

       3、启动samba服务

        systemctl start smb nmb

        4、查看samba服务进程和相关信息

       #ps -ef | grep -E ‘smb|nmb‘
       root       4935      1  0 14:55 ?        00:00:00 /usr/sbin/smbd --foreground --no-process-group
       root       4937   4935  0 14:55 ?        00:00:00 /usr/sbin/smbd --foreground --no-process-group
       root       4938   4935  0 14:55 ?        00:00:00 /usr/sbin/smbd --foreground --no-process-group
       root       4941   4935  0 14:55 ?        00:00:00 /usr/sbin/smbd --foreground --no-process-group
       root       6098   4935  0 15:47 ?        00:00:00 /usr/sbin/smbd --foreground --no-process-group
       root       6979   6056  0 16:52 pts/3    00:00:00 grep --color=auto -E smb|nmb

        查看Samba应用服务端口: netstat -tunlp | grep -E ‘smbd|nmbd‘
        tcp        0      0 0.0.0.0:445             0.0.0.0:*               LISTEN      4935/smbd           
        tcp        0      0 0.0.0.0:139             0.0.0.0:*               LISTEN      4935/smbd           
        tcp6       0      0 :::445                     :::*                        LISTEN      4935/smbd           
        tcp6       0      0 :::139                     :::*                        LISTEN      4935/smbd 

        Samba由两个主要程序组成,它们是smbd和nmbd。smbd应用进程主要监听139和445端口, nmbd应用进程主要监听137与138端口。这两个守护进程在服务器启动到停止期间持续运行,功能各异。Smbd和nmbd使用的全部配置信息全都保存在smb.conf文件中。Smb.conf向smbd和nmbd两个守护进程说明输出什么以便共享,共享输出给谁及如何进行输出。

        三、samba服务的配置

        Samba服务器的工作原理是:客户端向Samba服务器发起请求,请求访问共享目录,Samba服务器接收请求,查询smb.conf文件,查看共享目录是否存在,以及来访者的访问权限,如果来访者具有相应的权限,则允许客户端访问,最后将访问过程中系统的信息以及采集的用户访问行为信息存放在日志文件中。

    Samba的默认配置文件一般存放在/etc/samba目录中,主配置文件名为smb.conf,文件中记录着大量的规则和共享信息,所以是samba服务非常重要的核心配置文件,完成samba服务器搭建的大部分主要配置都在该文件中进行。

       注意:在修改配置文件之前,务必先进行保存。以便出现错误后的恢复。    cd /etc/sambamv smb.conf smb_back.conf 或 cp smb.conf ./smb_back.conf

       或cp /etc/samba/smb.conf /etc/samba/smb_back.conf

 1 # See smb.conf.example for a more detailed config file or
 2 # read the smb.conf manpage.
 3 # Run testparm to verify the config is correct after
 4 # you modified it.
 5 
 6 [global]
 7         #workgroup = SAMBA
 8         workgroup = WORKGROUP
 9         security = user
10 
11         passdb backend = tdbsam
12 
13         printing = cups
14         printcap name = cups
15         load printers = yes
16         cups options = raw
17 
18 [homes]
19         comment = Home Directories
20         valid users = %S, %D%w%S
21         browseable = No
22         read only = No
23         inherit acls = Yes
24 
25 [printers]
26         comment = All Printers
27         path = /var/tmp                                #文件共享路径
28         printable = Yes
29         create mask = 0600
30         browseable = No              
31 
32 [print$]
33         comment = Printer Drivers
34         path = /var/lib/samba/drivers
35         write list = @printadmin root
36         force group = @printadmin
37         create mask = 0664
38         directory mask = 0775

 

          1、全局参数 [global].     

          workgroup用来定义工作组。一般情况下,需要我们把这里改成”WORKGROUP”(windows默认的工作组名字)。
          security = user #这里指定samba的安全等级。关于安全等级有四种:share:用户不需要账户及密码即可登录samba服务器,(非常不安全)
                                                                                                                        user:由提供服务的samba服务器负责检查账户及密码(默认)
                                                                                                                        server:检查账户及密码的工作由另一台windows或samba服务器负责
                                                                                                                        domain:指定windows域控制服务器来验证用户的账户及密码。
          passdb backend = tdbsam # passdb backend (用户后台),samba有三种用户后台:smbpasswd, tdbsam和ldapsam
          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” load printers 和 cups options 两个参数用来设置打印机相关。除了这些参数外,还有几个参数需要了解:
    netbios name = MYSERVER # 设置出现在“网上邻居”中的主机名
    hosts allow = 127. 192.168.12. 192.168.13. # 用来设置允许的主机(表示允许连接到Samba Server的客户端),如果在前面加”;”则表示允许所有主机。多个参数以空格隔开。可以用一个IP表示,也可以用一个网段表示。hosts deny 与hosts allow 刚好相反。例如: 表示容许来自172.17.2.*.*的主机连接,但排除172.17.2.50 hosts allow=172.17.2.EXCEPT172.17.2.50 # 表示容许来自172.17.2.0/255.255.0.0子网中的所有主机连接 hosts allow=172.17.2.0/255.255.0.0 # 表示容许来自M1和M2两台计算机连接 hosts allow=M1,M2 # 表示容许来自SC域的所有计算机连接 hosts [email protected]

interfaces = lo eth0 192.168.12.2/24 192.168.13.2/24  #设置Samba Server监听哪些网卡,可以写网卡名,也可以写该网卡的IP地址。
    log file = /var/log/samba/%m.log #定义samba的日志,这里的%m是上面的netbios name
    max log size = 50 # 指定日志的最大容量,单位是K。                 

    config file = /usr/local/samba/lib/smb.conf.%m     #config file可以让你使用另一个配置文件来覆盖缺省的配置文件。如果文件 不存在,则该项无效。这个参数很有用,可以使得samba配置更灵活,可以让一台samba服务器模拟多台不同配置的服务器。比如,你想让PC1(主机名)这台电脑在访问Samba Server时使用它自己的配置文件,那么先在/etc/samba/host/下为PC1配置一个名为smb.conf.pc1的文件,然后在smb.conf中加入:config file=/etc/samba/host/smb.conf.%m。这样当PC1请求连接Samba Server时,smb.conf.%m就被替换成smb.conf.pc1。这样,对于PC1来说,它所使用的Samba服务就是由smb.conf.pc1定义的,而其他机器访问Samba Server则还是应用smb.conf。

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

        注:使用过程中发现,win10因安全因素不支持早期的samba1协议,因此security 不能再用早期的share,只能用这里user。    

      2、[homes]

       该部分内容共享用户自己的home目录,也就是说,当用户登录到samba服务器上时实际上是进入到了该用户的home目录,用户登陆后,共享名不是homes而是用户自己的标识符,对于单纯的文件共享的环境来说,这部分可以注视掉。

      3、[printers]

      该部分内容设置打印机共享。

      4、修改配置文件
      将workgroup修改为WORKGROUP。在配置文件的末尾添加
[my_share]
    comment = My share
        path = /home/gzd/gzd_share     
        valid users = xxxx
        writable = yes
        browseable = yes
        create mask = 0664
       # force create mask = 0644
        directory mask = 0775
       # force directory mode = 0755

     四、测试samba服务

     1、设置完samba服务后,需要重启,同时可以设置为开机自启。systemctl resatrt smb ; systemctl enable smb

      2、创建smb账号。

      //新建/etc/samba/smbpasswd文件:sudo touch /etc/samba/smbpasswd

  // 根据2.3设置的valid users,设置用户密码

  // gzdaijie 替换为你在2.3中设置的用户名

   sudo smbpasswd -a xxxxx

 //输入两次密码后,会提示 Added user gzd. 表示设置成功
 // 若用户名非当前登录系统的用户名,可能会提示Failed
3、win10下测试
按下win+R按键,输入\192.168.xx.xxx,再输入用户名和密码即可。
五、其他的一些相关命令

#service smb start

         #service smb stop

         #service smb restart

        #service smb status

 

 注:使用时候如果打不开文件夹,可能是因为防火墙的原因。关闭防火墙即可:systemctl stop firewalld.service 和setenforce 0

 

      








































以上是关于Samba服务配置的主要内容,如果未能解决你的问题,请参考以下文章

虚拟机装linux使用samba共享,本地看代码会卡。

Samba 基础搭建

samba服务,连接远程开发机

Samba远程代码执行漏洞(CVE-2017-7494)复现

centOS7上安装samba

网络共享服务器 samba