文件服务器之二:SAMBA服务器
文章目录
- 什么是SAMBA
- SAMBA的发展历史与名称的由来
- SAMBA常见的应用
- SAMBA服务器基础配置
- 配置共享资源
- Windows挂载共享
- Linux挂载共享
什么是SAMBA
下图来自百度百科

SAMBA的发展历史与名称的由来
Samba是一款开源的文件共享软件,它基于SMB(Server Message Block,服务器消息块)协议,并且让Linux系统能够与Windows系统进行文件共享。Samba的开发始于1991年,由当时还在读大学的Tidgwell为了解决Linux与Windows系统之间文件共享的问题而创建。他开发了SMBServer服务程序,通过简单的配置,使得Linux与Windows系统之间的文件共享变得简单而便捷。然而,当他想要将该软件命名为"SMBServer"并注册商标时,商标局以"SMB是没有意义的字符"为由拒绝了申请。后来,Tidgwell查看词典时偶然发现了“Samba”这个拉丁舞蹈的名字,而且它恰好包含了“SMB”。因此,Samba成为了这款软件的新名字,并且沿用至今。
SAMBA常见的应用
主要功能
- 共享文件与打印机服务
- 可以提供用户登陆SAMBA主机时的身份认证,以提供不同身份用户的个别数据
- 可以进行Windows网络上的主机名解析
- 可以进行设备的共享
SAMBA服务器的应用
- 利用软件直接编辑WWW主机上面的网页数据
- 做成可直接连接的文件服务器
- 打印机服务器
SAMBA服务器基础配置
安装
[root@localhost ~]# yum install -y samba samba-client
配置文件/etc/samba/smb.conf
[root@localhost ~]# cat /etc/samba/smb.conf
[global]workgroup = SAMBAsecurity = userpassdb backend = tdbsamprinting = cupsprintcap name = cupsload printers = yescups options = raw[homes]comment = Home Directoriesvalid users = %S, %D%w%Sbrowseable = Noread only = Noinherit acls = Yes[printers]comment = All Printerspath = /var/tmpprintable = Yescreate mask = 0600browseable = No[print$]comment = Printer Driverspath = /var/lib/samba/driverswrite list = @printadmin rootforce group = @printadmincreate mask = 0664directory mask = 0775
| 参数 | 作用 |
|---|---|
| [global] | Samba配置文件的全局设置 |
| workgroup = SAMBA | 设置Samba服务器所在的工作组名称 |
| security = user | Samba服务器的安全性模式,共4种 |
| passdb backend = tdbsam | 用于存储用户账号信息的后端数据库 |
| printing = cups | 打印服务协议 |
| printcap name = cups | 打印服务名称 |
| load printers = yes | 是否加载打印机 |
| cups options = raw | 打印机的选项 |
| [homes] | 配置个人用户的家目录的访问权限和选项 |
| comment = Home Directories | 描述信息 |
| valid users = %S, %D%w%S | 指定允许访问该共享目录的用户列表 |
| browseable = No | 共享信息是否在"网上邻居"中可见 |
| read only = No | 共享目录是否只读 |
| inherit acls = Yes | 是否继承文件的访问控制列表(ACL) |
| [printers] | 用于配置打印机的共享 |
| comment = All Printers | 描述信息 |
| path = /var/tmp | 共享路径 |
| printable = Yes | 指定打印机是否可用于打印 |
| create mask = 0600 | 指定创建文件时的权限掩码 |
| browseable = No | 共享信息是否在"网上邻居"中可见 |
| [print$] | 用于配置打印机驱动程序的共享 |
| comment = Printer Drivers | 描述信息 |
| path = /var/lib/samba/drivers | 共享路径 |
| write list = @printadmin root | 指定允许写入该共享目录的用户列表 |
| force group = @printadmin | 强制所创建文件的所属组为指定的组 |
| create mask = 0664 | 指定创建文件时的权限掩码 |
| directory mask = 0775 | 指定创建目录时的权限掩码 |
security 参数代表用户登陆Samba服务时采用的验证方式。四种
- share:代表主机无须验证密码。相当于vsftpd服务的匿名公开访问模式,安全性差
- user:代表登陆Samba服务时需要使用账号密码进行验证,通过才能获取到文件,默认的验证方式
- domain:代表通过域控制器进行身份验证,用来限制用户的来源域
- server:代表使用独立主机验证来访问用户提供的密码。这相当于集中管理账号,不常用
配置共享资源
第一步:创建用于访问共享资源的账户信息
pdbedit 命令用于管理 Samba 服务程序的账户信息数据库,格式为【pdbedit [选项]账户】。在第一次把账户信息写人到数据库时需要使用【-a】参数,以后在执行修改密码、删除账户等操作时就不再需要该参数了
Samba服务程序的数据库要求账户必须在当前系统中已经存在,否则日后创建文件时将导致文件的权限属性混乱不堪,由此引发错误
| 参数 | 作用 |
|---|---|
| -a 用户名 | 建立Samba用户 |
| -x 用户名 | 删除Samba用户 |
| -L | 列出用户列表 |
| -Lv | 列出用户详细信息的列表 |
[root@localhost ~]# id csq
用户id=1001(csq) 组id=1001(csq) 组=1001(csq)
[root@localhost ~]# pdbedit -a -u csq
new password: # 输入该账户在Samba服务数据库种的密码
retype new password: # 再次输入密码进行确认
Unix username: csq # Samba账号的用户名
NT username: # Samba账号的Windows用户名为空
Account Flags: [U ] # 账号标志为"U",表示账号可用
User SID: S-1-5-21-1005164572-3626894132-1712046424-1000 # Samba账号的SID标识
Primary Group SID: S-1-5-21-1005164572-3626894132-1712046424-513 # 账号的主组的SID标识
Full Name:
Home Directory: \\LOCALHOST\csq # 账号的主目录路径
HomeDir Drive:
Logon Script:
Profile Path: \\LOCALHOST\csq\profile # 账号的配置文件路径
Domain: LOCALHOST # 账号所属的域名
Account desc:
Workstations:
Munged dial:
Logon time: 0
Logoff time: 三, 06 2月 2036 10:06:39 EST
Kickoff time: 三, 06 2月 2036 10:06:39 EST
Password last set: 一, 01 4月 2024 09:43:46 EDT
Password can change: 一, 01 4月 2024 09:43:46 EDT
Password must change: never # 账号密码的过期时间设置为"never",即永不过期
Last bad password : 0
Bad password count : 0
Logon hours : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
# 登录小时的位图,其中所有位都是1,表示没有限制登录时间
第二步、创建用于共享资源的文件目录
创建用于共享资源的文件目录。在创建时,不仅要考虑到文件读写权限的问题,而且由于home 目录是系统中普通用户的家目录,因此还需要考虑应用于该目录的 SELimnux 安全上下文所带来的限制。在 Samba 的帮助手册中显示,正确的文件上下文值应该是 samba_share,所以只需要修改完毕后执行restorecon 命令,就能让应用于目录的新 SELinux 安全上下文立即生效。
[root@localhost ~]# mkdir /home/database
[root@localhost ~]# chown -R csq:csq /home/database/
[root@localhost ~]# semanage fcontext -a -t samba_share_t /home/database
[root@localhost ~]# restorecon -Rv /home/database/
Relabeled /home/database from unconfined_u:object_r:user_home_dir_t:s0 to unconfined_u:object_r:samba_share_t:s0
第三步、设置SELinux服务与策略,使其允许通过Samba服务程序访问普通用户家目录
执行 getsebool命令,筛选出所有与 Samba 服务程序相关的 SELinux 域策略,根据策略的名称(和经验)选择出正确的策略条目进行开启即可
[root@localhost ~]# getsebool -a |grep samba
samba_create_home_dirs --> off
samba_domain_controller --> off
samba_enable_home_dirs --> off # 修改这一条
samba_export_all_ro --> off
samba_export_all_rw --> off
samba_load_libgfapi --> off
samba_portmapper --> off
samba_run_unconfined --> off
samba_share_fusefs --> off
samba_share_nfs --> off
sanlock_use_samba --> off
tmpreaper_use_samba --> off
use_samba_home_dirs --> off
virt_use_samba --> off
[root@localhost ~]# setsebool -P samba_enable_home_dirs on
第四步、在Samba服务程序的主配置文件种,根据下表下入共享信息
Samba的主配置文件(通常是/etc/samba/smb.conf)可以设置全局配置参数和区域配置参数。全局配置参数适用于整个Samba服务器环境,对所有共享资源都有效。区域配置参数用于设置单独的共享资源,并且只对该资源有效。
创建一个共享资源非常简单,只需将相关参数添加到Samba服务程序的主配置文件中,并重新启动该服务即可生效。
| 参数 | 作用 |
|---|---|
| [database] | 共享名称为database |
| comment = Do not arbitrarily modify the database file | 警告用户不要随意修改数据库 |
| path = /home/database | 共享目录为/home/database |
| public = no | 关闭 “所有人可见” |
| writable = yes | 允许写入操作 |
[root@localhost ~]# vim /etc/samba/smb.conf
# 将使用不到的行注释掉
[global]workgroup = SAMBAsecurity = userpassdb backend = tdbsam
# printing = cups
# printcap name = cups
# load printers = yes
# cups options = raw
[database]comment = Do not arbitrarily modify the database filepath = /home/databasepublic = nowritable = yes
#
# [homes]
# comment = Home Directories
# valid users = %S, %D%w%S
# browseable = No
# read only = No
# inherit acls = Yes# [printers]
# comment = All Printers
# path = /var/tmp
# printable = Yes
# create mask = 0600
# browseable = No
#
# [print$]
# comment = Printer Drivers
# path = /var/lib/samba/drivers
# write list = @printadmin root
# force group = @printadmin
# create mask = 0664
# directory mask = 0775
第五步、Samba服务程序的配置工作基本完毕
重启生效修改的配置文件
[root@localhost ~]# systemctl restart smb
[root@localhost ~]# systemctl enable smb
[root@localhost ~]# systemctl status smb # 查看是否启动成功
[root@localhost ~]# firewall-cmd --add-service=samba --permanent
success
[root@localhost ~]# firewall-cmd --reload
success
第六步、查看Samba服务都共享了哪些目录,使用smbclient来查看共享详情
[root@localhost ~]# smbclient -U csq -L 192.168.200.10
# -U:指定了用户名称
# -L:列出共享清单
Password for [SAMBA\csq]:Sharename Type Comment--------- ---- -------database Disk Do not arbitrarily modify the database file# Sharename:共享名称# Type:共享类型,指示该共享是一个磁盘(Disk)#Comment:对共享的描述或备注信息IPC$ IPC IPC Service (Samba 4.17.5)
SMB1 disabled -- no workgroup available # 这个报错可以不用管
Windows挂载共享
要在Windows系统访问共享资源,只需要单机 Windows系统的开始,输入两个反斜杠,如何再添加服务器的IP地址即可
然后就可以看到Samba共享服务的登陆界面了
输入对应的账号名称密码即可访问
创建文件写入信息

