第四章 samba服务
4.1 samba简介
在上一章中,我们讨论了NFS,它可以实现Linux系统之间的文件共享。我们知道Windows系统之间也有共享功能,但要实现Linux与Windows之间的文件和打印机共享,就需要借助Samba服务。
SMB(Server Message Block)协议,也被称为Session Message Block协议、NetBIOS协议或LanManager协议,主要用于在微软的Windows操作系统之间共享文件和打印机。Samba是一组程序套件,利用SMB协议在Linux和Windows之间实现文件和打印机共享。
通过Samba,可以实现以下功能:
- 将Linux系统的文件共享给Windows系统
- 在Linux系统上访问Windows系统的共享文件
- 将Linux系统上的打印机共享给Windows系统使用
- 在Linux系统上访问Windows系统的共享打印机
Samba服务使用与Windows共享相同的通信端口,即TCP的139和445端口。此外,Samba还通过RPC服务的111端口与客户端通信。
本章将重点介绍Linux与Windows之间共享资源的互访操作。在客户端访问共享时,无论客户端使用何种操作系统,为了安全起见,都需要使用服务器端的有效用户登录后才能访问共享资源。因此,可以针对不同的共享目录设置不同的权限。下面我们将通过具体的实验操作来详细说明。
注意:本实验使用Windows 2003作为Windows端的实验对象,因为其共享操作过程相对简单,易于实现实验效果。其他如Windows 2008、2012、7、10等版本,由于安全性要求较高,配置共享较为复杂。我们本章主要介绍Linux中Samba服务的功能,因此选择Windows 2003以便更好地展示实验效果。
4.2 Windows访问Linux共享
4.2.1 Linux中Samba设置共享
首先,我们需要在Linux中安装Samba软件包。与NFS类似,CentOS的安装光盘中自带Samba的软件包,可以通过配置yum源来安装Samba:
这三个包分别是Samba的主程序包、共享功能包和Linux作为客户端访问Windows时的客户端包。
下面介绍实验环境:
使用两台主机,一台Windows 2003服务器和一台CentOS 7.4服务器。选择Windows 2003是因为其共享操作简单,便于实验效果的展示。
配置IP地址如下:Windows 2003为192.168.10.1,Linux为192.168.10.10。
关闭Linux的防火墙:
基础环境搭建完成后,开始部署实验。
1、创建共享目录并设置安全权限
创建这三个目录的目的是在Samba配置中将它们共享出来,并设置不同的访问权限:read目录为只读,write目录允许任何人写入,ppwrite目录仅允许pp用户写入。
注意:与NFS类似,网络访问也需要遵守权限规则:网络权限和安全权限中最严格的将被采用。因此,我们需要放宽目录的安全权限,以验证Samba共享权限的生效。
2、编辑配置文件,设置共享目录
Samba的配置文件位于
,使用vi编辑器可以看到已有许多默认设置,其中:
- 模块是对所有共享目录进行统一默认配置的,当然也可以为不同的共享目录设置独立的访问权限。
- 模块是针对每个用户登录共享后,对其家目录的默认访问权限设置。上一节提到,Windows作为客户端访问Linux共享时,需要使用Linux中的有效用户登录,该用户的家目录将被默认共享。
- 和模块是针对打印机共享的默认设置。
这些模块的默认内容通常不需要更改,下面我们创建几个自定义模块来共享指定的目录:
在
模块中添加:
创建自定义共享模块:
注意:
和两行配合使用,即除了pp用户可写外,其他用户只读。
配置文件中使用
来指定是否有可写权限,也可以通过或来设置是否只读,功能效果与相同。
提示:在许多Linux版本中,
中的设置可能不存在,设置完成后启动SMB服务即可使用。这也与Windows客户端的版本有关。因此,如果在Windows登录时,用户密码正确但始终报账号密码错误,无法登录,则需要在CentOS 7.4版本的SMB配置文件中添加设置。
此外,
模块中的项有些教材建议更改为,目的是符合Windows关于共享访问的工作组要求。实际上,不做更改,使用默认值也可以,不影响Windows的访问。
3、设定Samba用户
Samba支持Windows客户端使用Linux的系统用户登录访问共享,这可能会带来安全隐患:如果有人使用该用户不通过Samba而是通过SSH直接登录系统,就可能进行恶意操作。因此,为了安全起见,Samba要求为系统用户设置新的登录密码,这样系统用户只能登录Samba而不能登录系统。具体规则如下:
- 必须是Linux系统中存在的用户。
- 系统用户必须明确加入Samba用户中,并指定新密码。
下面是操作命令:
注意:建议Samba登录密码与系统密码不同;如果添加的是非系统用户,会报错。
此外,关于Samba用户的管理,还支持删除、修改等功能,命令如下:
4、启动服务
说明:nmb服务支持主机名解析,可以将Linux的主机名解析为IP地址,客户端可以使用
的格式访问Linux的Samba共享。如果客户端直接使用IP地址访问Samba,则无需nmb服务。
注意:与NFS类似,为了保证Samba服务器重启后仍能支持客户端访问,需要设置开机自动关闭防火墙,具体操作见NFS章节。
4.2.2 Windows客户端访问
Linux服务器端配置完成后,可以使用Windows进行验证访问。
在Windows中打开运行界面,输入
即可访问,如下图:
确认后会打开登录窗口:
输入Samba用户及密码后,即可看到Linux共享出的目录,如下图:
然后可以进入各个共享出的目录,以验证Samba设置权限的生效。
提示:在Windows客户端登录时,为了验证针对不同用户权限的限制(如:ppwrite目录仅pp用户可写,使用root登录到Samba后,也不可写入),我们需要切换用户登录Samba。然而,在Windows中,我们关闭共享的窗口,再次登录时会发现没有了登录验证,可以直接打开共享界面,而且还是以上次登录用户的身份打开的。这是因为Windows客户端访问共享时,第一次登录成功后,会在缓存中记录登录信息,之后的登录会直接打开,无需再次登录。因此,要更换用户登录Samba,需要注销Windows系统后重新登录,或者重启Windows的Workstations服务(在运行中输入
命令,即可查找并重启),以清理缓存,达到相同效果。
4.2.3 Samba共享进阶
上面所建立的共享目录只是简单的基本功能配置,下面我们来做一个较复杂的共享。
需求说明:建立共享目录
,该目录拒绝其他用户访问,仅允许组中的用户访问。中有三个用户:、、。这三个用户对的权限也不同:只读;可读写;拒绝访问。
依据上述需求,我们的部署方案如下:
1、配置基本环境
2、编辑配置文件
写入以下内容:
3、重启服务
注意:
是重启服务,即会关闭再开启,会影响到已经建立好连接、正在访问Samba的客户端。实际上,也可以使用命令重新加载新的配置文件,这样在不关闭服务的情况下更新了新的共享,就不会影响其他正在访问的客户端。
4、Windows访问验证
在Windows中访问Samba共享,可以证明:
因为不是中的用户,访问会失败(访问时会弹窗让再次输入用户名、密码,这只是Windows的一种默认处理方式,Linux中并不支持访问失败后立即切换,所以即便输入被允许的用户名、密码也是无效的);虽然是中的用户,但也不可以访问;和可以访问,但各自有不同的权限设置。
4.3 Windows共享,Linux访问
4.3.1 Windows设置共享
由于Windows的共享原理与本书无关,我们不做具体讲解,只介绍配置步骤:
1、进入E盘,创建文件夹
进入
文件夹,创建文件
2、设置共享
进入E盘,右键
文件夹=>属性=>共享=>共享该文件夹
右键
文件夹=>属性=>安全=>添加=>输入=>确定
3、配置登录密码
右键我的电脑=>管理=>本地用户和组=>用户=>右键
=>设置密码=>设置上密码后,确定直到完成。如下图:
注意:完成此步骤后,Linux客户端即可使用
用户登录Windows的共享。
4.3.2 Linux访问Windows共享
Windows的共享服务设置完成后,就可以在Linux中访问了。Linux中有两种访问方式:挂载式和登录式。
方式一:挂载式
挂载式是最为简单直接的,也最常用,可以将Windows共享的目录直接挂载到本地目录上,就像使用本机的文件系统一样。
可以看到Windows共享的挂载显示的文件系统类型是
。
方式二:登录式
Linux以客户端的身份登录连接到Windows服务器,使用的命令是
,具体操作如下:
此界面下的操作命令与sftp登录后的方式相同,如
、等。
注意:在Linux两种连接Windows共享的方式中,挂载式只能由root用户使用。普通用户只能使用登录式,或者使用
进行Samba挂载。
4.4 Samba配置文件详细介绍