目录

一.认识Samba服务器

1.了解Samba应用环境

2.了解SMB协议

3.掌握Samba的工作原理

二.配置Samba服务

1.安装并启动Samba服务

2.了解Samba服务器配置的工作流程

基本的Samba服务器的搭建流程主要有五个步骤

Smaba的工作流程如图

 3.主要配置文件smb.conf

Ⅰ.Samba服务程序中的参数及其作用

Ⅱ.Share Definitions 共享服务的定义

4.Samba服务的日志文件和密码文件

1.Samba服务日志文件

 2.Samba服务密码文件

三.user服务器示例解析

四.配置Samba客户端

1.Windows客户端访问samba共享

 2.linux客户端访问Samba共享

Ⅰ.Ⅱ在Linux客户端上安装samba-client和cifs-untils

 Ⅱ.Linux客户端使用smbclient命令访问服务器


       Samba服务器搭建起了Linux与Windows沟通的桥梁,并且提供不同系统的共享服务,还能拥有强大的打印服务功能。

一.认识Samba服务器

        Samba服务器最先在Linux和Windows两个平台之间架起了一座桥梁。我们可以在linux系统和Windows系统之间相互通信,比如复制文件,实现不通操作系统之间的资源共享等。我们可以将其架设称一个功能非常强大的文件服务器,也可以将其架设成打印服务器提供本地和远程联机打印。

1.了解Samba应用环境

  • 文件和打印机共享:文件和打印机共享是Samba的主要功能,通过SMB进程实现资源共享,将文件和打印机发布到网络之中,以供用户访问
  • 身份验证和权限设置:smbd服务支持user mode和domain mode等身份验证和权限设置模式,通过加密方式可以保护共享的文件和打印机
  • 名称解析:Samba通过nmbd服务可以搭建NBNS服务器,提供名称解析,将计算机的NetBIOS名解析称IP地址。
  • 浏览服务:局域网中,Samba服务器可以成为本地主浏览器(LMB)。保存可用资源列表,当使用客户端访问Windows网上另据时,会根据浏览列表,显示共享目录,打印机等资源。

2.了解SMB协议

        SMB(Server Message Block)通信协议是微软(Microsoft)和英特尔(Intel)在1987年制定的协议,主要是作为Microsoft网络的通讯协议。SMB 是在会话层(session layer)和表示层(presentation layer)以及小部分应用层(application layer)的协议。

        SMB使用了NetBIOS的应用程序接口 (Application Program Interface,简称API)。另外,它是一个开放性的协议,允许了协议扩展——使得它变得更大而且复杂;大约有65个最上层的作业,而每个作业都超过120个函数,

3.掌握Samba的工作原理

       Samba服务功能强大,这与通信是基于SMB协议有大的关系。SMB协议不仅能够提供目录和打印机共享,还支持认证和权限设置等功能。在早期,SMB运行于NBT协议(NetBIOS over TCP/IP)上,使用UDP协议的137、138及TCP协议的139端口,但随着后期开发,它可以直接运行于TCP/IP协议上,没有额外的NBT层,使用TCP协议的445端口。

二.配置Samba服务

1.安装并启动Samba服务

samba 服务端口 samba服务器工作流程_samba 服务端口

samba 服务端口 samba服务器工作流程_samba 服务端口_02

samba 服务端口 samba服务器工作流程_samba 服务端口_03

[root@localhost ~]# yum -y install samba      //安装Samba服务                                                         [root@localhost ~]# rpm -qa | grep samba    //检测系统中是否安装了Samba

服务

[root@localhost ~]# systemctl restart smb
 [root@localhost ~]# systemctl enable smb.service //启动Samba服务和设为开机自启

2.了解Samba服务器配置的工作流程

基本的Samba服务器的搭建流程主要有五个步骤

  1. 编辑主配置文件smb.conf,指定需要共享的目录,并为共享目录设置共享权限
  2. 在smb.conf文件中指定日志文件名称和存放路径
  3. 设置共享目录的本地系统权限
  4. 重新加载配置文件或重新启动SMB服务,使配置生效
  5. 关闭防火墙或者放行Smb服务,同时设置SElinux为允许

Smaba的工作流程如图

samba 服务端口 samba服务器工作流程_服务器_04

  1. 客户端请求访问Samba服务器上的共享目录(requst)
  2. Samba服务器接收到请求后,会查询主配置文件smb.conf,看是否共享了目录,如果共享了目录则查看客户端是否有权限访问
  3. Samba服务器会将本次访问信息记录在日志文件之中,日志文件的名称和路径都需要我们设置。
  4. 如果客户端满足访问权限设置,则允许客户端进行访问

 3.主要配置文件smb.conf

Samba的配置文件一般放在/etc/samba目录中,主配置文件名为smb.conf

Ⅰ.Samba服务程序中的参数及其作用

samba 服务端口 samba服务器工作流程_共享目录_05

samba 服务端口 samba服务器工作流程_服务器_06

Samba服务程序中的参数及其作用

作用范围

   参数

              作用

[global]

#全局配置

workgroup = SAMBA

#工作组名称

 security = user

