凌峰创科服务平台

Fedora如何配置Samba服务器?

概述

Samba 是一个开源软件套件,它实现了 SMB/CIFS 协议,允许 Linux/Unix 系统与 Windows 系统进行文件和打印机共享,配置 Samba 服务器主要有三个核心步骤:

Fedora如何配置Samba服务器?-图1
(图片来源网络,侵删)
  1. 安装 Samba 软件包
  2. 配置 Samba (创建共享目录、设置用户权限)
  3. 启动并启用服务,并配置防火墙

第一步:安装 Samba

我们需要更新系统软件包列表并安装 Samba 主程序包。

  1. 打开终端 (Terminal)。
  2. 更新系统
    sudo dnf update -y
  3. 安装 Samba
    sudo dnf install samba -y
  4. 验证安装
    samba --version

    如果看到版本信息,说明安装成功。


第二步:配置 Samba

这是最关键的一步,我们将创建一个名为 public 的公共共享目录和一个名为 secure 的需要用户名和密码才能访问的私有共享目录。

创建共享目录

建议在 /srv 目录下创建共享,这是 Linux 系统中用于存放服务数据的推荐位置。

Fedora如何配置Samba服务器?-图2
(图片来源网络,侵删)
# 创建公共共享目录
sudo mkdir -p /srv/samba/public
# 创建私有共享目录
sudo mkdir -p /srv/samba/secure
# 设置目录所有者为 root,samba 组为共享组
sudo chown -R root:samba /srv/samba

创建 Samba 用户和设置密码

Samba 的用户必须是您系统中的有效用户,我们将为现有用户(fedora)创建一个 Samba 密码。

  1. 添加系统用户到 samba (如果还没有的话):

    # 将用户 fedora 添加到 samba 组
    sudo usermod -aG samba fedora

    提示:您也可以创建一个专门用于 Samba 访问的系统用户,sudo useradd -s /sbin/nologin smbuser

  2. 为用户设置 Samba 密码: 这个密码独立于用户的系统登录密码。

    Fedora如何配置Samba服务器?-图3
    (图片来源网络,侵删)
    sudo smbpasswd -a fedora

    系统会提示您输入并确认一个新密码,这个密码就是将来在 Windows 中访问共享时需要输入的密码。

编辑 Samba 主配置文件

Samba 的主要配置文件是 /etc/samba/smb.conf,我们建议先备份原始文件,然后进行编辑。

# 备份原始配置文件
sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.bak
# 使用您喜欢的编辑器打开配置文件,nano 或 vim
sudo nano /etc/samba/smb.conf

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

# ====================================================================
# Samba Share Configurations
# ====================================================================
[global]
   # 设置工作组,以便在 Windows 网络中正确显示
   workgroup = WORKGROUP
   # 设置服务器描述信息
   server string = Fedora Samba Server
   # 允许 Windows 客户端浏览共享列表
   netbios name = FEDORA-SAMBA
   # 允许guest账户,用于公共共享
   map to guest = Bad User
# ====================================================================
# 公共共享 - 无需密码即可访问
# ====================================================================
[public]
   comment = Public Share - No Password Required
   path = /srv/samba/public
   browsable = yes
   guest ok = yes         # 允许 guest 访问
   read only = yes        # 只读模式
   force user = nobody    # 所有文件的所有者设为 nobody
   create mask = 0644     # 新建文件的权限
   directory mask = 0755  # 新建目录的权限
# ====================================================================
# 私有共享 - 需要用户名和密码才能访问
# ====================================================================
[secure]
   comment = Secure Share - Requires Authentication
   path = /srv/samba/secure
   browsable = yes
   valid users = fedora   # 只有 fedora 用户可以访问
   guest ok = no          # 禁止 guest 访问
   writable = yes         # 允许写入
   create mask = 0664     # 新建文件的权限
   directory mask = 0775  # 新建目录的权限
# ====================================================================
# 打印机共享 (可选)
# ====================================================================
#[printers]
#   comment = All Printers
#   path = /var/spool/samba
#   browseable = no
#   guest ok = no
#   writable = no
#   printable = yes

配置解释:

  • [global]: 全局设置。
    • workgroup: 必须与您 Windows 的工作组名称一致(通常是 WORKGROUP)。
    • map to guest = Bad User: 当用户无法验证时,将其作为 guest 用户对待,这对于公共共享很重要。
  • [public]: 共享名称,在 Windows 网络中会显示为 public
    • path: 共享的绝对路径。
    • guest ok = yes: 允许来宾用户(无需密码)访问。
    • read only = yes: 来宾用户只能读取,不能修改。
  • [secure]: 需要认证的共享。
    • valid users = fedora: 明确指定只有 fedora 用户可以访问。
    • writable = yes: 允许此用户写入。
    • guest ok = no: 禁止来宾访问。

