0

0

第四章 Samba服务

爱谁谁

爱谁谁

发布时间:2025-09-11 09:21:06

|

925人浏览过

|

来源于php中文网

原创

第四章 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  # 设置本共享目录为只读权限

[write] public = yes path = /mnt/write writable = yes

[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服务

乐活途—购物分享社区 X2.0
乐活途—购物分享社区 X2.0

安装说明重要提醒:程序不支持二级目录安装,请使用一级目录或二级目录绑定!第一步,确定你的服务器支持PHP+mysql。第二步,确定你的服务器开启了gd库。第三步,将upload文件内的文件上传到网站的根目录第四步,访问你的域名+ /install/index.html进行安装,linux系统访问你的域名+ /Install/index.html第五步,按照安装程序步骤进行安装配置第六步,安装完毕后

下载

输入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配置文件详细介绍

相关专题

更多
python中print函数的用法
python中print函数的用法

python中print函数的语法是“print(value1, value2, ..., sep=' ', end=' ', file=sys.stdout, flush=False)”。本专题为大家提供print相关的文章、下载、课程内容,供大家免费下载体验。

180

2023.09.27

session失效的原因
session失效的原因

session失效的原因有会话超时、会话数量限制、会话完整性检查、服务器重启、浏览器或设备问题等等。详细介绍:1、会话超时:服务器为Session设置了一个默认的超时时间,当用户在一段时间内没有与服务器交互时,Session将自动失效;2、会话数量限制:服务器为每个用户的Session数量设置了一个限制,当用户创建的Session数量超过这个限制时,最新的会覆盖最早的等等。

301

2023.10.17

session失效解决方法
session失效解决方法

session失效通常是由于 session 的生存时间过期或者服务器关闭导致的。其解决办法:1、延长session的生存时间;2、使用持久化存储;3、使用cookie;4、异步更新session;5、使用会话管理中间件。

700

2023.10.18

cookie与session的区别
cookie与session的区别

本专题整合了cookie与session的区别和使用方法等相关内容,阅读专题下面的文章了解更详细的内容。

86

2025.08.19

windows查看端口占用情况
windows查看端口占用情况

Windows端口可以认为是计算机与外界通讯交流的出入口。逻辑意义上的端口一般是指TCP/IP协议中的端口,端口号的范围从0到65535,比如用于浏览网页服务的80端口,用于FTP服务的21端口等等。怎么查看windows端口占用情况呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

487

2023.07.26

查看端口占用情况windows
查看端口占用情况windows

端口占用是指与端口关联的软件占用端口而使得其他应用程序无法使用这些端口,端口占用问题是计算机系统编程领域的一个常见问题,端口占用的根本原因可能是操作系统的一些错误,服务器也可能会出现端口占用问题。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

1025

2023.07.27

windows照片无法显示
windows照片无法显示

当我们尝试打开一张图片时,可能会出现一个错误提示,提示说"Windows照片查看器无法显示此图片,因为计算机上的可用内存不足",本专题为大家提供windows照片无法显示相关的文章,帮助大家解决该问题。

727

2023.08.01

windows查看端口被占用的情况
windows查看端口被占用的情况

windows查看端口被占用的情况的方法:1、使用Windows自带的资源监视器;2、使用命令提示符查看端口信息;3、使用任务管理器查看占用端口的进程。本专题为大家提供windows查看端口被占用的情况的相关的文章、下载、课程内容,供大家免费下载体验。

397

2023.08.02

苹果官网入口直接访问
苹果官网入口直接访问

苹果官网直接访问入口是https://www.apple.com/cn/,该页面具备0.8秒首屏渲染、HTTP/3与Brotli加速、WebP+AVIF双格式图片、免登录浏览全参数等特性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

10

2025.12.24

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 6万人学习

Excel 教程
Excel 教程

共162课时 | 9.5万人学习

PHP基础入门课程
PHP基础入门课程

共33课时 | 1.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

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