#安全验证的方式。需验证来访问主机提供的口令才可以访问

security = share

#来访主机无需验证口令;比较方便,但不安全

security = server

#使用独立的远程主机验证来访主机提供的口令

security =domain

#使用域控制器进行身份验证

passdb backend =tdbsam

#定义后台的类型,共有三种。第一中:创建数据库文件并使用pdbedit命令建立Samba服务程序的用户

passdb backend =smbpasswd

#使用smbpasswd命令为系统用户Samba服务程序的密码

passdb backend = ldapsam

#ldapsam:基于LDAP服务进行账户验证

 load printers = yes

#设置在Samba服务启动时是否共享打印机设备

cups options = raw

#打印机的选项

[homes]

#共享参数

comment = Home Directories

#描述信息

browseable = No

#指定共享目录是否在“网上邻居”中可见

read only = No

#指定共享目录是否仅读

browseable = No

#在配置文件中的共享文件下敲这个命令,只有的通过samba服务共享当前文件是否允许可见。其他的非当前共享文件不影响本身效果

printers

#打印机共享参数

Ⅱ.Share Definitions 共享服务的定义

1.设置共享名         

                           格式:

                                       【共享名】

2.共享资源描述     

                            格式:

                                        comment= 备注信息

3.共享路径             

                            格式:

                                         path=绝对地址路径

4.设置匿名访问       

                            格式:

                                          public =yes //允许匿名当访问

                                          public =no  //不允许匿名当访问

例题1:

       Samba服务器中有个共享目录为/share,需要发布该目录成为共享目录,定义共享目录名为public。要求:允许浏览,允许只读,允许匿名访问。设置如下所示

samba 服务端口 samba服务器工作流程_linux_07

5.设置访问用户

               格式:

                       valid users = 用户名

                       valid users = @组名

例题2:

       Samba服务器/share/tech目录中存放了公司技术部数据,只允许技术部员工和经理访问,技术部组为/tech,经理账号为manager

samba 服务端口 samba服务器工作流程_共享目录_08

6.设置目录只读

               格式:

                      read only = yes  //只读

                      read only = no    //读写

7.设置过滤主机

               格式:

                      hosts allow = 192.168.10.   server.abc.com   
//允许来自192.168.10.0或server.abc.com的访问者访问Samba服务器资源 

                     hosts deny = 192.168.10.   server.abc.com   
//拒绝来自192.168.10.0或server.abc.com的访问者访问Samba服务器资源

例题3:

        Samba服务器公共目录/public存放大量共享数据,为保证目录安全,仅允许192.168.80.0的网络的主机访问,并且只允许读取,禁止写入。

samba 服务端口 samba服务器工作流程_samba 服务端口_09

8.设置目录可写

               格式:

                     writable = yes  //读写

                      writable = no    //只读

9.设置目录只允许部分用户或组读写

               格式:

                     writable  list =  用户名 //允许该用户读写

                      writable  list =  @组    //允许该组读写

10.[home]为特殊共享目录,表示用户主目录。[printers]表示共享打印机

4.Samba服务的日志文件和密码文件

1.Samba服务日志文件

       日志文件对于Samba非常重要,他储存着客户端访问Samba服务器的信息,以及Samba服务的错误提示信息等,可以通过分析日志,帮助解决客户端访问和服务器维护等问题

       Samba服务的日志文件默认在/var/log/samba/中

samba 服务端口 samba服务器工作流程_samba 服务端口_10

 2.Samba服务密码文件

Samba服务器发布共享资源后,客户端访问Samba服务器,需要提交用户名和密码进行身份验证,验证合格才可以进行登录。

Samba服务为了实现客户身份验证功能,将用户名和密码信息存放在/etc/samba/smbpasswd中。

建立一个Samba账户。

格式:smbpasswd  -a  用户名

samba 服务端口 samba服务器工作流程_网络_11

 你会发现,刚开始会报错,这是因为linux本地用户里没有reading这个用户,在linux系统里面添加一个reading用户,再次创建reading用户,就成功了。

所以:在建立Samba账号之前,一定要先建立一个与Samba账号同名的系统账号

三.user服务器示例解析

示例1:如果公司有多个部门,因工作需要,就必须分门别类地建立相应部门地目录。要求将销售部的资料存放在Samba服务器的/companydate/sales/目录下集中管理,以便销售人员浏览,并且该目录只允许销售部员工访问。

需求分析:在/companydata/sales/ 目录中存放有销售部的重要数据,为了保证其他部门无法查看其内容,我们需要将全局配置中security 设置为user安全级别。这样就启用了Samba服务器的身份验证机制。然后在共享目录/companydata/sales下设置valid users 字段,配置只允许销售部员工访问这个共享目录

(1).建立共享目录,并在其下建立测试文件

[root@localhost ~]# mkdir -p /companydate/sales/
 [root@localhost ~]# touch /companydate/sales/test_share.tar

samba 服务端口 samba服务器工作流程_服务器_12

 (2).添加销售部用户和组并添加相对应的Samba账户、

