跳到主要内容

Linux Samba 服务配置

1. Samba 服务简介 🌐

Samba 是一个实现 SMB/CIFS 协议的开源软件,主要用于 Linux 和 Windows 系统间的文件和打印共享。通过 Samba,Linux 服务器可以充当文件服务器,供其他设备访问。

适用场景

  • 跨平台文件共享(Windows、Linux、macOS)。
  • 集中化存储和权限管理。
  • 局域网内文件共享。

2. Samba 服务原理 ⚙️

Samba 服务的核心是 SMB/CIFS 协议,通过以下组件实现文件共享:

  1. 服务器端(smbd):处理文件共享和打印请求。
  2. 名称服务(nmbd):提供网络上的主机名解析。
  3. 客户端工具:挂载和访问共享文件夹。

3. 安装 Samba 服务 🛠️

3.1 安装 Samba

在服务器上安装 Samba 软件包:

sudo apt update && sudo apt install samba -y  # Debian/Ubuntu
sudo yum install samba samba-client -y # CentOS/RHEL

安装完成后,检查 Samba 版本:

samba --version

4. 配置 Samba 服务端 🗂️

4.1 创建共享目录

选择需要共享的目录并设置权限:

sudo mkdir -p /srv/samba/shared  # 创建共享目录
sudo chmod 777 /srv/samba/shared # 设置读写权限

4.2 配置 Samba 文件

