【配置与管理Samba服务器1】

前言

现在公司需要进行一个开发项目,需要使用Linux主机和Windows主机的用户一起完成,因此需要架设一台文件服务器来实现不同操作系统类型的终端之间资源共享。

一、认识Samba

1. Samba应用环境

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

2. SMB协议

Samba服务功能强大,其通信主要基于SMB协议,SMB协议不仅提供目录和打印机共享,还支持认证、权限设置。
(1)把Linux系统下的文件共享给Windows系统,在Linux系统下访问Windows系统的共享文件;
(2)把Linux系统下安装的打印机共享给Windows系统使用,在Linux系统下访问Windows系统的共享打印机。

Samba有两种服务
(1)nmbd服务,监听137和138UDP端口。
该服务使其他计算机可以浏览Linux服务器,其功能是进行NetBIOS名解析,并提供浏览服务,显示网络上的共享资源列表。
(2)smbd服务,监听139TCP端口。
该服务主要功能是用来管理Samba服务器上的共享目录、打印机等,主要是针对网络上的共享资源进行管理的服务。当要访问服务器时,要查找共享文件,这时需要需要smbd来管理数据传输。

3. Samba工作原理

Samba采用客户端/服务器端架构模式。当客户端访问服务器时,信息通过SMB协议进行传输,其工作过程可以分为4个步骤。
(1)协议协商
客户端client访问samba服务器,先发送negprot指令数据包,告知samba其支持SMB类型,samba选择最优的SMB 类型并回应。
在这里插入图片描述

(2)建立连接
Client发送session setup指令数据包,提交账号和密码,请求与samba连接,若通过验证,samba做出回应,并分配唯一的UID与client通信。
在这里插入图片描述

(3)访问共享资源
Client访问samba共享时,发送tree connect指令数据包,通知samba需要访问的共享资源名,若允许,samba会为client与共享资源连接分配TID,client就可以访问共享资源。
在这里插入图片描述

(4)断开连接
共享使用完,client向samba发送tree disconnect关闭共享,与samba断开连接。
在这里插入图片描述

二、配置Samba服务

1.安装并启动Samba服务

#检查系统是否安装了samba相关性软件包
rpm -qa |grep samba
#如果没有安装,接下来进行安装
[root@RHEL7-1 ~] mkdir /iso
[root@RHEL7-1 ~] mount /dev/cdrom /iso
mount: /dev/sr0 is write-protected, mounting read-only
# 制作用于安装的yum源文件,dvd.repo文件的内容如下
# /etc/yum.repos.d/dvd.repo 
# or for ONLY the media repo, do this: 
# yum --disablerepo=\* --enablerepo=c6-media [command] 
[dvd] 
name=dvd 
baseurl=file:///iso              //特别注意本地源文件的表示,3个“/”
gpgcheck=0 
enabled=1 

# 使用yum命令查看samba软件包的信息
[root@RHEL7-1 ~]  yum  info samba

# 使用yum命令安装samba服务。
[root@RHEL7-1 ~]  yum clean all 					//安装前先清除缓存
[root@RHEL7-1 ~]  yum  install  samba  -y

# 所有软件包安装完毕,可以使用rpm命令再一次进行查询:
[root@RHEL7-1 ~]  rpm -qa | grep samba

samba-common-tools-4.6.2-8.el7.x86_64
samba-common-4.6.2-8.el7.noarch
samba-common-libs-4.6.2-8.el7.x86_64
samba-client-libs-4.6.2-8.el7.x86_64
samba-libs-4.6.2-8.el7.x86_64
samba-4.6.2-8.el7.x86_64

# 启动与停止samba服务,设置开机启动。
[root@RHEL7-1 ~]  systemctl start smb 
[root@RHEL7-1 ~]  systemctl enable smb 
Created symlink from /etc/systemd/system/multi-user.target.wants/smb.service
 to /usr/lib/systemd/system/smb.service.

[root@RHEL7-1 ~]  systemctl restart smb //重新加载服务
[root@RHEL7-1 ~]  systemctl reload smb //重新加载配置文件

