一、Samba服务概述

在Windows网络环境中、机之间进行文件打印和共享是通过微软自己的SMB/CIFS协议来实现的、SMB(服务消息块)和CIFS(通用互联网文件系统)这两个都是微软的私有协议

而Samba它在Linux中实现了微软的SMB/CIFS网络协议、从而使得跨平台的文件共享变得更加容易、SMB也是基于C/S架构的、所以它既可以充当文件共享服务器、也可以充当客户端

1)Samba软件包组成

在CentOS7中可以找到几个关于Samba的软件包、默认已经安装了客户端 samba-client和服务端samba

[root@node1 ~]# rpm -qa | grep samba
samba-client-libs-4.7.1-6.el7.x86_64		#客户端软件
samba-common-libs-4.7.1-6.el7.x86_64		#所需要的库
samba-common-4.7.1-6.el7.noarch				#提供服务端与客户端程序的公共组件

2)Samba程序组件

Samba服务提供smbd、nmbd两个服务程序、它们分别完成不同的功能

smbd:负责为客户端提供服务器中共享资源的访问
nmbd:负责提供基于NetBIOS协议的主机名称解析

安装好samba软件之后、系统会自动添加名为smb和nmb的标准系统服务、使用netstat 可查看监听端口

smbd负责监听TCP协议的139端口(SMB协议)、445端口(CIFS协议)、nmbd负责监听UDP协议的137-138端口(NetBIOS)

二、Samba部署及配置文件说明

1)Samba部署

提示:安装Samba时我们可以使用yum的方式来安装、同时也可以去官网下载最新的源码包来进行安装

[root@node1 ~]# yum -y install samba*
[root@node1 ~]# systemctl enable smb
[root@node1 ~]# systemctl enable nmb
[root@node1 ~]# systemctl start smb
[root@node1 ~]# systemctl start nmb
tcp        0      0 0.0.0.0:445             0.0.0.0:*                  1861/smbd
tcp        0      0 0.0.0.0:139             0.0.0.0:*                  1861/smbd
udp        0      0 0.0.0.0:137             0.0.0.0:*                  1873/nmbd
udp        0      0 0.0.0.0:138             0.0.0.0:*                  1873/nmbd

2)Samba配置文件说明

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

其中以#号打头的为注释、以;号打头的为配置样例、Samba的配置文件主要分为三个部分、如下所示:  

[global]全局设置:		#此配置项对整个Samba服务器都有效
[homes]宿主共享设置:	  #设置用户的默认共享 对应用户宿主目录
[printers]打印机共享:   #如果我们需要共享打印机设备、可在此项设置

3)Samba的常见配置项说明

workgroup:				#设置工作组名称
server string:			#设置服务器介绍信息
comment:				#设置共享目录说明信息
path:					 #设置共享目录的位置
browseable:				 #设置网上邻居是否课件
guest ok:				#是否所有人可以访问共享目录 与public作用相同
writable:				 #是否所有人可以写入、与 read only 配置项作用相反
max log size = 60:		#定义日志的最大容量为60KB
passwd backend:		    #共享账户文件类型、默认使用tdbsam
log file = path/log.%m: #设置日志文件的位置 %.m 表示客户端的IP
security:				#设置Samba的安全验证方式 可设置为:user、share、server、domain
              share:	可匿名访问
		                  user:	由本地服务器验证用户名及密码
              domain:由域控制器来验证用户名和密码
		              server:指定另一台服务器来验证用户名及密码

三、构建文件共享服务器

1)部署可匿名访问的共享

提示:设置匿名共享文件夹需要在主配置文件调整两个地方:

其一:添加一段共享目录

其二:到全局配置项中添加 map to guest = Bad user 以允许匿名访问

1、创建共享目录并定义配置文件

如下所示、我们设置共享目录的路径为:/var/share 然后允许匿名访问

[root@node1 ~]# mkdir /var/share
[root@node1 ~]# vim /etc/samba/smb.conf
[global]
        workgroup = SAMBA
        security = user
        passdb backend = tdbsam
        printing = cups
        printcap name = cups
        load printers = yes
        cups options = raw
        map to guest = Bad user
[test]
        comment = test file			#说明
        path = /var/share			#路径
        public = yes				#允许所有访问
        read only = yes				#设置为只读

提示:配置好之后我们可以使用 testparm工具来检查配置文件是否有错误、如果有则会给出相应的提示  

提示:最后只需重启服务即可:systemctl restart smb nmb

2、验证可匿名访问的共享

如下所示访问成功

接下来我们可以看到、不能上传文件至服务器、只能下载文件

匿名用户我们一般也不会给写入权限、如果要写入权限、则设置UGO权限然后再添加 writable = yes 即可

2)部署需用户验证的共享

1、建立Samba用户数据库

提示:创建账号的时候必须有与它同名的系统用户、以便主机对共享访问的读写权限进行控制、但是密码不需要

常用的命令如下所示:

pdbedit -a 用户:		#添加用户
pdbedit -x -u 用户:	#删除用户
pdbedit -L:			#列出所有用户
pdbedit -vL 用户:		#列出单个用户并输出详细信息

