目录

Samba的简述

1️⃣ Samba 是什么

2️⃣ Samba 的主要组成服务

samba的实际操作

一、环境准备与规划

二、安装 Samba 服务

三、创建共享目录与设置权限

四、创建 Samba 共享用户

五、配置 Samba 主配置文件

六、配置 SELinux 策略

七、配置防火墙规则

八、测试与验证

九、客户端连接测试

补充:专门针对跨操作系统兼容性的优化配置


Samba的简述

1️⃣ Samba 是什么

  • Samba 是一个 开源实现的 SMB/CIFS 协议套件

  • SMB(Server Message Block)是 Windows 文件共享协议;

  • CIFS(Common Internet File System)是 SMB 的扩展版本。

Samba 在 Linux 系统中实现了 SMB 协议,因此:

  • Linux 主机可以作为 SMB 服务器

  • Windows、macOS、Linux 等都能作为 客户端 访问它。


2️⃣ Samba 的主要组成服务

组件 作用
smbd 提供文件共享、打印共享服务,处理认证与文件访问
nmbd 提供 NetBIOS 名称解析,让局域网中能用主机名访问共享
winbindd 用于集成 Windows 域认证(如 AD 域)

  • samba的实际操作

一、环境准备与规划

  • 共享目录: /srv/samba/share

  • 共享名: public_share

  • 共享账户: smbuser

  • 客户端访问: 通过 smbuser 账户进行读写

  • 防火墙状态:开启

  • selinux:强制状态(Enforcing)

二、安装 Samba 服务

# 安装 Samba 软件包
[root@web1 ~]# yum -y install samba samba-client samba-common

# 启动服务并设置开机自启
[root@web1 ~]# systemctl enable smb nmb --now

三、创建共享目录与设置权限

# 1. 创建共享目录
[root@web1 ~]# mkdir -p /srv/samba/share

# 2. 设置目录权限(确保其它用户有执行权限,否则无法访问)
[root@web1 ~]# chown smbuser:smbuser /srv/samba/share/
[root@web1 ~]# chmod 755 /srv/samba/share/

# 3. 检查目录的 SELinux 上下文(此时还不是 samba 共享类型)
[root@web1 ~]# ls -laZ /srv/samba/

如果目录权限没有设置得当,后续客户端测试会出现Permission Denied(权限拒绝)错误

四、创建 Samba 共享用户

重要:Samba 用户必须对应一个已有的 Linux 系统用户

# 1. 创建系统用户(不创建家目录,不设置登录shell)
[root@web1 ~]# useradd -s /sbin/nologin -M smbuser

# 2. 设置系统用户密码(可选,Samba 有自己的密码)
[root@web1 ~]# echo 123 | passwd --stdin smbuser

# 3. 将用户添加到 Samba 数据库,并设置 Samba 密码
[root@web1 ~]# smbpasswd -a smbuser
# 根据提示输入两次 Samba 密码,这个密码用于客户端连接
# 这里我设置的密码为123

如果缺少第3步,后续测试共享时会出现NT_STATUS_LOGON_FAILURE(登录失败)

五、配置 Samba 主配置文件

备份并编辑 /etc/samba/smb.conf:

# 备份原配置
[root@web1 ~]# cp /etc/samba/smb.conf /etc/samba/smb.conf.bak

# 编辑配置
[root@web1 ~]# vim /etc/samba/smb.conf

在文件末尾添加以下配置:

[public_share]
	# 共享描述
    comment = Public Shared Directory
    # 共享目录路径
    path = /srv/samba/share
    # 允许访问的用户
    valid users = smbuser
    # 可浏览(在网络上可见)
    browseable = yes
    # 可写入
    writable = yes
    # 新创建文件的权限
    create mask = 0664
    # 新创建目录的权限  
    directory mask = 0775
    # 禁止匿名访问
    public = no
    # 允许写入
    read only = no
    # 来宾账户不可访问
    guest ok = no