配置文件位于 /etc/samba/*.conf, 其中 /etc/samba/smb.conf 是默认配置文件。

最小配置示例

/etc/samba/smb.conf
[global]
# 最低协议版本:禁用 SMB1,使用 SMB2
min protocol = SMB2

# 最高协议版本:启用 SMB3,提升安全性
max protocol = SMB3

# 允许来宾用户
map to guest = bad user

[shared_name]
# 共享目录路径
path = /path/to/shared
# 允许写入共享目录
read only = no
# 启用来宾访问
guest ok = yes

配置项分类

  1. 全局配置([global])
    • 网络协议、日志管理、用户访问控制相关的参数。
  2. 共享配置([共享名])
    • 配置分享目录、权限控制及可见性等。

示例:分享迅雷目录,分享文档目录

[xunlei]
# 共享目录路径
path = /mnt/xunlei/
# 允许写入共享目录
read only = no
# 启用来宾访问
guest ok = yes
[document]
# 共享目录路径
path = /home/user/document
# 允许写入共享目录
read only = no
# 启用来宾访问
guest ok = yes

生效配置

  1. 修改完成后检查配置:
    testparm
  2. 重启 Samba 服务以应用修改:
    sudo systemctl restart smbd

我收集了许多 Samba 配置项,分类并添加了注释,便于查询:

Samba 配置项大全
# === 安全性相关配置 ===
# 设置支持的最低 SMB 协议版本,禁用低版本协议以提升安全性
min protocol = SMB2
# 设置支持的最高 SMB 协议版本
max protocol = SMB3
# 将无效用户映射为来宾用户,用于匿名访问
map to guest = bad user
# 允许来宾用户访问共享目录
guest ok = yes
# 强制加密传输,提升安全性
smb encrypt = mandatory

# === 共享目录相关配置 ===
# 设置共享目录是否只读
read only = no
# 控制新建文件的默认权限
create mask = 0644
# 控制新建目录的默认权限
directory mask = 0755
# 指定共享目录的路径
path = /srv/shared
# 是否允许共享目录显示在网络浏览器中
browseable = yes
# 限制访问共享目录的用户列表
valid users = @users
# 强制所有访问共享目录的用户以指定用户权限操作
force user = nobody
# 强制所有访问共享目录的用户以指定组权限操作
force group = nogroup

# === 日志管理相关配置 ===
# 定义 Samba 日志文件路径
log file = /var/log/samba/log.%m
# 设置日志文件的最大大小(单位:KB)
max log size = 1000
# 设置日志级别(0为最少日志,10为最详细日志)
# 日常使用推荐2,调试问题时可提高到3或更高
log level = 2
# 性能优化,设置Socket选项
socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192

# === 网络与服务器相关配置 ===
# 指定工作组名称
workgroup = WORKGROUP
# 设置服务器描述信息
server string = Samba Server
# 设置最大连接数,避免服务器过载
max connections = 100
# 引入其他配置文件,便于模块化管理
include = /etc/samba/smb.soulio.conf
include = /etc/samba/xunlei.conf

# === MacOS相关优化配置 ===
# 针对MacOS优化,将元数据存储为流文件
fruit:metadata = stream
# 指定设备模型,优化与MacOS Finder的兼容性
fruit:model = Macmini
# 允许MacOS使用AppleDouble格式的文件,不阻止这些文件的创建
fruit:veto_appledouble = no
# 启用POSIX风格的文件重命名,增强与MacOS的兼容性
fruit:posix_rename = yes
# 对文件ID设置为0,解决MacOS的潜在兼容性问题
fruit:zero_file_id = yes
# 删除MacOS文件中的空白资源Fork
fruit:wipe_intentionally_left_blank_rfork = yes
# 删除空的AppleDouble文件,减少冗余文件
fruit:delete_empty_adfiles = yes

配置项分类说明:

  1. 安全性相关配置:配置协议版本、用户映射和加密传输,提升网络和文件传输的安全性。
  2. 共享目录相关配置:管理共享目录的访问权限、创建文件和目录的权限,以及用户限制等。
  3. 日志管理相关配置:控制日志的路径、大小、级别以及网络性能优化。
  4. 网络与服务器相关配置:包括工作组、服务器描述、最大连接数及模块化配置。
  5. MacOS相关优化配置:针对MacOS的兼容性优化,确保与Mac系统更好地协作。

🔒 小贴士:配置加密传输 smb encrypt = mandatory 可以提高安全性,特别是在敏感数据传输时!

4.3 设置 Samba 用户

为 Samba 创建一个用户并设置密码:

sudo smbpasswd -a <用户名>

启用用户:

sudo smbpasswd -e <用户名>
示例

例如,你配置了加密登录

[global]
smb encrypt = mandatory # 强制加密
map to guest = bad user # 无效用户映射为来宾
guest account = nobody # 指定匿名用户的本地账号

[anonymous]
path = /srv/samba/anonymous
read only = no
guest ok = yes # 允许来宾访问

你需要:
1.创建 guest 账号,设置 smb 密码,启用 smb 登录

$ sudo useradd guest
$ sudo smbpasswd -a guest
New SMB password:
Retype new SMB password:
Added user guest.
$ sudo smbpasswd -e guest
Enabled user guest.

2.如果使用Linux命令登录:

  • 可通过命令行指定用户名和密码:
smbclient //server/anonymous -U guest
  • 或挂载时指定:
sudo mount -t cifs //server/anonymous /mnt/samba -o guest

4.4 启动和重启服务

启动并启用 Samba 服务:

sudo systemctl restart smbd nmbd
sudo systemctl enable smbd nmbd

检查服务状态:

sudo systemctl status smbd nmbd

5. 访问 Samba 共享目录 📂

5.1 从 Windows 客户端访问

  1. 打开文件资源管理器,在地址栏输入:
    \\<服务器IP>\shared
  2. 输入 Samba 用户名和密码登录。

5.2 从 Linux 客户端访问

挂载 Samba 共享目录:

sudo mount -t cifs //<服务器IP>/shared /mnt/samba -o username=<用户名>,password=<密码>

卸载共享目录:

sudo umount /mnt/samba

6. Samba 常用操作 🔧

6.1 测试配置文件

验证 Samba 配置是否正确:

testparm

6.2 查看当前连接用户

显示当前连接到 Samba 服务的用户和会话:

sudo smbstatus

6.3 设置共享目录权限

限制访问共享目录的用户或组:

sudo chown -R <用户>:<> /srv/samba/shared
sudo chmod 770 /srv/samba/shared

7. 安全性与优化 🔐

7.1 配置防火墙

开放 Samba 所需端口:

sudo ufw allow samba  # UFW 防火墙
sudo firewall-cmd --add-service=samba --permanent
sudo firewall-cmd --reload

7.2 禁用匿名访问

在共享配置中移除 guest ok = yes,并为每个用户设置密码。

7.3 日志与监控

启用详细日志记录以监控访问行为:

log level = 3
log file = /var/log/samba/%m.log

总结 🌟

通过本教程,你已经掌握了 Samba 服务的安装与配置方法,并了解了一些实用技能。Samba 是跨平台文件共享的强大工具,适合家庭和企业环境使用。快试试搭建你的 Samba 服务吧!🚀

希望这篇教程帮助你理解和使用 Samba!别忘了收藏 在线知识库,获取更多实用教程!😊