凌峰创科服务平台

Linux下如何安装配置Samba服务器?

概述

Samba 是一个开源的软件套件,它实现了 SMB/CIFS 协议,允许 Windows 客户端访问 Linux 服务器上的文件和打印机,就像访问网络上的另一台 Windows 机器一样。

Linux下如何安装配置Samba服务器?-图1
(图片来源网络,侵删)

本指南将完成以下目标:

  1. 安装 Samba 服务器。
  2. 创建一个共享目录。
  3. 配置 Samba,定义共享和用户。
  4. 设置防火墙规则。
  5. 从 Windows 和 Linux 客户端访问共享。
  6. 介绍一些高级和安全配置。

第一步:更新系统

在安装任何新软件之前,最好先更新系统的软件包列表和已安装的软件。

对于 Ubuntu/Debian:

sudo apt update
sudo apt upgrade -y

对于 CentOS/RHEL:

# 对于 CentOS 7/RHEL 7
sudo yum update -y
# 对于 CentOS 8/RHEL 8 或更新版本
sudo dnf update -y

第二步:安装 Samba

使用系统的包管理器安装 Samba 软件包。

对于 Ubuntu/Debian:

sudo apt install samba -y

对于 CentOS/RHEL:

# 对于 CentOS 7/RHEL 7
sudo yum install samba samba-client -y
# 对于 CentOS 8/RHEL 8 或更新版本
sudo dnf install samba samba-client -y

安装完成后,Samba 服务会自动启动,我们可以检查其状态:

Linux下如何安装配置Samba服务器?-图2
(图片来源网络,侵删)
sudo systemctl status smbd  # Samba 服务 (SMB Daemon)
sudo systemctl status nmbd  # NetBIOS 名称服务

第三步:创建共享目录和 Samba 用户

为了安全,我们不应该直接共享用户的主目录,这里我们创建一个专门的共享目录。

  1. 创建共享目录

    sudo mkdir -p /srv/samba/public
    • /srv 是存放服务数据的标准目录。
    • -p 选项会确保父目录(如果不存在)也会被创建。
  2. 设置目录权限 为了让 Samba 用户可以读写,我们需要设置正确的权限。

    # 设置所有者为 root,组为 samba
    sudo chown -R root:samba /srv/samba/public
    # 设置目录权限为 770 (所有者完全控制,组可读写执行,其他用户无权限)
    sudo chmod -R 770 /srv/samba/public
    • 重要:Samba 使用自己的用户认证系统,而不是直接使用 Linux 系统的用户,但共享目录的 Linux 文件系统权限仍然需要正确设置,以允许 Samba 进程访问。
  3. 创建 Samba 用户 Samba 用户必须是 Linux 系统中已存在的用户,这里我们以创建一个名为 sambauser 的用户为例。

    Linux下如何安装配置Samba服务器?-图3
    (图片来源网络,侵删)
    • 创建 Linux 用户(如果不存在):

      sudo useradd -m -s /bin/bash sambauser
      # 为该用户设置一个 Linux 登录密码(可选,但推荐)
      sudo passwd sambauser
    • 将该用户添加到 Samba 数据库: 使用 smbpasswd 命令为 sambauser 设置一个 Samba 专用的密码,这个密码是你在 Windows 访问共享时需要输入的。

      sudo smbpasswd -a sambauser

      系统会提示你输入并确认一个新密码。


第四步:配置 Samba

Samba 的主配置文件是 /etc/samba/smb.conf,我们需要编辑这个文件来定义我们的共享。

  1. 备份原配置文件

    sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.bak
  2. 编辑配置文件 使用你喜欢的文本编辑器,nanovim

    sudo nano /etc/samba/smb.conf
  3. 添加共享配置 在文件末尾添加以下内容来定义我们的 public 共享:

    [public]
        comment = Public Share
        path = /srv/samba/public
        browsable = yes
        writable = yes
        guest ok = no
        valid users = @samba  # 只允许 samba 组的用户访问
        force create mode = 0660
        force directory mode = 0770

    配置项解释:

    • [public]:这是在 Windows 网络邻居中显示的共享名称。
    • comment:对共享的简短描述。
    • path:共享的绝对路径。
    • browsable = yes:允许在“网络”中看到此共享。
    • writable = yes:允许用户向此共享写入文件。
    • guest ok = no:禁止匿名(访客)访问,必须提供用户名和密码。
    • valid users = @samba:这是安全关键配置,它只属于 samba 组的用户可以访问,你需要先创建这个组,并将用户加入其中:
      sudo groupadd samba
      sudo usermod -aG samba sambauser
    • force create mode / force directory mode:强制在此共享中创建的文件和目录具有特定的权限,确保它们属于 samba 组。
  4. 测试配置文件 保存并关闭文件后,运行以下命令检查配置文件是否有语法错误:

    testparm

    如果输出 Load smb config files from /etc/samba/smb.confOK 等信息,则表示配置正确。

  5. 重启 Samba 服务 使新的配置生效:

    sudo systemctl restart smbd nmbd