如下所示我将创建两个用户分别为:test01和test02

[root@node1 ~]# useradd test01
[root@node1 ~]# useradd test02
[root@node1 ~]# pdbedit -a test01		#根据提示设置对应的密码
[root@node1 ~]# pdbedit -a test02
[root@node1 ~]# pdbedit -L
test01:1001:
test02:1002:

2、设置用户访问授权

共享目录的用户授权主要由:valid user、write list 配置项指定、前者为谁可以访问、后者为谁可以写

当我们需要授权多个用户的时候可以使用逗号或者空格分隔、如果要授权一个用户组则使用 @组名的形式来设置

如下所示:我将允许 test01和02可以访问 但只允许test01写

[test]
        comment = test file
        path = /var/share
        public = no
        valid users = test01,test02
        write list =  test01

注意:用户最终是否拥有读写权限、除了设置用户授权以外、还需设置本地文件夹的权限、即UGO 如下所示:

[root@node1 ~]# ll -lh /var/ | grep share				#查看权限
drwxr-xr-x   2 root root  145 4月  28 11:18 share
[root@node1 ~]# chmod 757 /var/share/					#设置权限
[root@node1 ~]# ll -lh /var/ | grep share
drwxr-xrw-   2 root root  145 4月  28 11:18 share		#确认权限

另外当用户上传文件的时候、对于用户所上传的文件以及子目录的默认授权、可分别使用如下配置项指定

directory mask = 0755		#表示上传目录的权限为0755
create mask = 0644			#表示上传文件的权限为0644

3、验证需用户访问的共享

(1)验证test01用户、查看是否能读取和写入

通过下图我们可以看到、test01可以上传文件至服务器

(2)验证test02用户、查看是否能读取和写入

登录进来之后、通过下图我们可以看到、test02的权限 为读不能写

四、共享用户映射及访问地址限制

提示:为了进一步提高Samba的安全性、除了设置用户授权以外我们还可以采取用户映射和访问地址限制等措施

1)共享用户映射

提示:所谓的映射也就是别名、别名设置完以后我们可以通过别名登录、从而降低了账号密码泄露的风险

别名的设置格式为:共享用户名 = 别名1 别名2

CentOS7中默认没有那个配置文件、我们需要在/etc/samba/目录下新建一个、即smbusers然后设置别名即可、如下所示:

[root@node1 ~]# touch /etc/samba/smbusers
[root@node1 ~]# vim  /etc/samba/smbusers
test01 = benet
test02 = accp

以上的配置添加完成以后还需要在主配置文件的全局选项里添加如下配置项、这样方能生效、如下所示:

[root@node1 ~]# vim /etc/samba/smb.conf
[global]
username map = /etc/samba/smbusers

最后即可通过 benet 或者 accp 登录了、因为操作已经完成、如下所示我们使用benet登录、可以看见登录成功、因为它的真实用户名是test01、所以它具有读写权限、如下所示:

2)访问地址限制

访问限制我们可通过 host allow 以及 host deny 配置项来进行访问限制、前者用于指定仅允许访问共享的客户机地址、后者用于指定仅拒绝访问共享的客户机地址

访问限制一般用于global部门、也可用于某个具体的共享配置段部分 限制的对象可以是:IP、网络地址

配置的格式为:hosts allow = IP

如下所示:限制客户机地址为 192.168.3.12的、不准访问我的服务器、如果允许则将deng 改为 allow 即可

hosts deny = 192.168.3.12

这个时候我们再去访问一下、就会如下图所示:

五、Linux平台访问共享目录

1)直接访问共享目录

1、查询目标主机的共享资源列表

提示:通过下图我们可以看到、目标主机共享的目录标识为 test

2、登录并访问共享目录

登录的格式为:smbclient  //IP/共享名 	#注意 这是匿名访问
如果是登录需要用户验证的访问共享则为:smbclient  -U 用户名  //IP/共享名

如下所示我们直接使用 benet这个别名登录 、登录成功之后则会出现如下图所示的交互页面

同时我们也可以在服务器上看有谁在线、如下所示: 对应的命令为 smbstatus

3、上传与下载文件

get和mget:#下载文件	后者为下载大文件
put和mput:#上传文件	后者为上传大文件

如果要用其他命令、可在交互式页面输入 help 查看在线帮助信息

如下所示:我们下载一个openvpn文件、然后上传一个 pass.txt文件

smb: \> mget openvpn-install-2.3.10-I601-x86_64.exe
smb: \> mput pass.txt

如下所示:下载成功

如下所示:上传成功  

2)挂载共享目录至本地

为何要挂载?smbclient不是用的好好地吗?

如果不挂载我们只有将文件下载下来之后才能查看、如果是使用 mount工具挂载、那就相当于访问本地目录一样

挂载的命令格式为:mount  -o  username=用户  //IP地址/共享名  /挂载点

挂载之前先安装软件包、不然会报错:yum -y install cifs-utils、这个软件包有些系统已经自带