验证配置文件语法

保存并关闭编辑器后,运行以下命令检查 smb.conf 文件是否有语法错误:

testparm -s

如果输出 Loaded services file OK.,则表示配置文件语法正确。


第三步:设置 SELinux 和防火墙

Fedora 默认启用 SELinux 和 firewalld,这是安全的关键,但需要我们为 Samba 服务进行正确的配置。

配置 SELinux

SELinux 默认会阻止 Samba 访问共享目录,我们需要为共享目录设置正确的 SELinux 上下文。

  1. 为公共共享目录设置上下文
    sudo semanage fcontext -a -t samba_share_t "/srv/samba/public(/.*)?"
  2. 为私有共享目录设置上下文
    sudo semanage fcontext -a -t samba_share_t "/srv/samba/secure(/.*)?"
  3. 应用新的上下文
    sudo restorecon -Rv /srv/samba/

    注意semanage 命令提示 "Command not found",您需要先安装 policycoreutils-python-utils 包:sudo dnf install policycoreutils-python-utils

配置防火墙

firewalld 默认会阻止 Samba 所需的端口(139, 445 以及用于 NetBIOS 的 137, 138),我们需要将这些端口永久开放。

# 添加 Samba 服务到防火墙规则集(推荐方式)
sudo firewall-cmd --permanent --add-service=samba
# 重新加载防火墙规则以使更改生效
sudo firewall-cmd --reload

第四步:启动并启用 Samba 服务

所有配置都已完成,我们可以启动服务并设置为开机自启。

# 启动 smb 服务 (处理文件和打印共享)
sudo systemctl start smb
# 启动 nmb 服务 (处理 NetBIOS 名称解析,用于网络浏览)
sudo systemctl start nmb
# 将 smb 和 nmb 服务设置为开机自启
sudo systemctl enable smb
sudo systemctl enable nmb

检查服务状态

# 查看服务是否正在运行
sudo systemctl status smb nmb
# 查看最近的日志,排查问题
journalctl -u smb

第五步:从客户端访问共享

您的 Samba 服务器已经准备就绪!

从 Windows 访问

  1. 在 Windows 的文件资源管理器地址栏中,输入 \\<你的FedoraIP地址>
    • \\192.168.1.100
  2. 您应该能看到两个共享文件夹:publicsecure
  3. 访问 public:直接双击即可,无需输入密码。
  4. 访问 secure:双击后,系统会提示您输入用户名和密码。
    • 用户名FEDORA-SAMBA\fedora 或者直接 fedora
    • 密码:您之前用 smbpasswd 设置的密码。

从 Linux (Fedora) 访问

  1. 使用文件管理器
    • 在地址栏输入 smb://<你的FedoraIP地址>
    • 您会看到 publicsecure 共享。public 可以直接访问,secure 会弹出身份验证窗口。
  2. 使用命令行挂载 (可选):
    • 创建一个本地挂载点:
      mkdir ~/mnt/secure
    • 挂载私有共享:
      # -o username=你的用户名,password=你的密码
      sudo mount -t cifs //192.168.1.100/secure /home/你的用户名/mnt/secure -o username=fedora,password=你的密码,iocharset=utf8
    • 卸载时使用:sudo umount /home/你的用户名/mnt/secure

故障排除

如果遇到问题,请检查以下几点:

  1. 防火墙:确认 firewalld 已允许 samba 服务。
    sudo firewall-cmd --list-all
  2. SELinux:如果怀疑是 SELinux 问题,可以临时将其设置为 Permissive 模式进行测试(不推荐长期使用)。
    sudo setenforce 0

    如果问题解决,请恢复为 Enforcing 模式 (sudo setenforce 1) 并重新检查 SELinux 上下文设置。

  3. SELinux 布尔值:某些操作可能需要启用特定的 SELinux 布尔值。
    # 允许 Samba 写入公共目录
    sudo setsebool -P samba_enable_home_dirs on
  4. 日志文件:查看 Samba 的日志是排查问题的最佳方式。
    • 主要日志:/var/log/samba/log.smbd/var/log/samba/log.nmbd
    • 使用 tail -f /var/log/samba/log.smbd 可以实时查看日志。
  5. 网络:确保您的 Fedora 服务器和客户端在同一个局域网内,并且可以互相 ping 通。

至此,您已经成功在 Fedora 上配置好了一个功能完善的 Samba 服务器!

分享:
扫描分享到社交APP
上一篇
下一篇