[root@localhost ~]# groupadd sales                                                  //创建销售组sales
 [root@localhost ~]# useradd -g sales -p centos sales1                     //创建销售组组成员sales1
 [root@localhost ~]# useradd -g sales -p centos sales2                     //创建销售组组成员sales2
 [root@localhost ~]# useradd test_user1                                            //创建测试用户
 [root@localhost ~]# echo centos | passwd --stdin test_user1           //设置密码
 [root@localhost ~]# smbpasswd -a sales1                                        //创建Samba账户
 [root@localhost ~]# smbpasswd -a sales2

samba 服务端口 samba服务器工作流程_linux_13

 (3).修改Samba主配置文件

[root@localhost ~]# vim /etc/samba/smb.conf

samba 服务端口 samba服务器工作流程_网络_14

 在全局配置里设置user安全级别模式,默认值

[sales]                                      -----设置共享目录的共享名为sales
        comment = sales
        path = /companydate/sales  --设置共享目录的绝对路径
        writable = yes                        ----设置可以读写
        browseable =yes               
       valid users = @sales             --设置可以访问的用户组为sales组


 

samba 服务端口 samba服务器工作流程_网络_15

 (4).设置共享目录的本地系统权限

[root@localhost ~]# chmod -R  777 /companydate/sales/
 [root@localhost ~]# chown -R sales1:sales /companydate/sales/
 [root@localhost ~]# chown -R sales2:sales /companydate/sales/

samba 服务端口 samba服务器工作流程_网络_16

 (5).关闭SElinux和关闭防火墙或者让防火墙放行

[root@localhost ~]# vim /etc/selinux/config 
把enforcing改为disabled

samba 服务端口 samba服务器工作流程_共享目录_17

[root@localhost ~]# firewall-cmd --list-all                       //列出所有的放行名单
[root@localhost ~]# firewall-cmd --permanent --add-service=samba   //添加放行服务samba
[root@localhost ~]# firewall-cmd --reload     //重新加载防火墙
[root@localhost ~]# firewall-cmd --list-all     //列出所有的放行名单


samba 服务端口 samba服务器工作流程_服务器_18

samba 服务端口 samba服务器工作流程_共享目录_19

 (7).重新加载Samba服务

[root@localhost ~]# systemctl restart smb

四.配置Samba客户端

1.Windows客户端访问samba共享

现在我们的系统大多都是win10,win10的samba服务都是默认关闭的,所以

第一:Windows10开启Samba

打开控制面板:win+r打开运行框,输入control

samba 服务端口 samba服务器工作流程_linux_20

 进入程序和功能,点击启用或关闭Windows功能

samba 服务端口 samba服务器工作流程_samba 服务端口_21

找到SMB 1.0/CIFS文件共享支持,一般打开之后会重启电脑

samba 服务端口 samba服务器工作流程_服务器_22

重启之后,打开资源管理器

输入Samba服务端的ip地址

samba 服务端口 samba服务器工作流程_samba 服务端口_23

 

samba 服务端口 samba服务器工作流程_网络_24

 输入用户名和密码,就是刚才创建的

samba 服务端口 samba服务器工作流程_网络_25

samba 服务端口 samba服务器工作流程_服务器_26

 2.linux客户端访问Samba共享

开启centos8虚拟机作为Linux的客户端

Ⅰ.Ⅱ在Linux客户端上安装samba-client和cifs-untils

[root@localhost ~]# yum -y install samba-client
 [root@localhost ~]# yum -y install cifs-utils.x86_64

samba 服务端口 samba服务器工作流程_网络_27

samba 服务端口 samba服务器工作流程_linux_28

 Ⅱ.Linux客户端使用smbclient命令访问服务器

格式为:smbclient -L 目标主机ip地址/主机名 -U 登录用户%密码

不输入用户名和密码,这样表示匿名用户登录,然后显示匿名用户可以看到的共享目录列表

samba 服务端口 samba服务器工作流程_共享目录_29

只有输入用户名和密码,才有权限浏览和访问sales共享目录

samba 服务端口 samba服务器工作流程_samba 服务端口_30

 Ⅲ.使用smbclient命令行共享访问模式浏览共享的资料

格式:smbclient   //目标IP地址或主机名/共享目录 -U 用户名%密码

进入交互式界面,输入“?”将列出具体命令

samba 服务端口 samba服务器工作流程_linux_31

ls 列出文件 

samba 服务端口 samba服务器工作流程_服务器_32

 不能创建文件,可以创建目录-

samba 服务端口 samba服务器工作流程_linux_33

Ⅳ.linux客户端使用mount命令挂载共享目录

格式:mount -t cifs //目标IP地址或主机名/共享目录名称 挂载点 -o username=用户名

samba 服务端口 samba服务器工作流程_服务器_34

[root@localhost ~]# mkdir -p /testdir/samdata         //递归创建目录,挂载点

 [root@localhost ~]# mount -t cifs //192.168.80.128/sales /testdir/samdata/ -o username=sales1

 Password for sales1@//192.168.80.128/sales:  ******  //输入sales1密码

 [root@localhost ~]# cd /testdir/samdata/

 [root@localhost samdata]# ls