[root@node2 ~]# mount -o username=benet //192.168.3.11/test /study		#将共享挂载至study
Password for benet@//192.168.3.11/test:  *******
[root@node2 ~]# df -hT | tail -1										#查看挂载结果
//192.168.3.11/test     cifs       17G  4.0G   14G   24% /study
[root@node2 ~]# echo "//192.168.3.11/test /study cifs defaults 0 0" >> /etc/fstab 	#开机自动挂载
[root@node2 ~]# mount -a
[root@node2 ~]# tail -1 /etc/fstab
//192.168.3.11/test /study cifs defaults 0 0

最后我们直接进入 study目录即可访问相应的文件、如下所示:

【只是为了打发时间】

文件共享服务之Samba的更多相关文章

  1. Linux文件共享服务之Samba

    目录 Samba Samba的配置 Samba Samba是一个能让Linux系统应用Microsoft网络通讯协议的软件,而SMB是Server Message Block的缩写,即为服务器消息块 ...

  2. CentOS6.5下搭建文件共享服务(Samba)

    Samba服务: 本内容为samba服务学习者提供参考 案例描述: 某公司的管理员需要搭建SAMBA服务器,IP地址及允许的访问网段自定义.SAMBA服务器的安全级别为user级,所在工作组为WORK ...

  3. Linux文件共享服务之Vsftp

    目录 FTP Vsftp服务的搭建 ftp.sftp.vsftp.vsftpd的区别 FTP FTP的工作原理: FTP会话时包含了两个通道,一个叫控制通道,一个叫数据通道.控制通道是和FTP服务器进 ...

  4. Linux文件共享服务之NFS

    NFS(Network File System) 网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络共享资源.在NFS的应用中,本地NFS的客户端应用可 ...

  5. Samba文件共享服务

    Samba起源: 早期网络想要在不同主机之间共享文件大多要用FTP协议来传输,但FTP协议仅能做到传输文件却不能直接修改对方主机的资料数据,这样确实不太方便,于是便出现了NFS开源文件共享程序:NFS ...

  6. samba文件共享服务的配置

    samba文件共享服务的配置 服务端配置 一.安装samba软件包 命令:yum -y install samba 查看是否安装samba. [root@Centos7-Server haha]# [ ...

  7. Linux基础学习-Samba文件共享服务

    使用Samba文件共享服务 Samba起源: 早期网络想要在不同主机之间共享文件大多要用FTP协议来传输,但FTP协议仅能做到传输文件却不能直接修改对方主机的资料数据,这样确实不太方便,于是便出现了N ...

  8. Samba搭建Linux和Windows文件共享服务

    一.Samba简介 Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成.SMB(Server Messages Block,信息服务块)是一种在局域网上共享 ...

  9. nfs samba文件共享服务

    (注意:实验之前强关闭selinux和防火墙) 一丶nfs ① 1.服务端 启动服务 systemctl start nfs.service   配置文件 vim /etc/exports share ...

随机推荐

  1. Linux下Docker的安装与使用

    yum安装Docker最新版和docker-compose(超级简单的安装方法) Install Docker 首先安装依赖 yum install -y yum-utils device-mappe ...

  2. iOS多线程编程原理及实践

    摘要:iOS开发中,开发者不仅要做好iOS的内存管理,而且如果你的iOS涉及多线程,那你也必须了解iOS编程中对多线程的限制,iOS主线程的堆栈大小为1M,其它线程均为512KB,且这个限制开发者是无 ...

  3. scalikeJDBC的restapi

    ScalikeJDBC是一个Scala的JDBC框架,适用于绝大多数RDBMS数据库(关系数据库) 重要的是,在这几天简单的使用了一下,用sqlserver来测试了一下用mysql或者h2的scali ...

  4. Java 使用Scanner时的NoSuchElementException异常

    做实验时设计了一个类,在类中的两个不同函数中分别创建了两个Scanner对象,并且在各个函数的结尾使用了close()方法,结果在运行时产生了NoSuchElementException异常. 实验的 ...

  5. poj 2689 区间素数筛

    The branch of mathematics called number theory is about properties of numbers. One of the areas that ...

  6. CentOS 7.2 搭建Jenkins

    1,准备阶段 jenkins下载 https://jenkins.io/download/ 这里我们选择稳定版本 (本文介绍的是通过tomcat来部署的,由于jenkins内部也集成了容器,也可直接通 ...

  7. pyhton 线程锁

    问题:已经有了全局解释器锁为什么还需要锁? 答:全局解释器锁是在Cpython解释器下,同一时刻,多个线程只能有一个线程被cpu调度 它是在线程和cpu之间加锁,线程和cpu之间有传递时间,即使有GI ...

  8. C语言进阶——结构体,联合,枚举

    ----------------------------------------------------------我是一条划分线----------------------------------- ...

  9. SuperSocket Code解析

    SuperSocket1.6Code解析 Normal Socket System.Net.Sockets.dll程序集中使用socket类: 服务器: 创建socket:_socket = new ...

  10. java小心机(3)| 浅析finalize()

    每天进步一丢丢,连接梦与想 如果你停止就是谷底,如果你还在努力就是上坡 系列文章 java"小心机"(1)[资源彩蛋!] java小心机(2)| 重载和构造器的小细节 预备知识 J ...