Linux:Samba 服务部署
Linux:Samba 服务部署
一、Samba 服务核心组件与工作原理
1. 核心进程及功能
Samba 服务由两个关键进程组成,分别承担不同功能:
- smbd 进程:
主要负责管理服务器上的共享目录、打印机,提供用户登录认证、创建对话进程及 SMB 资源共享等核心功能。
占用端口:TCP 139 和 TCP 445。 - nmbd 进程:
主要负责提供 NetBIOS 的域名解析服务,支持客户端浏览网络中的共享资源(类似 Windows “网上邻居” 的功能)。
占用端口:UDP 137 和 UDP 138。
2. 工作原理(通信流程)
- 请求发起:Samba 客户端向服务器发送数据请求包,包含客户端支持的协议版本等信息。服务器收到后对内容进行确认,若服务器无响应,则会话连接失败。
- 服务器响应:当服务器确认请求包信息有效后,向客户端返回建议使用的协议版本、通信端口等相关信息。
- 认证交互:客户端根据服务器返回的信息确认自身配置,随后向服务器发送认证信息(用户名 / 密码)并等待响应。若服务器验证通过,则会话连接成功;否则失败。
- 资源访问:客户端与服务器成功建立会话后,即可通过相应命令(如上传、下载文件)访问共享资源。
二、Samba 服务器部署
1. 安装 samba 服务器所需的软件包
#安装服务端和客户端工具
[root@zhangyiwei ~]# yum -y install samba samba-client
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
正在解决依赖关系
--> 正在检查事务
---> 软件包 samba.x86_64.0.4.8.3-4.el7 将被 安装
--> 正在处理依赖关系 samba-libs = 4.8.3-4.el7,它被软件包 samba-4.8.3-4.el7.x86_64 需要
--> 正在处理依赖关系 samba-common-tools = 4.8.3-4.el7,它被软件包 samba-4.8.3-4.el7.x86_64 需要
--> 正在处理依赖关系 libxattr-tdb-samba4.so(SAMBA_4.8.3)(64bit),它被软件包 samba-4.8.3-4.el7.x86_64 需要
--> 正在处理依赖关系 libxattr-tdb-samba4.so()(64bit),它被软件包 samba-4.8.3-4.el7.x86_64 需要
---> 软件包 samba-client.x86_64.0.4.8.3-4.el7 将被 安装
--> 正在检查事务
---> 软件包 samba-common-tools.x86_64.0.4.8.3-4.el7 将被 安装
---> 软件包 samba-libs.x86_64.0.4.8.3-4.el7 将被 安装
--> 正在处理依赖关系 libpytalloc-util.so.2(PYTALLOC_UTIL_2.1.9)(64bit),它被软件包 samba-libs-4.8.3-4.el7.x86_64 需要
--> 正在处理依赖关系 libpytalloc-util.so.2(PYTALLOC_UTIL_2.1.6)(64bit),它被软件包 samba-libs-4.8.3-4.el7.x86_64 需要
--> 正在处理依赖关系 libpytalloc-util.so.2(PYTALLOC_UTIL_2.0.6)(64bit),它被软件包 samba-libs-4.8.3-4.el7.x86_64 需要
--> 正在处理依赖关系 libpytalloc-util.so.2()(64bit),它被软件包 samba-libs-4.8.3-4.el7.x86_64 需要
--> 正在检查事务
---> 软件包 pytalloc.x86_64.0.2.1.13-1.el7 将被 安装
--> 解决依赖关系完成依赖关系解决========================================================================================================Package 架构 版本 源 大小
========================================================================================================
正在安装:samba x86_64 4.8.3-4.el7 aa 680 ksamba-client x86_64 4.8.3-4.el7 aa 618 k
为依赖而安装:pytalloc x86_64 2.1.13-1.el7 aa 17 ksamba-common-tools x86_64 4.8.3-4.el7 aa 448 ksamba-libs x86_64 4.8.3-4.el7 aa 276 k事务概要
========================================================================================================
安装 2 软件包 (+3 依赖软件包)总下载量:2.0 M
安装大小:5.8 M
Downloading packages:
--------------------------------------------------------------------------------------------------------
总计 53 MB/s | 2.0 MB 00:00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction正在安装 : pytalloc-2.1.13-1.el7.x86_64 1/5 正在安装 : samba-libs-4.8.3-4.el7.x86_64 2/5 正在安装 : samba-common-tools-4.8.3-4.el7.x86_64 3/5 正在安装 : samba-4.8.3-4.el7.x86_64 4/5 正在安装 : samba-client-4.8.3-4.el7.x86_64 5/5 验证中 : pytalloc-2.1.13-1.el7.x86_64 1/5 验证中 : samba-4.8.3-4.el7.x86_64 2/5 验证中 : samba-common-tools-4.8.3-4.el7.x86_64 3/5 验证中 : samba-libs-4.8.3-4.el7.x86_64 4/5 验证中 : samba-client-4.8.3-4.el7.x86_64 5/5 已安装:samba.x86_64 0:4.8.3-4.el7 samba-client.x86_64 0:4.8.3-4.el7 作为依赖被安装:pytalloc.x86_64 0:2.1.13-1.el7 samba-common-tools.x86_64 0:4.8.3-4.el7 samba-libs.x86_64 0:4.8.3-4.el7 完毕!
-
软件包说明:
smbd
:SMB 服务器主程序,为客户端提供文件和打印共享服务。nmbd
:NetBIOS 名称服务器,支持共享资源的浏览功能。smbclient
:SMB 客户端工具,用于从 Linux 或其他系统访问 Samba 服务器资源。smbmount
/smbumount
:挂载和卸载 SMB 文件系统的工具。smbpasswd
:用于添加、删除及管理 Samba 用户的口令。
2. 配置文件及前期准备
(1)配置文件基础说明
**Samba 核心工具及功能说明**smbd:SMB 服务器核心进程,提供文件和打印共享服务。
nmbd:NetBIOS 名称服务器,支持共享资源浏览。
smbclient:SMB 客户端工具,用于访问远程 SMB 共享。
smbmount:挂载 SMB 共享到本地的工具。
smbumount:卸载已挂载的 SMB 共享的工具。
smbpasswd:管理 SMB 用户(添加、删除、改密等)。SELinux 与 Samba 服务配置详解SELinux(Security-Enhanced Linux)通过布尔值(bool)和文件上下文(context)控制进程对资源的访问,对于 Samba 服务,常用的 SELinux 配置包括:布尔值设置方面,使用setsebool -P samba_enable_home_dirs on可允许 Samba 共享用户家目录(-P参数确保永久生效,重启后不失效);以只读权限共享目录时需执行setsebool -P samba_export_all_ro on;以读写权限共享目录则需设置setsebool -P samba_export_all_rw on;文件上下文设置方面,共享自定义目录时需用chcon -t samba_share_t /path/to/directory修改目录的 context 值,但需注意通过chcon设置的上下文在文件系统重新打标签(如执行restorecon或重启)后会丢失,若需永久生效,应使用semanage fcontext -a -t samba_share_t "/path/to/directory(/.*)?"添加规则并执行restorecon -Rv /path/to/directory应用;Samba 主配置文件/etc/samba/smb.conf的核心参数中,全局设置([global])包含workgroup = MYGROUP定义工作组名称(需与客户端一致)、server string = Samba Server Version %v描述服务器信息(%v自动替换为版本号)、; netbios name = MYSERVER(注释状态,取消注释可自定义 NetBIOS 名称)、; interfaces = lo eth0 192.168.12.2/24 192.168.13.2/24(限制监听接口或 IP)、; hosts allow = 127. 192.168.12. 192.168.13.(仅允许指定主机访问);日志设置有log file = /var/log/samba/log.%m(日志路径,%m替换为客户端主机名)和max log size = 50(单个日志最大 50KB,超过循环写入);安全与认证设置中,security = user为默认运行模式,使用 Samba 自身数据库验证用户(需为系统用户设置 Samba 密码,如smbpasswd -a 用户名),此外security还支持share(无需验证,安全性低)和server(由其他服务器认证,已过时);passdb backend = tdbsam定义用户信息存储方式(默认使用/etc/samba/passdb.tdb数据库),还可设置为ldapsam(LDAP 存储,适用于大规模网络)或smbpasswd(使用/etc/samba/smbpasswd文件,兼容性强但安全性较低);基础共享配置流程为:安装 Samba 服务(yum -y install samba samba-client)、修改smb.conf全局参数、配置 SELinux 布尔值、设置自定义目录上下文(如需)、重启 Samba 服务(systemctl restart smb nmb)并开放防火墙(firewall-cmd --add-service=samba --permanent && firewall-cmd --reload)。
(2)创建共享目录及初始化内容
需求:将/smbshare
目录共享,共享名为myshare
,允许用户zhang3
(只读)和lisi
(读写)访问,且共享可浏览。
执行命令:
[root@zhangyiwei ~]# mkdir /smbshare
[root@zhangyiwei ~]# cd /smbshare/
[root@zhangyiwei smbshare]# mkdir test1 # 创建测试子目录
[root@zhangyiwei smbshare]# touch file1 # 创建测试文件
(3)修改共享目录配置文件
[root@zhangyiwei smbshare]# vim /etc/samba/smb.conf
添加共享配置:
[myshare] # 共享名,自行定义comment = hina # 共享描述信息,自行定义path = /smbshare # 共享目录的绝对路径browseable = yes # 允许浏览共享(yes/no)valid users = zhnag3,lisi # 允许访问的Samba用户列表write list = lisi # 拥有读写权限的用户(其他用户默认只读)
#共享目录设置核心参数
comment = 描述信息 ---共享目录的说明文本
path = /绝对路径 ---共享目录的实际路径
browseable = yes/no ---是否允许浏览(默认yes)
read only = yes/no ---是否只读(默认yes)
writable = yes/no ---是否可写(默认no,与read only互斥)
write list = 用户名1,@组名1 ---拥有写权限的用户/组(其他用户默认只读)
guest ok = yes/no ---是否允许匿名访问(默认no)
valid users = 用户名1,用户名2 ---允许访问的用户列表(白名单)
public = yes/no ---是否为公共共享(与guest ok功能类似)
3. 管理系统用户(zhang3 和 lisi)
(1)创建用户
[root@zhangyiwei smbshare]# useradd zhang3
[root@zhangyiwei smbshare]# useradd lisi
(2)设置 Samba 用户及权限
添加 Samba 用户,使用smbpasswd
命令添加 Samba 用户(需基于系统用户):
# 添加zhang3为Samba用户并设置密码
[root@zhangyiwei smbshare]# smbpasswd -a zhang3
New SMB password: #设置密码
Retype new SMB password: #确认密码
Added user zhang3.
# 添加lisi为Samba用户并设置密码
[root@zhangyiwei smbshare]# smbpasswd -a lisi
New SMB password: #设置密码
Retype new SMB password: #确认密码
Added user lisi.
选项说明:
-a
:添加用户;-x
:删除用户;-e
:启用用户;-d
:禁用用户。
(3)设置共享目录的文件系统权限
为确保 Samba 用户权限与共享配置一致,需通过 ACL 设置目录权限:
# 授予zhang3只读权限(读、执行)
[root@zhangyiwei smbshare]# setfacl -m u:zhang3:r-x /smbshare/
# 授予lisi读写权限(读、写、执行)
[root@zhangyiwei smbshare]# setfacl -m u:lisi:rwx /smbshare/
(4)验证 Samba 用户列表
# 列出系统上所有配置为Samba用户的账号
[root@zhangyiwei smbshare]# pdbedit -L
zhang3:1001:
lisi:1002:
4. 启动 Samba 服务并设置自启
[root@zhangyiwei smbshare]# systemctl restart smb.service # 重启smbd进程
[root@zhangyiwei smbshare]# systemctl restart nmb.service # 重启nmbd进程
[root@zhangyiwei smbshare]# systemctl enable smb.service # 设置smb服务开机自启
Created symlink from /etc/systemd/system/multi-user.target.wants/smb.service to /usr/lib/systemd/system/smb.service.
# 设置nmb服务开机自启
[root@zhangyiwei smbshare]# systemctl enable nmb.service
Created symlink from /etc/systemd/system/multi-user.target.wants/nmb.service to /usr/lib/systemd/system/nmb.service.
#在测试环境为了方便配置服务,本机已经关闭防火墙与SELinux服务,在生产环境中开启防火墙与SElinux需要进行对应配置
三、客户端访问 Samba 共享资源(按文本顺序)
1. 客户端准备工作
安装客户端工具:s
[root@zhangyiwei-2 ~]# yum -y install samba-client cifs-utils
已加载插件:fastestmirror, langpacks
源 'aa' 在配置文件中未指定名字,使用标识代替
Loading mirror speeds from cached hostfile
正在解决依赖关系
--> 正在检查事务
---> 软件包 cifs-utils.x86_64.0.6.2-10.el7 将被 安装
---> 软件包 samba-client.x86_64.0.4.8.3-4.el7 将被 安装
--> 解决依赖关系完成依赖关系解决================================================================================================================================Package 架构 版本 源 大小
================================================================================================================================
正在安装:cifs-utils x86_64 6.2-10.el7 aa 85 ksamba-client x86_64 4.8.3-4.el7 aa 618 k事务概要
================================================================================================================================
安装 2 软件包总下载量:702 k
安装大小:2.2 M
Downloading packages:
--------------------------------------------------------------------------------------------------------------------------------
总计 18 MB/s | 702 kB 00:00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction正在安装 : cifs-utils-6.2-10.el7.x86_64 1/2 正在安装 : samba-client-4.8.3-4.el7.x86_64 2/2 验证中 : samba-client-4.8.3-4.el7.x86_64 1/2 验证中 : cifs-utils-6.2-10.el7.x86_64 2/2 已安装:cifs-utils.x86_64 0:6.2-10.el7 samba-client.x86_64 0:4.8.3-4.el7 完毕!
[root@zhangyiwei-2 ~]#
#cifs-utils
是一组用于在 Linux 系统中挂载和管理 CIFS(Common Internet File System,通用互联网文件系统)协议共享的工具集,主要用于访问 Windows 系统或 Samba 服务器共享的文件资源。
2. 浏览共享资源列表
(1)匿名用户访问共享列表
[root@zhangyiwei-2 ~]# smbclient -L 192.168.100.10 # 172.16.30.20为Samba服务器IP
Enter SAMBA\root's password: # 匿名访问时直接回车,无需输入密码
Anonymous login successfulSharename Type Comment--------- ---- -------print$ Disk Printer Driversmyshare Disk hinaIPC$ IPC IPC Service (Samba 4.8.3)
Reconnecting with SMB1 for workgroup listing.
Anonymous login successfulServer Comment--------- -------Workgroup Master--------- -------SAMBA
(2)Samba 用户浏览共享列表
[root@zhangyiwei-2 ~]# smbclient -L 192.168.100.10 -U zhang3 # 指定Samba用户zhang3
Enter SAMBA\zhang3's password: # 输入zhang3的Samba密码后即可查看共享列表Sharename Type Comment--------- ---- -------print$ Disk Printer Driversmyshare Disk hinaIPC$ IPC IPC Service (Samba 4.8.3)zhang3 Disk Home Directories
Reconnecting with SMB1 for workgroup listing.Server Comment--------- -------Workgroup Master--------- -------SAMBA ZHANGYIWEI
3. 访问共享资源
(1)匿名用户访问共享目录
[root@zhangyiwei-2 ~]# smbclient //192.168.100.10/myshare # 共享路径为//服务器IP/共享名
Enter SAMBA\root's password: # 匿名用户无需输入密码
Anonymous login successful
tree connect failed: NT_STATUS_ACCESS_DENIED# 访问共享被拒绝:tree connect failed: NT_STATUS_ACCESS_DENIED 是因为 [myshare] 中设置了 valid users = zhang3,lisi,仅允许这两个用户访问,匿名用户不在允许列表中,所以被拒绝。
(2)Samba 用户访问共享目录
# 输入zhang3的Samba密码后进入交互模式,可执行ls、get、put等命令
[root@zhangyiwei-2 ~]# smbclient //192.168.100.10/myshare -U zhang3 # 指定用户zhang3
Enter SAMBA\zhang3s password: # 输入zhang3的Samba密码后进入交互模式,可执行ls、get、 put等命令
Try "help" to get a list of possible commands.
smb: \> ls #查看共享目录. D 0 Thu Aug 14 19:01:22 2025.. DR 0 Thu Aug 14 16:55:42 2025test1 D 0 Thu Aug 14 16:56:02 2025file1 N 0 Thu Aug 14 16:56:25 202552403200 blocks of size 1024. 48609792 blocks available
smb: \> mkdir test2
NT_STATUS_ACCESS_DENIED making remote directory \test2
#mkdir test2 被拒绝(NT_STATUS_ACCESS_DENIED):这是因为用户 zhang3 只有读取权限,没有写入权限,无法创建目录。
smb: \> exit
[root@zhangyiwei-2 ~]# smbclient //192.168.100.10/myshare -U lisi
Enter SAMBA\lisi's password:
Try "help" to get a list of possible commands.
smb: \> mkdir test2
ssmb: \> put file2
putting file file2 as \file2 (0.0 kb/s) (average 0.0 kb/s)
smb: \> ls. D 0 Thu Aug 14 19:19:41 2025.. DR 0 Thu Aug 14 16:55:42 2025test1 D 0 Thu Aug 14 16:56:02 2025file1 N 0 Thu Aug 14 16:56:25 2025test2 D 0 Thu Aug 14 19:16:24 2025file2 A 0 Thu Aug 14 19:19:41 202552403200 blocks of size 1024. 48609676 blocks available
smb: \> #拥有读写权限的用户lisi成功创建目录test2,并且上传本地文件fiel2上传至共享目录
4. 挂载共享资源到本地目录
(1)创建挂载点
[root@zhangyiwei-2 ~]# mkdir /smbmount # 创建本地挂载目录
(2)交互式挂载(需手动输入密码)
[root@zhangyiwei-2 ~]# mount -t cifs -o username=lisi //192.168.100.10/myshare /smbmount
Password for lisi@//192.168.100.10/myshare: *** #输入用户对应的samba密码
[root@zhangyiwei-2 ~]# mount -t cifs -o username=zhang3 //192.168.100.10/myshare /smbmount
Password for zhang3@//192.168.100.10/myshare: ******
[root@zhangyiwei-2 ~]# df -TH
文件系统 类型 容量 已用 可用 已用% 挂载点
/dev/sda3 xfs 54G 3.9G 50G 8% /
devtmpfs devtmpfs 2.1G 0 2.1G 0% /dev
tmpfs tmpfs 2.1G 5.6M 2.1G 1% /dev/shm
tmpfs tmpfs 2.1G 14M 2.1G 1% /run
tmpfs tmpfs 2.1G 0 2.1G 0% /sys/fs/cgroup
/dev/sda1 xfs 1.1G 171M 893M 17% /boot
tmpfs tmpfs 413M 8.2k 413M 1% /run/user/42
tmpfs tmpfs 413M 29k 413M 1% /run/user/0
/dev/sr0 iso9660 4.6G 4.6G 0 100% /mnt
//192.168.100.10/myshare cifs 54G 3.9G 50G 8% /smbmount
#可以看到共享资源被成功挂载到了本地
(3)非交互式挂载(直接指定密码)
mount -t cifs -o username=rose,password=rose,sec=ntlmssp //192.168.100.10/myshare /smbmount
# 其中password=rose为rose的Samba密码,sec=ntlmssp指定安全协议
(4)设置开机自动挂载
vim /etc/fstab # 编辑自动挂载配置文件
#添加以下内容
//192.168.100.10/myshare /smbmount cifs username=zhang3,password=123456,sec=ntlmssp 0 0
- 格式说明:
设备路径 挂载点 文件系统类型 挂载选项 dump选项 fsck选项
。password=123456,是用户zhang3的samba密码
(5)多用户挂载(临时切换权限)
多用户挂载允许普通用户临时使用其他 Samba 用户的权限访问共享:
# 写入fstab自动挂载时添加multiuser选项
//192.168.100.10/myshare /smbmount cifs multiuser,username=zhang3,password=123456,sec=ntlmssp 0 0# 普通用户wang5临时获取marry的权限
su - wang5 # 切换到普通用户wang5
cifscreds add 192.168.100.10 -u lisi # 提交lisi的凭证(输入lisi的Samba密码)
cd /smbmount
mkdir test2 # 此时galaxy拥有marry的读写权限,可创建目录
- 原理:默认情况下,普通用户无法直接使用 Samba 用户权限访问共享。
multiuser
选项允许通过cifscreds
命令临时提交其他用户的凭证,从而获取对应权限。
5. Windows 操作系统访问
- 打开文件资源管理器,在地址栏输入
\\192.168.100.10
并回车。 - 在弹出的认证窗口中,输入 Samba 用户名(如
zhang3
或lisi
)及对应密码。 - 访问共享目录
myshare
,进行文件操作。