第五步:配置防火墙

为了能从外部访问 Samba 共享,必须在防火墙中开放相应的端口。

对于 Ubuntu/Debian (使用 UFW):

sudo ufw allow samba

对于 CentOS/RHEL (使用 firewalld):

sudo firewall-cmd --permanent --add-service=samba
sudo firewall-cmd --reload

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

Samba 服务器已经配置完成,你可以从 Windows 或 Linux 客户机访问它。

从 Windows 访问:

  1. 打开“文件资源管理器”。
  2. 在地址栏中输入服务器的 IP 地址或主机名,格式为 \\<服务器IP或主机名>
    • \\192.168.1.100
  3. 系统会弹出身份验证窗口。
  4. 用户名:输入你之前创建的 Samba 用户名,sambauser
  5. 密码:输入你用 smbpasswd 设置的 Samba 密码。
  6. 点击“确定”,你就可以看到 public 共享文件夹了。

从 Linux 访问:

你可以使用 smbclient 命令行工具或图形化文件管理器。

  1. 使用 smbclient (命令行):

    # 安装 smbclient (如果未安装)
    # Ubuntu/Debian: sudo apt install smbclient
    # CentOS/RHEL: sudo yum install samba-client
    # 列出共享
    smbclient -L //192.168.1.100 -U sambauser
    # 登录并进入共享
    smbclient //192.168.1.100/public -U sambauser

    登录后,可以使用 help 查看可用命令,如 get (下载), put (上传), ls (列表) 等。

  2. 使用文件管理器 (图形界面):

    • 打开 Nautilus (GNOME), Dolphin (KDE) 等文件管理器。
    • 在地址栏输入 smb://192.168.1.100
    • 双击 public 共享,然后输入用户名和密码即可挂载和访问。

第七步:高级与安全配置

只读共享

如果你希望一个共享是只读的,将 writable = yes 改为 writable = no,或者添加 read only = yes

允许特定用户写入

即使共享是可写的,你也可以限制只有特定用户可以写入。

[public]
    path = /srv/samba/public
    writable = yes
    write list = sambauser, another_user # 只有这两个用户可以写

创建用户级别的私有共享

如果你想为每个用户创建一个私有的、只能由自己访问的目录,可以这样配置:

[homes]
    comment = Home Directories
    browseable = no
    writable = yes
    valid users = %S  # %S 是当前登录的用户名
    create mask = 0700
    directory mask = 0700

配置后,当用户 sambauser 登录时,他会自动看到一个名为 sambauser 的共享,指向其主目录 /home/sambauser,并且只有他自己可以访问。

安全建议

  • 使用强密码:为 Samba 用户设置复杂的密码。
  • 最小权限原则:只授予必要的用户访问共享的权限。
  • 限制网络访问:如果可能,在防火墙或 Samba 配置中限制只有特定 IP 地址可以访问。
    • smb.conf[global] 部分添加:
      hosts allow = 192.168.1.0/24 192.168.2.100

      这将只允许 168.1.x 网段和 168.2.100 这台机器访问。


常见问题排查

  • 无法访问,提示“网络错误”或“找不到网络路径”

    • 检查防火墙是否已开放 Samba 端口(137-138/UDP, 139/TCP, 445/TCP)。
    • 检查 SELinux 是否为 enforcing 状态,如果是,需要为 Samba 设置正确的布尔值(setsebool -P samba_enable_home_dirs on)或将其临时设为 permissive (sudo setenforce 0) 进行测试。
    • 确保 Samba 服务正在运行 (sudo systemctl status smbd)。
    • 使用 testparm 检查配置文件语法。
  • 提示“拒绝访问”或“用户名或密码错误”

    • 确认用户名和密码是否正确。
    • 确认该用户是否在 valid users 列表中,或者是否属于指定的组。
    • 确认共享目录的 Linux 文件系统权限是否正确(770samba 组的所有权)。

希望这份详细的指南能帮助你成功安装和配置 Samba 服务器!

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