[root@localhost ~]# ls /home/database/
hello.txt
[root@localhost ~]# smbclient //192.168.200.10/database -U csq # 在Linux端登陆查看
Password for [SAMBA\csq]:
Try "help" to get a list of possible commands.
smb: \> ls. D 0 Mon Apr 1 10:41:58 2024.. D 0 Mon Apr 1 10:40:17 2024hello.txt A 9 Mon Apr 1 10:41:51 202417197056 blocks of size 1024. 12929692 blocks available
Linux挂载共享
Samba服务程序还可以实现Linux系统之间的文件共享
[root@localhost ~]# yum install -y cifs-utils
安装完成后,在Linux创建一个用于挂载Samba服务共享资源的目录。这个目录可以与服务器上的共享名称同名,以便于日后查找
[root@localhost ~]# mkdir /database
[root@localhost ~]# mount -t cifs -o username=csq,password=000000 //192.168.200.10/database /database/
[root@localhost ~]# df -hT /database/
文件系统 类型 容量 已用 可用 已用% 挂载点
//192.168.200.10/database cifs 17G 4.1G 13G 25% /database
如果在每次重启电脑后都需要使用 mount 命令手动挂载远程共享目录,很麻烦,可以按照 Samba 服务的用户名、密码、共享域的顺序将相关信息写人一个认证文件中,然后让/etc/fstab文件和系统自动加载它。为了保证不被其他人随意看到,最后把这个认证文件的权限修改为仅root 管理员才能够读写:
[root@localhost ~]# vim auth.smb
username=csq
password=000000
domain=SAMBA
[root@localhost ~]# chmod 600 auth.smb
[root@localhost ~]# vim /etc/fstab
# 添加如下信息
//192.168.200.10/database /database cifs credentials=/root/auth.smb 0 0
[root@localhost ~]# umount /database
[root@localhost ~]# mount -a
[root@localhost ~]# df -hT /database/
文件系统 类型 容量 已用 可用 已用% 挂载点
//192.168.200.10/database cifs 17G 4.1G 13G 25% /database
[root@localhost ~]# ls /database/
hello.txt
相关文章:
文件服务器之二:SAMBA服务器
文章目录 什么是SAMBASAMBA的发展历史与名称的由来SAMBA常见的应用 SAMBA服务器基础配置配置共享资源Windows挂载共享Linux挂载共享 什么是SAMBA 下图来自百度百科 SAMBA的发展历史与名称的由来 Samba是一款开源的文件共享软件,它基于SMB(Server Messa…...
20.安全性测试与评估
每年都会涉及;可能会考大题;多记!!! 典型考点:sql注入、xss; 从2个方面记: 1、测试对象的功能、性能; 2、相关设备的工作原理; 如防火墙,要了解防…...
阿里巴巴实习面经
本人bg:浙江大学,计算机研二,本科也是浙大计算机专业的。 在阿里巴巴达摩院实习,算法岗,我是去年拿到的阿里巴巴达摩院的实习offer,这个过程还是比较惊心动魄,所以我称之为惊心动魄版本…...
javaweb学习(day11-监听器Listener过滤器Filter)
一、监听器Listener 1 Listener介绍 Listener 监听器它是 JavaWeb 的三大组件之一。JavaWeb 的三大组件分别是:Servlet 程 序、Listener 监听器、Filter 过滤器 Listener 是 JavaEE 的规范,就是接口 监听器的作用是,监听某种变化(一般就是对…...
教你快速认识Java中的抽象类和接口
目录 引言 抽象类(Abstract Class) 抽象类的概念 抽象类的图标 抽象类的语法 抽象类的特点 接口(Interface) 接口的概念 接口的图标 接口的语法 接口的特点 接口的使用 接口的意义 抽象类与接口的区别 Object类 结…...
Linux第5课 Linux目录介绍
文章目录 Linux第5课 Linux目录介绍一、打开系统目录二、查看系统目录 Linux第5课 Linux目录介绍 系统目录就是指操作系统的主要文件存放的目录,目录中的文件直接影响到系统是否正常工作,了解这些目录的功能,对使用系统会有很大的帮助。 一…...
GitHub要求2FA?不慌,有它(神锁离线版)帮你!
GitHub宣布,到 2023 年底,所有用户都必须要启用双因素身份验证 (2FA),不能只用密码啦。 说实话,听到这消息小编是非常高兴的。 正如GitHub的首席安全官Mike Hanley所说,软件供应链是从开发者开始的,保护开…...
C语言第四十弹---预处理(下)
✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】 预处理 1、#和## 1.1 #运算符 1.2、##运算符 2、命名约定 3、#undef 4、命令行定义 5、条件编译 6、头文件的包含 6.1、头文件被包含的方式 6.1.1、本地…...
SYS-2722音频分析仪SYS2722
181/2461/8938产品概述: Audio Precision 2722 音频分析仪是 Audio Precision 屡获殊荣的 PC 控制音频分析仪的旗舰型号,长期以来一直是音频设备设计和测试的全球公认标准。功能齐全的 SYS-2722 提供了测试转换器技术最新进展所需的无与伦比的失真和噪声…...
下载页面上的视频
引言:有些页面上的视频可以直接右键另存为或者F12检索元素找到视频地址打开后保存,但有些视频页面是转码后的视频,不能直接另存为视频格式,可以参考下本方法 以该页面视频为例:加载中...点击查看详情https://wx.vzan.c…...
静态路由协议实验综合实验
需求: 1、除R5的换回地址已固定外,整个其他所有的网段基于192.168.1.0/24进行合理的IP地址划分。 2、R1-R4每台路由器存在两个环回接口,用于模拟连接PC的网段;地址也在192.168.1.0/24这个网络范围内。 3、R1-R4上不能直接编写到…...
qt MVC软件设计模式
在Qt中使用MVC(Model-View-Controller)软件设计模式可以帮助你将数据模型、用户界面和控制逻辑有效地分离,从而使得代码更清晰,更易于维护和扩展。以下是在Qt中使用MVC模式的一般思路: Model(模型ÿ…...
代码随想录刷题随记15-二叉树回溯
代码随想录刷题随记15-二叉树回溯 110.平衡二叉树 leetcode链接 一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。 求深度和求高度的区别: 求深度可以从上到下去查 所以需要前序遍历(中左右ÿ…...
基于SpringBoot Vue养老院管理
一、📝功能介绍 基于SpringBoot Vue养老院管理 角色:管理员、企业、老人子女、老人 管理员:管理员登录进入养老院管理系统可以对系统首页、个人中心、服务人员管理、老人管理、老人子女管理、老人档案管理、社区活动管理、活动记录管理、床…...
盘点编程方法论中的一些思想
背景 在日常编程开发中,虽然不同公司,业务不同,语言不同,但是工作久了,我们会发现一些编程思想几乎是不变的。这些编程思想,往往来自于大量实际问题场景的方法总结,可以很好的应对某一类问题。如…...
通过电机转速计算主轴旋转单圈所需时间(CODESYS ST代码)
1、伺服丝杠系统常用算法功能块 伺服丝杠系统常用算法功能块-CSDN博客文章浏览阅读353次。这篇博客主要介绍伺服、丝杠系统常用的运算功能块,其它相关运算可以查看下面文章链接:信捷PLC脉冲频率、位移、转速相关计算(C语言编程应用)_RXXW_Dor的博客-CSDN博客。https://rxxw-…...
多线程的入门(二)线程实现与初步使用
1.实现Runable接口 实现Runable接口,实现run方法; 这种方式创建的线程实现类执行时需要创建Thread实例去运行该任务 示例如下: package com.example.springbootdamo.Thread;import org.apache.logging.log4j.LogManager; import org.apach…...
数据结构(初阶)第二节:顺序表
数据结构(初阶)第一节:数据结构概论-CSDN博客 从本文正式进入对数据结构的讲解,开始前友友们要有C语言的基础,熟练掌握动态内存管理、结构体、指针等章节,方便后续的学习。 目录 顺序表(Sequen…...
鸿蒙OS元服务开发:【(Stage模型)设置应用主窗口】
一、设置应用主窗口说明 在Stage模型下,应用主窗口由UIAbility创建并维护生命周期。在UIAbility的onWindowStageCreate回调中,通过WindowStage获取应用主窗口,即可对其进行属性设置等操作。还可以在应用配置文件中设置应用主窗口的属性&…...
lua学习笔记6(经典问题输出99乘法表)
print("************for循环的99乘法表*************") for i 1, 9 dolocal line "" -- 创建一个局部变量来累积每行的输出--local 是一个关键字,用于声明一个局部变量。for j 1, i doline line .. j .. "*" .. i .. ""…...
【入坑系列】TiDB 强制索引在不同库下不生效问题
文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...
解锁数据库简洁之道:FastAPI与SQLModel实战指南
在构建现代Web应用程序时,与数据库的交互无疑是核心环节。虽然传统的数据库操作方式(如直接编写SQL语句与psycopg2交互)赋予了我们精细的控制权,但在面对日益复杂的业务逻辑和快速迭代的需求时,这种方式的开发效率和可…...
BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践
6月5日,2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席,并作《智能体在安全领域的应用实践》主题演讲,分享了在智能体在安全领域的突破性实践。他指出,百度通过将安全能力…...
Ascend NPU上适配Step-Audio模型
1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统,支持多语言对话(如 中文,英文,日语),语音情感(如 开心,悲伤)&#x…...
聊一聊接口测试的意义有哪些?
目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开,首…...
网站指纹识别
网站指纹识别 网站的最基本组成:服务器(操作系统)、中间件(web容器)、脚本语言、数据厍 为什么要了解这些?举个例子:发现了一个文件读取漏洞,我们需要读/etc/passwd,如…...
人工智能(大型语言模型 LLMs)对不同学科的影响以及由此产生的新学习方式
今天是关于AI如何在教学中增强学生的学习体验,我把重要信息标红了。人文学科的价值被低估了 ⬇️ 转型与必要性 人工智能正在深刻地改变教育,这并非炒作,而是已经发生的巨大变革。教育机构和教育者不能忽视它,试图简单地禁止学生使…...
现有的 Redis 分布式锁库(如 Redisson)提供了哪些便利?
现有的 Redis 分布式锁库(如 Redisson)相比于开发者自己基于 Redis 命令(如 SETNX, EXPIRE, DEL)手动实现分布式锁,提供了巨大的便利性和健壮性。主要体现在以下几个方面: 原子性保证 (Atomicity)ÿ…...
【C++进阶篇】智能指针
C内存管理终极指南:智能指针从入门到源码剖析 一. 智能指针1.1 auto_ptr1.2 unique_ptr1.3 shared_ptr1.4 make_shared 二. 原理三. shared_ptr循环引用问题三. 线程安全问题四. 内存泄漏4.1 什么是内存泄漏4.2 危害4.3 避免内存泄漏 五. 最后 一. 智能指针 智能指…...
【Android】Android 开发 ADB 常用指令
查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...