六、配置 SELinux 策略

这是最关键的一步,确保 SELinux 允许 Samba 访问共享目录

# 1.安装提供semanage命令的包
[root@web1 ~]# yum -y install policycoreutils-python-2.5-22.el7.x86_64

# 2. 将共享目录的 SELinux 上下文改为 samba_share_t
[root@web1 ~]# semanage fcontext -a -t samba_share_t "/srv/samba/share(/.*)?"

# 3. 恢复该目录的默认 SELinux 上下文(应用上一步的设置)
[root@web1 ~]# restorecon -Rv /srv/samba/share/

# 4. 允许 Samba 对共享目录进行读写操作
[root@web1 ~]# setsebool -P samba_export_all_ro on
[root@web1 ~]# setsebool -P samba_export_all_rw on

# 5. 验证目录的 SELinux 上下文
[root@web1 ~]# ls -laZ /srv/samba/share/

应该看到上下文类型变为: unconfined_u:object_r:samba_share_t:s0

七、配置防火墙规则

允许 Samba 服务通过防火墙:

#  查看 Samba 相关服务在防火墙中的定义
[root@web1 ~]# firewall-cmd --get-services | grep samba

#  永久开放 Samba 服务
[root@web1 ~]# firewall-cmd --permanent --add-service=samba

#  重新加载防火墙配置
[root@web1 ~]# firewall-cmd --reload

#  验证规则
[root@web1 ~]# firewall-cmd --list-all

应该看到 samba 在 services: 列表中

八、测试与验证

1. 测试配置文件语法:

[root@web1 ~]# testparm

看到 Loaded services file OK. 表示配置正确

2. 重启 Samba 服务:

[root@web1 ~]# systemctl restart smb nmb

3. 在服务器本地测试共享:

[root@web1 ~]# smbclient //localhost/public_share -U smbuser
Enter SAMBA\smbuser's password: 
Try "help" to get a list of possible commands.
smb: \> ls
  .                                   D        0  Sun Oct 12 06:23:06 2025
  ..                                  D        0  Sun Oct 12 06:23:06 2025

		18555904 blocks of size 1024. 16601212 blocks available
smb: \> exit

4. 检查共享列表:

[root@web1 ~]# smbclient -L localhost -U smbuser
Enter SAMBA\smbuser's password: 

	Sharename       Type      Comment
	---------       ----      -------
	print$          Disk      Printer Drivers
	public_share    Disk      Public Shared Directory
	IPC$            IPC       IPC Service (Samba 4.7.1)
	smbuser         Disk      Home Directories
Reconnecting with SMB1 for workgroup listing.

	Server               Comment
	---------            -------

	Workgroup            Master
	---------            -------
	SAMBA                WEB1

九、客户端连接测试

在 Linux 客户端:

# 安装客户端
[root@web2 ~]# yum -y install cifs-utils

# 创建挂载点
[root@web2 ~]# mkdir /mnt/samba_share

# 挂载共享
[root@web2 ~]# mount -t cifs -o username=smbuser,password=123 //192.168.4.100/public_share /mnt/samba_share

# 测试读写
[root@web2 ~]# touch /mnt/samba_share/test.txt
[root@web2 ~]# ls /mnt/samba_share/
test.txt

在 Windows 客户端:

  1. 打开文件资源管理器

  2. 地址栏输入:\\服务器IP\public_share

  3. 输入用户名 smbuser 和密码

  4. 应该能正常访问并创建/删除文件

可正常创建文件夹

samba共享完成!

补充:专门针对跨操作系统兼容性的优化配置

在/etc/samba/smb.conf的现有配置中添加:

[global]
# 协议兼容:确保 Win10+/macOS/Linux 都能连接
server min protocol = SMB2

# 字符集兼容:解决中文乱码问题  
dos charset = CP936
unix charset = UTF-8

# macOS 特殊支持
vfs objects = fruit

这些配置能显著改善不同系统间的文件共享体验

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