注意:在Linux中,更改了配置文件后,一定要记得重启服务,让服务重新加载配置文件,这样新的配置才可以生效。(start/restart/reload)

2.Samba服务器搭建流程

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

3.Samba工作流程

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

4.主配置文件smb.conf

在/etc/samba目录中,主配置文件名为smb.conf。在该目录中还有一个配置文件为smb.conf.example,该文件包括更加详细的配置信息,RHEL7的smb.conf配置文件已经简化,同时Samba开发组按照功能的不同,对smb.conf文件进行了分段划分。
global为全局配置
在这里插入图片描述

homes为共享信息配置
在这里插入图片描述

5.日志文件

可以存储客户访问Samba服务器的信息以及错误的提示,通过日志可以帮忙解决客户端访问和维护的问题。
在/etc/samba/smb.conf文件中,log file为设置samba日志的字段。如下所示:
log file = /var/log/samba/log.%m

6.密码文件

Samba服务器发布共享资源后,客户端访问Samba服务器,需要提交用户名和密码进行身份验证,验证通过后才能登录。Samba服务在验证客户身份,需要访问/etc/samba/smbpasswd文件,该文件包括用户的用户名和密码信息,当客户端访问的时候,需要将用户提交的信息与该文件中的信息作比对,通过后才允许访问。
建立Samba账号之前需要先建立Linux同名的系统账号。

# 建立Linux系统账号reading
[root@RHEL7-1 ~]  useradd  reading
[root@RHEL7-1 ~]  passwd  reading
#添加reading用户的samba账户
[root@RHEL7-1 ~]  smbpasswd  -a  reading

三、Samba服务器实例

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

首先,模拟三台主机,分别为一台Samba共享服务器,两台客户端分别为linux系统和windows系统,配置IP地址为同一网段,网络连接方式为VMnet1(仅主机模式)

主机名称操作系统IP地址网络连接方式
Samba共享服务器:RHEL7-1RHEL7192.168.10.1VMnet1
Linux客户端:RHEL7-2RHEL7192.168.10.20VMnet1
windows客户端windows7192.168.10.30VMnet1

1.建立共享目录

mkdir /companydata
mkdir /companydata/sales
touch /companydata/sales/test_share.tar

2.添加账户

添加一个sales组,创建两个销售组账户sale1和sale2并加入到sales组中。同时,为销售部成员添加相应的Samba账号。
为了方便测试,这里单独创建一个测试用户test_user,该用户不加入到sales组,并且不设置相应的Samba账号。

groupadd sales
useradd -g sales sale1
useradd -g sales sale2
useradd test_user1
passwd sale1
passwd sale2
passwd test_user1

#为销售部成员sale1和sale2添加相应Samba账号
smbpasswd -a sale1
smbpasswd -a sale2

3. 修改主配置文件smb.conf

# 配置共享参数部分
[sales]
	comment=sales
	path=/companydata/sales #共享文件的绝对路径
	writable=yes #读写
	browseable=yes #可浏览
	valid users=@sales  #设置可以访问的用户为sales组

4.设置共享目录的本地权限

在第三个步骤中,已经为共享目录设置了共享权限为读写,这里主要是为了验证共享目录的权限配置情况,因此对于本地权限来说,设置最大的权限777,并且将文件所属组也设置为sales。
注意:Samba服务器在将本地文件系统共享给Samba客户端时,涉及本地文件系统权限和Samba共享权限。当客户端访问共享资源时,最终的权限取这两种权限中最严格的。

chmod 777 /companydata/sales -R
chown :sales /companydata/sales -R

5.设置SELinux

SELinux一共有三种模式,分别为:
Enforcing:强制模式。违反SELinux规则的行为将被阻止并记录到日志中。
Permissive:宽容模式。违反SELinux规则的行为只会被记录到日志中。
Disabled:关闭SELinux。

#查看当前SELinux模式
getenforce
-->Enforcing # 为强制模式
#修改SELinux为宽容模式
setenforce Permissive

6.让防火墙放行

将Samba加入到防火墙的允许服务

