第四章 Samba服务

爱谁谁
发布: 2025-09-11 09:21:06
原创
890人浏览过

第四章 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:

yum -y install samba samba-common samba-client
登录后复制

这三个包分别是Samba的主程序包、共享功能包和Linux作为客户端访问Windows时的客户端包。

下面介绍实验环境:

使用两台主机,一台Windows 2003服务器和一台CentOS 7.4服务器。选择Windows 2003是因为其共享操作简单,便于实验效果的展示。

配置IP地址如下:Windows 2003为192.168.10.1,Linux为192.168.10.10。

关闭Linux的防火墙

iptables -F
setenforce 0
登录后复制

基础环境搭建完成后,开始部署实验。

1、创建共享目录并设置安全权限

mkdir /mnt/read /mnt/write /mnt/ppwrite
登录后复制

创建这三个目录的目的是在Samba配置中将它们共享出来,并设置不同的访问权限:read目录为只读,write目录允许任何人写入,ppwrite目录仅允许pp用户写入。

chmod 777 read
chmod 777 write
chmod 777 ppwrite
登录后复制

注意:与NFS类似,网络访问也需要遵守权限规则:网络权限和安全权限中最严格的将被采用。因此,我们需要放宽目录的安全权限,以验证Samba共享权限的生效。

2、编辑配置文件,设置共享目录

Samba的配置文件位于

/etc/samba/smb.conf
登录后复制
,使用vi编辑器可以看到已有许多默认设置,其中:

  • [global]
    登录后复制
    模块是对所有共享目录进行统一默认配置的,当然也可以为不同的共享目录设置独立的访问权限。
  • [home]
    登录后复制
    模块是针对每个用户登录共享后,对其家目录的默认访问权限设置。上一节提到,Windows作为客户端访问Linux共享时,需要使用Linux中的有效用户登录,该用户的家目录将被默认共享。
  • [printer]
    登录后复制
    [print$]
    登录后复制
    模块是针对打印机共享的默认设置。

这些模块的默认内容通常不需要更改,下面我们创建几个自定义模块来共享指定的目录:

vi /etc/samba/smb.conf
登录后复制

[global]
登录后复制
模块中添加:

ntlm auth = yes  # 支持Windows的登录验证
登录后复制

创建自定义共享模块:

[read]  # 设置共享名,可以与共享目录名不同
public = yes  # 允许guest账户访问
path = /mnt/read  # 指定共享目录路径
writable = no  # 设置本共享目录为只读权限
<p>[write]
public = yes
path = /mnt/write
writable = yes</p><p>[ppwrite]
public = yes
path = /mnt/ppwrite
writable = no  # 设置默认只读权限
writelist = pp  # 指定具备写权限的用户,多用户可用空格分隔
登录后复制

注意:

writable
登录后复制
writelist
登录后复制
两行配合使用,即除了pp用户可写外,其他用户只读。

配置文件中使用

writable
登录后复制
来指定是否有可写权限,也可以通过
read only = yes
登录后复制
read only = no
登录后复制
来设置是否只读,功能效果与
writable
登录后复制
相同。

提示:在许多Linux版本中,

global
登录后复制
中的
ntlmauth
登录后复制
设置可能不存在,设置完成后启动SMB服务即可使用。这也与Windows客户端的版本有关。因此,如果在Windows登录时,用户密码正确但始终报账号密码错误,无法登录,则需要在CentOS 7.4版本的SMB配置文件中添加
ntlm auth
登录后复制
设置。

此外,

[global]
登录后复制
模块中的
workgroup
登录后复制
项有些教材建议更改为
workgroup=WORKGROUP
登录后复制
,目的是符合Windows关于共享访问的工作组要求。实际上,不做更改,使用默认值也可以,不影响Windows的访问。

3、设定Samba用户

Samba支持Windows客户端使用Linux的系统用户登录访问共享,这可能会带来安全隐患:如果有人使用该用户不通过Samba而是通过SSH直接登录系统,就可能进行恶意操作。因此,为了安全起见,Samba要求为系统用户设置新的登录密码,这样系统用户只能登录Samba而不能登录系统。具体规则如下:

  1. 必须是Linux系统中存在的用户。
  2. 系统用户必须明确加入Samba用户中,并指定新密码。

下面是操作命令:

useradd pp  # 创建系统用户
passwd pp  # 配置用户密码
smbpasswd -a root  # 将root加入到Samba用户中,并设置新密码
登录后复制

注意:建议Samba登录密码与系统密码不同;如果添加的是非系统用户,会报错。

smbpasswd -a pp  # 将pp加入到Samba用户中,并设置新密码
pdbedit -L  # 查看Samba的可用账号
登录后复制

此外,关于Samba用户的管理,还支持删除、修改等功能,命令如下:

smbpasswd -d qq  # 禁用用户
smbpasswd -e qq  # 启用用户
smbpasswd -x qq  # 删除用户
smbpasswd pp  # 不加-a参数就是更改现有用户的密码
登录后复制

4、启动服务

systemctl restart smb  # 重启Samba主服务
systemctl enable smb
systemctl status smb
systemctl restart nmb  # 重启nmb服务
systemctl enable nmb
systemctl status nmb
登录后复制

说明:nmb服务支持主机名解析,可以将Linux的主机名解析为IP地址,客户端可以使用

\主机名
登录后复制
的格式访问Linux的Samba共享。如果客户端直接使用IP地址访问Samba,则无需nmb服务。

注意:与NFS类似,为了保证Samba服务器重启后仍能支持客户端访问,需要设置开机自动关闭防火墙,具体操作见NFS章节。

4.2.2 Windows客户端访问

Linux服务器端配置完成后,可以使用Windows进行验证访问。

在Windows中打开运行界面,输入

