Samba最先在Linux和Windows两个平台之间架起了一座桥梁,正是由于Samba的出现,我们可以在Linux系统和Windows系统之间互相通信,比如拷贝文件,实现不同操作系统之间的资源共享等等,我们可以将其架设成一个功能非常强大的文件服务器,也可以将其架设成打印服务器提供本地和远程联机打印。
文件和打印机共享:文件和打印机共享是Samba的主要功能,SMB进程实现资源共享,将文件和打印机发布到网络之中,以供用户可以访问。
身份验证和权限设置:smbd 服务支持user mode和domain mode等身份验证和权限设置模式,通过加密方式可以保护共享的文件和打印机。
名称解析:Samba通过nmbd服务可以搭建NBNS(netBIOS Name Service)服务器,提供名称解析,将计算机的NetBIOS名解析为IP地址。
浏览服务:局域网中,Samba服务器可以成为本地主浏览服务器(LMB),保存可用资源列表,当使用客户端访问Windows网上邻居是,会提供浏览列表,并显示共享目录,打印机等资源。
**端口号:**139和445
在早期,SMB 运行在NBT协议(NetBIOS over TCP/IP)上,使用UDP协议的137、138及TCP协议的139端口
NETBIOS协议
NetBIOS是Network Basic Input/Output System的建成,网络基本输入/输出系统协议一般只用于局域网通信的一套API,是由IBM公司开发的。与要勇于:通过NETBIOS协议获得计算机名称然后把计算机名解析成对应的IP地址。
模式:C/S模式(客户端/服务器)
安装Samba:
[root@localhost ~]# yum install samba
启动Samba服务:
[root@localhost ~]# service smb start
查看是否启动成功:
[root@localhost ~]# service smb status
修改配置文件,举例:
配置文件位置:
/etc/samba/smb.conf.example 或 /etc/samba/smb.conf
Samba常规服务器配置
基本 Samba服务器的搭建流程主要分为四个步骤:
smb.conf大致分为三个部分
1.samba配置简介
smb.conf文件的开头部分为samba配置简介,告诉我们smb.conf文件的作用及相关信息。
smb.comf中还有以分号";"开头,这些都是samba配置的格式范例,默认是不生效的
去掉前面的";"并加以修改来设置其参数。
注:"#"也是表示注释
2.Global Settings
Global Settings设置为全局变量区域。全局变量就是说我们只要在global中进行设置,那么该设置项就是针对所有共享资源生效。
格式:字段=设定值
[global]常用字段及设置方法:
1)设置samba服务器所在工作组或域名
workgroup = test #工作组
2)服务器描述,服务器描述实际上类似于备注信息
server string = test Samba Server
3)设置samba服务器安全模式。常见模式有两种:share安全级别模式和user安全级别模式
(1)share安全级别模式
客户端登录samba服务器,不需要输入用户名和密码就可以浏览samba服务器的资源,适用于公共的共享资源,安全性差,需要配合其他权限设置,保证samba服务器的安全性
(2)user安全级别模式
客户端登录samba服务器,需要提交合法账号和密码,经过服务器验证才可以访问共享组员,服务器默认为此级别模式
3.Share Definitions共享服务的定义
[homes]为特殊共享目录,表示用户主目录。
[share] #设置共享名 其中“share”可以替换为自己的名称
comment = Home Directories #描述
browseable = yes #是否允许查看共享内容。若为否,后期通过绝对路径可查看到。
path = /share #共享路径,写绝对路径
public = yes #允许匿名查看
1)设置共享名
共享资源发布后,必须为每个共享目录或打印机设置不同的共享名,给网络用户访问时使用,并且共享名可以与原目录名不同。
2)共享资源描述
格式:comment = 备注信息
举个例子:samba 服务器上有个/sales 目录存放恭喜销售部的数据,为了对公司部门员工进行区分,可以添加备注信息
3)共享路径
共享资源的原始完整路径
格式:path = 绝对地址路径
samba服务器上/share/tools目录存放常用工具软件,需要发布该目录为共享。
4)设置匿名访问
共享资源如果对匿名访问进行设置,可以更改public字段
格式:
public = yes #允许匿名访问
public = no #禁止匿名访问
5)设置访问用户
如果共享资源存在重要数据的话,需要对访问用户审核,我们可以使用valid users字段进行设置。
格式:
valid users = 用户名
valid users = @组名
6)设置目录只读
共享目录如果限制用户的读写操作,我们可以通过readonly实现
格式:
readonly = yes #只读
readonly = no #读写
7)设置目录可写
如果共享目录允许用户写操作,可以使用writable 或 write list两个字段进行设置
writable 格式:
writable = yes #读写
wirtable = no #只读
write list 格式:
write list = 用户名
write list = @组名
Samba 服务日志文件
在/etc/samba/smb.conf.example文件中,log file为设置samba日志的字段。
1.创建共享目录
[root@localhost ~]# mkdir /share
[root@localhost ~]# cp /etc/passwd /share
2.修改配置文件
vim /etc/samba/smb.conf.example
[global]
workgroup = test
server string = test Samba Server
security = share(匿名共享)
在配置文件的最后面设置
[public] #设置共享名
comment = test Data #描述信息
path = /share #设置共享路径,要写绝对路径
public = yes #允许匿名查看
重启smb服务
[root@localhost ~]# server smb restart
测试:
在电脑文件夹的地址栏中输入linux的 “\\+IP” 地址并回车
同理,在浏览器中输入 “\\+IP” 地址并回车,也可以访问到smb服务器
可以访问smb服务器的文件,但是没有权限进行创建文件。
通过用户名和密码共享文件,只有知道用户名与密码的用户可以查看此共享文件夹。我们需要在全局设置中将security设置为user 安全级别,这样就启用了samba服务器的身份验证机制,然后再共享目录下设置valid user字段,配置只允许某些人可以访问这个共享目录。
注意:一定要先制定存放密码的文件位置:
1)修改samba主配置文件 smb.conf.example
改: passdb backend = tbdsam
为: passdb backend = smbpasswd
smb passwd file = /etc/samba/smbpasswd
重启samba服务
[root@localhost ~]# server smb restart
2)添加用户和组并添加相应samba账号
使用groupadd命令添加组,然后执行useradd命令和passwd命令添加用户和密码
[root@localhost ~]# groupadd testgroup
[root@localhost ~]# useradd -g testgroup test01
[root@localhost ~]# useradd -g testgroup test02
接下来为组成员添加相应的samba账号
[root@localhost ~]# smbpasswd -a test01
New SMB password:123456
Retype new SMB passowrd:123456
[root@localhost ~]# smbpasswd -a test02
New SMB password:123456
Retype new SMB passowrd:123456
查看组成员是否添加成功:
[root@localhost ~]# cat /etc/samba/smbpasswd
test01:500:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:32ED87BDB5FDC5E9CBA88547376818D4:[U ]:LCT-56FBDA3D:
test02:501:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:32ED87BDB5FDC5E9CBA88547376818D4:[U ]:LCT-56FBDA4F:
创建共享目录:
[root@localhost ~]# mkdir /test
[root@localhost ~]# cp/etc/hosts /test/
修改配置文件,指定共享目录,设置访问权限
[test] #设置共享目录的共享名为test
comment = test Data
path = /test #设置共享目录的绝对路径为/test
valid users = @test #设置允许访问的用户为test组内的用户
重启服务
[root@localhost ~]# server smb restart
访问samba服务器:
打开文件夹在地址栏中输入"\\+ip地址"并且回车,此时会弹出一个输入用户名与密码的窗口。
输入用户名与密码,点击“确定”按钮即可访问smb服务器。
注意:当想要通过另一个用户名访问samba服务器时,可以再cmd窗口中使用net use查看,已连接的用户,使用net use* /delete命令删除当前已连接的用户
1.隐藏共享目录
browseable = no
这用用户访问共享目录后看不到对应目录,需要写入目录的绝对URL进行访问。
2.控制访问源
hosts allow 和 hosts deny字段的使用
hosts allow 字段定义允许访问的客户端
hosts deny 字段定义禁止访问的客户端
举例:
如果公司现在要求共享目录test 只允许192.168.1.0/24 网段的主机访问,同时禁止192.168.1.3 IP地址的访问
hosts allow = 192.168.1. #允许192.168.1.0/24网段访问
hosts deny = 192.168.1.3 #进制192.168.1.3主机访问
注:
当hosts allow 和hosts deny同时设置是,hosts allow 生效,如果这样的话,上面的这两项设置192.168.1.3就是不生效的,对于这种情况,可以使用EXCEPT进行排除
hosts allow = 192.168.1. EXPECT 192.168.1.3
3.控制写入权限
writeable = yes #允许授权用户写入
write list = test01#允许单个用户写入
4.用户账号映射
前面说,samba的账号是保存在smbpasswd文件中,并且可以访问samba服务气的账号也必须对用一个同名的系统账号,基于这一点,对于某些黑客来说,只要知道samba服务器的账号,就等于知道了Linux系统账号,只要破解samba账号加以利用就可以共计samba服务器。所以我们要是用用户账号映射这个功能来解决这个问题
用户账号映射这个功能需要建立一个账号映射关系表,里面记录了samba账号和虚拟账号的对应关系,客户端访问samba服务器时就是用虚拟账户来登录
1)编辑主配置文件/etc/samba/smb.conf.example
在[global]下添加一行字段username map = /etc/samba/smbusers开启账号映射功能
创建samba用户
[root@localhost ~]# useradd rm
[root@localhost ~]# smbpasswd -a rm
2)编辑/etc/samba/smbusers
smbusers文件保存账号映射关系,具有固定格式:
samba 账号 = 虚拟账号(映射账号)
[root@localhost ~]# vim /etc/samba/smbusers
#Linux_name = SMB_name1 SMB_name2…
root = adminstrator admin
nobody = guest pcguest smbguest
rm = zxj jingyu
~
账号rm就是我们创建的samba账号(同时也是linux系统账号),zxj及jingyu就是映射的账号名(虚拟账号),账号rm在我们访问共享目录是只要输入zxj或jinyu就可以成功访问了,但是实际上访问samba服务器的还是我们的rm账号,这样一来就解决了安全问题。
3)重启samba服务:service smb restart
4)测试一下
输入我们自定义的映射账号zxj,不需要输入rm,映射账号zxj密码和rm账号一样,访问成功后显示的也是rm目录的共享内容。
现在就可以通过映射账号浏览共享目录了
注意:强烈建议不要将samba用户的密码和本地系统用户的密码设置成一样,可以避免非法用户使用samba账号登录系统非法破坏。
笔记原视频:https://www.bilibili.com/video/BV1GW411j7TG