firewall-cmd --permanent --add-service=samba
-->success
firewall-cmd –reload		#重新加载防火墙
firewall-cmd --list-all  #查看
-->
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens33
  sources: 
  services: ssh dhcpv6-client samba	#已经加入到防火墙的允许服务
  ports: 
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules:

7.重新加载Samba服务

restart和reload都可以,restart是对整个Samba服务重启,reload是重新记载配置文件。

systemctl restart smb
#或者
systemctl reload smb

8.windows客户端测试

打开“文件资源管理器”,在路径中输入\192.168.10.1,等一会弹出对话框,输入对应的Samba用户名和密码,验证通过后,即可访问共享资源。

9.Linux客户端测试

在Linux客户端进行测试时,需要先安装两个包:一个是跟客户端相关的samba-client包,另一个是跟挂载相关的cifs-utils包。

mkdir /iso
mount /dev/cdrom /iso
-->mount: /dev/sr0 is write-protected, mounting read-only
vim  /etc/yum.repos.d/dvd.repo 
yum install samba-client -y 
yum install cifs-utils -y

(1)Linux客户端使用smbclient命令访问服务器
① smbclient列出目标主机共享目录列表。
其格式为:

smbclient -L 目标IP地址或主机名 -U 登录用户名%密码

当查看RHEL7-1(192.168.10.1)主机的共享目录列表时,提示输入密码,这时候可以不输入密码,而直接按“Enter”键,这样表示匿名登录,然后就会显示匿名用户可以看到的共享目录列表。

smbclient  -L  192.168.10.1

若想使用samba账号查看samba服务器端共享的目录,可以加上-U参数,后面跟上用户名%密码。下面的命令显示只有sale2账号(其密码为123456)才有权限浏览和访问的sales共享目录。

smbclient  -L  192.168.10.1  -U  sale2%12345678

② 还可以使用smbclient命令行共享访问模式,浏览共享的资料。
其格式为:

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

[root@rhel7-2 ~] smbclient  //192.168.10.1/sales  -U  sale2%12345678
Domain=[RHEL7-1] OS=[Windows 6.1] Server=[Samba 4.6.2]
smb: \> ls
  .                         D        0  Mon Jul 16 21:14:52 2018
  ..                        D        0  Mon Jul 16 18:38:40 2018
  test_share.tar            A        0  Mon Jul 16 18:39:03 2018
 9754624 blocks of size 1024. 9647416 blocks available
smb: \> mkdir testdir			//新建一个目录进行测试
smb: \> ls 
  .                          D        0  Mon Jul 16 21:15:13 2018
  ..                         D        0  Mon Jul 16 18:38:40 2018
  test_share.tar             A        0  Mon Jul 16 18:39:03 2018
  testdir                    D        0  Mon Jul 16 21:15:13 2018
 9754624 blocks of size 1024. 9647416 blocks available
smb: \> exit

(2)Linux客户端使用mount命令挂载共享目录
其格式为:

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

挂载192.168.10.1主机上的共享目录sales到/mnt/sambadata目录下,cifs是samba所使用的文件系统。

[root@RHEL7-2~] mkdir -p /mnt/sambadata #首先需要创建挂载点目录
[root@rhel7-2 sambadata] mount -t cifs //192.168.10.1/sales /mnt/sambadata/ -o username=sale1

Password for sale1@//192.168.10.1/sales:  ******** 
//输入sale1的samba用户密码,不是系统用户密码

[root@rhel7-2 sambadata] cd /mnt/sambadata
[root@rhel7-2 sambadata] ls

testdir  test_share.tar

总结

配置与测试Samba服务器主要有以下几个步骤:
1.设备准备
服务端:一台Samba服务器(Linux系统)
客户端:一台Linux系统主机,一台Windows系统主机。
2.建立目录和用户等
建立共享目录;
建立用户或组,并且添加为Samba用户。
3.修改主配置文件smb.conf
在配置之前,先做备份。
主要配置global全局信息和建立共享信息字段。
4.设置共享目录的本地权限
5.禁掉SELinux和关闭防火墙
6.重新加载Samba服务
7.Windows客户端测试
8.Linux客户端测试

smbclient命令访问
或挂载访问

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值