\ip
登录后复制
即可访问,如下图:

第四章  Samba服务

确认后会打开登录窗口:

第四章  Samba服务

四维时代AI开放平台
四维时代AI开放平台

四维时代AI开放平台

四维时代AI开放平台 66
查看详情 四维时代AI开放平台

输入Samba用户及密码后,即可看到Linux共享出的目录,如下图:

第四章  Samba服务

然后可以进入各个共享出的目录,以验证Samba设置权限的生效。

提示:在Windows客户端登录时,为了验证针对不同用户权限的限制(如:ppwrite目录仅pp用户可写,使用root登录到Samba后,也不可写入),我们需要切换用户登录Samba。然而,在Windows中,我们关闭共享的窗口,再次登录时会发现没有了登录验证,可以直接打开共享界面,而且还是以上次登录用户的身份打开的。这是因为Windows客户端访问共享时,第一次登录成功后,会在缓存中记录登录信息,之后的登录会直接打开,无需再次登录。因此,要更换用户登录Samba,需要注销Windows系统后重新登录,或者重启Windows的Workstations服务(在运行中输入

services.msc
登录后复制
命令,即可查找并重启),以清理缓存,达到相同效果。

4.2.3 Samba共享进阶

上面所建立的共享目录只是简单的基本功能配置,下面我们来做一个较复杂的共享。

需求说明:建立共享目录

share
登录后复制
,该目录拒绝其他用户访问,仅允许
zu1
登录后复制
组中的用户访问。
zu1
登录后复制
中有三个用户:
root
登录后复制
pp
登录后复制
kk
登录后复制
。这三个用户对
share
登录后复制
的权限也不同:
root
登录后复制
只读;
pp
登录后复制
可读写;
kk
登录后复制
拒绝访问。

依据上述需求,我们的部署方案如下:

1、配置基本环境

useradd kk
passwd kk
smbpasswd -a kk
useradd qq
passwd qq
smbpasswd -a qq
cd /mnt
mkdir share
chmod 777 share
groupadd zu1
gpasswd -a root zu1
gpasswd -a pp zu1
gpasswd -a kk zu1
登录后复制

2、编辑配置文件

vi /etc/samba/smb.conf
登录后复制

写入以下内容:

[share]
public = yes
path = /mnt/share
writable = no
write list = pp
valid users = @zu1  # 可用的用户列表,@表示组中用户
invalid users = kk  # 指定不可用用户,即拒绝访问的用户
登录后复制

3、重启服务

systemctl restart smb
登录后复制

注意:

restart
登录后复制
是重启服务,即会关闭再开启,会影响到已经建立好连接、正在访问Samba的客户端。实际上,也可以使用
systemctl reload smb
登录后复制
命令重新加载新的配置文件,这样在不关闭服务的情况下更新了新的共享,就不会影响其他正在访问的客户端。

4、Windows访问验证

在Windows中访问Samba共享,可以证明:

qq
登录后复制
因为不是
zu1
登录后复制
中的用户,访问
share
登录后复制
会失败(访问
share
登录后复制
时会弹窗让再次输入用户名、密码,这只是Windows的一种默认处理方式,Linux中并不支持访问失败后立即切换,所以即便输入被允许的用户名、密码也是无效的);
kk
登录后复制
虽然是
zu1
登录后复制
中的用户,但也不可以访问
share
登录后复制
pp
登录后复制
root
登录后复制
可以访问
share
登录后复制
,但各自有不同的权限设置。

4.3 Windows共享,Linux访问

4.3.1 Windows设置共享

由于Windows的共享原理与本书无关,我们不做具体讲解,只介绍配置步骤:

1、进入E盘,创建文件夹

aaa
登录后复制

进入

aaa
登录后复制
文件夹,创建文件
aaa.txt
登录后复制

第四章  Samba服务

2、设置共享

进入E盘,右键

aaa
登录后复制
文件夹=>属性=>共享=>共享该文件夹

右键

aaa
登录后复制
文件夹=>属性=>安全=>添加=>输入
everyone
登录后复制
=>确定

第四章  Samba服务第四章  Samba服务

3、配置登录密码

右键我的电脑=>管理=>本地用户和组=>用户=>右键

administrator
登录后复制
=>设置密码=>设置上密码后,确定直到完成。如下图:

第四章  Samba服务

注意:完成此步骤后,Linux客户端即可使用

administrator
登录后复制
用户登录Windows的共享。

4.3.2 Linux访问Windows共享

Windows的共享服务设置完成后,就可以在Linux中访问了。Linux中有两种访问方式:挂载式和登录式。

方式一:挂载式

挂载式是最为简单直接的,也最常用,可以将Windows共享的目录直接挂载到本地目录上,就像使用本机的文件系统一样。

mkdir /mnt/win  # 创建挂载点
mount //192.168.10.1/aaa /mnt/win -o username=administrator  # 挂载共享
mount  # 查看挂载表
登录后复制

可以看到Windows共享的挂载显示的文件系统类型是

cifs
登录后复制

vi /etc/fstab  # 配置开机自动挂载
//192.168.10.1/aaa /mnt/win cifs defaults,username=administrator,password=123 0 0
登录后复制

方式二:登录式

Linux以客户端的身份登录连接到Windows服务器,使用的命令是

smbclient
登录后复制
,具体操作如下:

smbclient //192.168.10.1/win -U administrator  # 进入登录界面
登录后复制

第四章  Samba服务

此界面下的操作命令与sftp登录后的方式相同,如

get
登录后复制
put
登录后复制
等。

注意:在Linux两种连接Windows共享的方式中,挂载式只能由root用户使用。普通用户只能使用登录式,或者使用

sudo
登录后复制
进行Samba挂载。

4.4 Samba配置文件详细介绍

以上就是第四章 Samba服务的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号